Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

74hc595 ve buton kontrol hakkında

Başlatan xoom, 01 Kasım 2013, 11:19:39

xoom

Arkadaşlar 5 adet 74hc595 ile ledli animasyon şeklinde bir devre yapmak istiyorum. bir konuda yardıma ihtiyacım var
yapmak istediğim işlemcinin a0 pinindeki butona basttıkça
1.basmada 1 led soldan sağa gidecek
2.basmada 2 led soldan sağa gidecek
böyle 3. 4. 5.6. basmada kaç defa basıldıysa o kadar ledbirlikte kayma hareketi yapacak.
bu döngüde buton kontrolünü yapamadım. animasyon haraket ederken arada butona basıldıysa sonraki animasyon için kaçıncı basma olduğunu unutmayıp o kadar led ile beraber kayma işlemini yaptırmada sıkıntı yaşıyorum.

Mr.Java

Alıntı yapılan: xoom - 01 Kasım 2013, 11:19:39
Arkadaşlar 5 adet 74hc595 ile ledli animasyon şeklinde bir devre yapmak istiyorum. bir konuda yardıma ihtiyacım var
yapmak istediğim işlemcinin a0 pinindeki butona basttıkça
1.basmada 1 led soldan sağa gidecek
2.basmada 2 led soldan sağa gidecek
böyle 3. 4. 5.6. basmada kaç defa basıldıysa o kadar ledbirlikte kayma hareketi yapacak.
bu döngüde buton kontrolünü yapamadım. animasyon haraket ederken arada butona basıldıysa sonraki animasyon için kaçıncı basma olduğunu unutmayıp o kadar led ile beraber kayma işlemini yaptırmada sıkıntı yaşıyorum.

A0 butonuna sayaç değişkeni aktar ve her basımında sayac değişkenini arttır.Bunlarıda switch case döngüsüne koyabilirsin.case 1 ise 1 led yak 1 kaydır.sayac 2 ise case 2 2 led yak ve kaydır şeklinde.Bu şekilde anladım ne yapmak istediğini.

xoom

Anladiginiz şey doğru fakat atiyorum 3.lü kayma işlemi yaparken butona basildiginda animasyon bittiğinde 4.kez basildigini nasil kaçırmadan sonraki animasyonun 4 lu gitmesi gerekiyor

Mr.Java

Alıntı yapılan: xoom - 01 Kasım 2013, 12:45:27
Anladiginiz şey doğru fakat atiyorum 3.lü kayma işlemi yaparken butona basildiginda animasyon bittiğinde 4.kez basildigini nasil kaçırmadan sonraki animasyonun 4 lu gitmesi gerekiyor

Butonlarde debounce olabilir.Araya 10ms bir gecikme koyup deneyin.

selimkoc

kesme ile buton bilgisi hafızaya alınarak yapılabilir. Ama butonu kesme girişine bağlamalısınız.

xoom

https://www.dropbox.com/s/1aixenlie8vnuw5/tst.DSN
yukaridaki devrede butona her bastığımızda kaçıncı kez bastıysak o kadar led soldan sağa gidip gelicek
herhangi bir sayıda git gel yaparken butona bir kez daha basılırsa animasyon başa geldiğinde son basma sayısı kadar led ile kayma hareketi yapmalı.
bazı yorumlar var ama kod ile örnek verecek birisi olursa sevinirim..

xoom

#6
Arkadaşlar halen daha bazı yardımlara ihtiyacım var..
ben butona bastıkça sola gitme sorununu kısmen hallettim ama  sağa doğru aynı haraketi nasıl yapacağıımı kod ile çözemedim bir bakabilirmisiniz.
Aşağıdaki linkte ISIS ve CCS C kodlarını ekliyorum.
https://www.dropbox.com/s/ahpzqriwnvummqw/deneme.rar

xoom

Halen daha 74hc595 entegresi ile aşağıdaki videonun 4.30dk daki sağa sola sürme mantığını anlatacak birini bekliyorum..
PIC12F675 32 LED PWM CONTROLLER WITH 74HC595, PIC16F84A AS SEQUENCE LED AND MULTISPEED KNIGHT RIDER

Klein

sola gitmek için
0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF 
sağa gitmak için
0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF

Bunları zaten biliyorum, adam bu efektlerin hepsini  işlemci ya da eprom gibi bir şey kullanmadan sadece lojikle yapmış diyorsan,  Valla helal lsun. O zaman ben de açıklama bekliyorum.

xoom

Klein hocam videodaki arkadaş 12f675 ve 74hc595 ile yapmış zaten videoda yazıyor..bende aynısını yapmak istiyorum aynı malzemeleri kullanarak..
ben soldan sağa kaydırabiliyorum fakat geriye doğru girdiğim seri bilgiyi kaydıramıyorum.
6. Mesajda Dosyalarımı paylaştım.

Klein

Eğer her clk ile birlikte latch işareti verir, bir süre bekler bir clk daha verip peşinden latch işareti verirsen tek yönlü kaydırırsın. Muhtemelen benzeri şekilde yapıyorsun.
Latch vermeden 8 biti de yazacaksın.  Ondan sora latch işareti vereceksin. biraz bekleyip sıradaki 8 biti yazıp latch işareti vereceksin.

xoom

#include "main.h"

#Define DS PIN_B5
#Define ST_CP PIN_B6
#Define SH_CP PIN_B7
#Define Buton PIN_B0
int i;
int k;
int sayi=0;

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   
   while(TRUE)
   {
   if(input(buton))
      {
      sayi++;
      for(k=0;k<sayi;k++)
      {
      output_high(DS);
      output_low(SH_CP);
      output_high(SH_CP);
      output_low(ST_CP);
      output_high(ST_CP);
      delay_ms(100);
      }
      for(i=0;i<40-sayi;i++)
      {
      output_low(DS);
      output_low(SH_CP);
      output_high(SH_CP);
      output_low(ST_CP);
      output_high(ST_CP);
      delay_ms(100);
      }
      }
   
   
   
   }
}


Bu şekilde soldan sağa kaydırıyorum..
B0 daki butona 1 kere basınca 1 led sola kayıyor ama geri getiremiyorum ( karaşimşek mantığı)

Klein

char effect =0;

void WriteByte(char Val){
char i;
		for(i=0;i<8;i++){
			if(Val & 0x80) SDA=1; else SDA=0;
			SCL=1;
			SCL=0;
			Val <<=1;
		  }
	LD=1;
	LD=0;
}

void sola_kaydir(void)
{
      Effect = (Effect << 1) | 0x01;
      WriteByte(Effect);
}

void saga_kaydir(void)
{
      Effect = (Effect >> 1) | 0x80;
      WriteByte(Effect);
}


Kod temsilidir. ufak tefek hatalar olabilir.

xoom

#13
Bakıyorum Bakıyorum ama Kodları anlayamadım malesef..
ben bahsettiğiniz gibi bit bit veri giriyordum DS bacağından siz sanırım Byte Byte veri giriyorsunuz ama sola doğru kaydırdıgım atıyorum 40 bit bilgiyi (5 Byte) nasıl tekrar tersine ( sağdan sola doğru )işleyeceğimi anlayamadım.

Klein

Bit bit kaydırarak olmaz istediğin şey. 
Led dizin 5 Bayt uzunluğında ise 5 baytı işlemcinin içinde kaydırdıktan sonra çıkışayazman gerek.
Onun için de örnek yazarım ama kafan iyice karışabilir.
Önce verdiğim 8 bitlik örneği  kendi derleyicine uydur. Daha sonra 40 bit için yine yardım ederim.