Merhaba arkadaşlar
74138 ile port çoğaltmak istiyorum. Elimde halihazırda devre ve kod var ancak ben bunun tam olarak mantığını anlamış değilim
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(b)
int i;
void main ()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
while(1)
{
for(i=0;i<8;i++)
{
output_b(i|0b00000000);
delay_ms(250);
}
for (i=0;i<8;i++)
{
output_b(i|0b00010000);
delay_ms(250);
}
for(i=0;i<8;i++)
{
output_b(i|0b00100000);
delay_ms(250);
}
for (i=0;i<8;i++)
{
output_b(i|0b00110000);
delay_ms(250);
}
}
}
Kodlarda sırayla 4 çoğullayıcıyı çalıştırmış 32 led sırayla yanıyor. Benim anlamadığım husus, ilk çoğullayıcı çalıştırılırken output_b(i|0b00000000); kodu kullanılmış sonra output_b(i|0b00010000); daha sonra output_b(i|0b00100000); son olarak da output_b(i|0b00110000); bu kod kullanılmış. Bunun mantığı nedir? Neye göre böyle bir kullanım olmuş? Devrenin resmini ve dosyasını aşağıda verdim. Cevaplarınız için şimdiden teşekkür ederim.
(http://c1209.hizliresim.com/11/k/d4h5f.jpg) (http://bit.ly/c25MCx)
https://hotfile.com/dl/172549857/f12d9dc/74138_le_Port_oullama_Uygulamas.DSN.html (https://hotfile.com/dl/172549857/f12d9dc/74138_le_Port_oullama_Uygulamas.DSN.html)
Resim küçük olduğundan pek rahat göremedim ama anladığım kadarıyla, seçici 74138 portun büyük bitleriyle sürülüyor, diğer (LED sürücü) 74138'ler ise küçük bitlerle. Orada yapılan OR işlemi bu iki değeri toplamaktan ibaret. Hatta | yerine + da koyabilirdi bence. Her bir for döngüsü bir tane sürücü 74138'ü seçiyor, o da 8 LED'i sırayla yakıyor.
S.A.
serdar Çiçeğin örneklerinden birisi şema. Altas kitap evinden ziplerini inceleyebilirsiniz.
Tek olan 74138 in ABC seçme uçlarını PIC in RB4,RB5,RB6 pinlerine bağlamış. Bu pinlere sıra ile 0-1-2-3 değerlerini uygulayarak alt alta olan 74138 leri sıra ile enable yapıyor. Alt alta olan 74138 lerin ABC seçme girişleri birbirine paralel zaten. İlk olarak tekli 74138 ile alta alta olanlardan birini seçiyor, birbirlerine paralel olan ABC girişlerindenden de datasını veriyor. Hangi 74138 seçilmiş ise sadece o çıkış veriyor. Aslında data hepsine gidiyor fakat enable pinleri aktif olmadığından çıkış vermiyor. Olayın özeti budur arkadaşım..
*** 74138; 3x8 decoder/demux entegresidir.
Bu tür port çoğullama işlemini Shift-Register ile yapmak daha
mantıklı gibi geliyor.
3 uç ile istediginiz kadar çoğullama yapılabilirsiniz...
Hatta Max7219 ile 64 led yakmak mümkün...
Saygılar...
Cevaplarınız için teşekkür ederim
Anlayamadığım iki nokta var. İlki, solda bulunan çipin hangi kodla çalışır hale geldiği. İkincisi ise, ben sağdan ilk çipi çalıştırmak istediğimde i'yi 0b00000000 ile veya işlemine sokuyorum. İkinci çip içinse 0b00010000 ile. Buradaki artışın mantığı nedir neye göre değişiyor bu değerler? Ben soldaki çipin y4 ucuna bir çoğaltıcı daha taksam hangi sayı ile veya işlemine sokmam gerekiyor?
MSB LSB
7 6 5 4 3 2 1 0
0 0 0 0 0 x x x ile ledler yakılıyor,
0 0 x x x 0 0 0 ile de ilgili 74138 seçiliyor
Örnek:
1.ledin yanması için:
0 0 0 0 1 0 0 1 yapılması gerekli
digerlerini de buna göre hesaplayabilirisin...
Saygılar...
Hocam sorun çözüldü, teşekkür ederim
Hoam MCP23017 falan kullan. Rahat edersin...
Alıntı yapılan: alperodabasi - 18 Eylül 2012, 19:03:52
Hoam MCP23017 falan kullan. Rahat edersin...
Onun mantığı ve kullanımı nasıl hocam?
23017 I2C, 23S17 ise SPI çalışır.
16 bit IO + interrupt desteği vardır. İnterruptlar yapılandırılabilir. Microchip firmasının en iyi ürünlerinden birisidir.
MCU ile çalışan herkesin yastık altında 10 15 tane bulundurması gereken bir nimet.