port çoğaltma

Başlatan _MeRKeZ_, 17 Eylül 2012, 18:02:15

_MeRKeZ_

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.



https://hotfile.com/dl/172549857/f12d9dc/74138_le_Port_oullama_Uygulamas.DSN.html



Tagli

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.
Gökçe Tağlıoğlu

Murat Mert

S.A.
serdar Çiçeğin örneklerinden birisi şema. Altas kitap evinden ziplerini inceleyebilirsiniz.
mert07

fgokcegoz

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.
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

mehmet

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...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

_MeRKeZ_

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?

mehmet


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...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

_MeRKeZ_

Hocam sorun çözüldü, teşekkür ederim

alper06

Hoam MCP23017 falan kullan. Rahat edersin...

_MeRKeZ_

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?

Veli B.

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.