8 li kara simsek animasyonunu 74hc595 e nasil gonderirim?

Başlatan vedo35, 07 Temmuz 2015, 14:31:12

vedo35

Arkadaslar su meshur karasimsek animasyonunu seri iletisimle hc595 e gondermek istiyorum. Elimde 74hc595 le yapilmis animasyon var birde normal karasimsek animasyonu normal olan kodu seri olarak gondermek istiyorum iki kodu nasil birlestirecegimi bilemedim.
74hc595 seri tanimlamasi :

#include <16F877.h>

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000)

#define SH_CP PIN_B0
#define DS PIN_B1
#define ST_CP PIN_B2
#define MR PIN_B3
#define OE PIN_B4

karasimsek koduda bu:

#define YON durum.B0 // YON için bir bayrak tanımlandı
//-----------------------------
char durum=0; // char cinsinden durum değişkeni tanımlandı
//-----------------------------
void main()
{
   TRISB=0; // PORTB çıkış yapıldı
   PORTB=1; // PORTB'nin ilk pini "1" yapıldı diğerleri "0"
   Delay_ms(200); // 200ms bekle
   do
   {
     if(PORTB==1) YON=0; // eğer ilk led yanıyorsa YON "0" yani sola doğru,
     if(PORTB==128) YON=1; // eğer son led yanıyorsa YON "1" yani sağa doğru
     if(!YON) PORTB<<=1; // eğer yön sol ise PORTB'yi sola 1 kaydır
         else PORTB>>=1; // değilse yani sağ ise sağa 1 kaydır
     Delay_ms(200); // 200ms bekle
   }while(1);
}
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

baran123

#1
Bir dene bakalım.
#include <16F628A.h>      
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOPROTECT
#use DELAY(CLOCK=4M, CRYSTAL=4MHz) 

#define DS     pin_A0                 
#define SH_CP  pin_A1                              
#define ST_CP  pin_A2 

void HC595_SendData(unsigned char data);

void main(void)
{
   setup_psp(PSP_DISABLED);    
   setup_spi(SPI_SS_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);
   
   char led = 1;          
   set_tris_b(0x00);
   output_b(0x00);
                
   while(TRUE) 
   {
      HC595_SendData(led);
      led = led << 1; 
      delay_ms(100);
                              
      if(led==0x80) 
      {
         while(TRUE)  
         {           
            HC595_SendData(led);
            led = led >> 1; 
            delay_ms(100); 
            if(led==0x01) break;
         }
      }
   }
}

void HC595_SendData(unsigned char data)
{                                  
   unsigned  char i;       
              
   for(i = 0x80; i > 0; i >>= 1)
   {                                
      if(i & data) output_high(DS);
      else output_low(DS);     
      output_high(SH_CP);           
      output_low(SH_CP);   
   }
   output_high(ST_CP);     
   output_low(ST_CP);                                
} 


mesaj birleştirme:: 07 Temmuz 2015, 15:09:38

Ek : 74HC595 Seri iletişim değil SPI mantığı ile çalışır.

MR pini VDD( + )
OE pini GND ye bağlanır.

polleme

I2C ile çalışan PCF8574 gibi bir çip kullanmayı da tercih edebilirsiniz. 8 bit tek bir rakam ile çıkışlara gönderilebilir.

vedo35

Polleme elimde o dediginiz entegrenin hazir modulu var, ama nerede oldugunu bilemiyorum. Bu kodlari pic gelistirme kartindan uygulayabiliyorum. Ayrica hazir kendi yaptigim 16 bitlik led surucu gelistirme karti var. Mantik olarak 595 in calisma sekli ile calisiyor ama 16 bitlik.

Ekrem kardesim derlerken su hatalari verdi:

*** Error 12 "kara simsek hc595 li.c" Line 13(13,14): Undefined identifier  -- setup_psp
*** Error 12 "kara simsek hc595 li.c" Line 14(13,14): Undefined identifier  -- setup_spi
*** Error 12 "kara simsek hc595 li.c" Line 17(19,20): Undefined identifier  -- setup_adc_ports
*** Error 12 "kara simsek hc595 li.c" Line 18(13,14): Undefined identifier  -- setup_adc
*** Error 12 "kara simsek hc595 li.c" Line 20(15,16): Undefined identifier  -- setup_CCP2
*** Error 51 "kara simsek hc595 li.c" Line 22(4,8): A numeric expression must appear here
*** Error 12 "kara simsek hc595 li.c" Line 28(22,25): Undefined identifier   led
*** Error 12 "kara simsek hc595 li.c" Line 29(11,14): Undefined identifier   led
*** Error 12 "kara simsek hc595 li.c" Line 32(10,13): Undefined identifier   led
*** Error 12 "kara simsek hc595 li.c" Line 36(28,31): Undefined identifier   led
*** Error 12 "kara simsek hc595 li.c" Line 37(17,20): Undefined identifier   led
*** Error 12 "kara simsek hc595 li.c" Line 39(16,19): Undefined identifier   led
      12 Errors,  0 Warnings.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

baran123

Kendi MCU'an göre ayarla olmayan özelliklerin satırlarını sil.

vedo35

Benim kartta  su an 16f877 var ama elimde 16f628 de mevcut. Onlada deneyebilirim sorun yok. Ilgili hangi satirlari?
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

baran123

ADC yi falan sildim derleniyor şimdi 628A da ADC yok.

#include <16F628A.h>      
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOPROTECT
#use DELAY(CLOCK=4M, CRYSTAL=4MHz) 

#define DS     pin_A0                 
#define SH_CP  pin_A1                              
#define ST_CP  pin_A2 

void HC595_SendData(unsigned char data);

void main(void)
{
   setup_timer_1(T1_DISABLED); 
   setup_timer_2(T2_DISABLED,0,1);         
   setup_CCP1(CCP_OFF);        
   
   char led = 1;          
   set_tris_b(0x00);
   output_b(0x00);
                
   while(TRUE) 
   {
      HC595_SendData(led);
      led = led << 1; 
      delay_ms(100);
                              
      if(led==0x80) 
      {
         while(TRUE)  
         {           
            HC595_SendData(led);
            led = led >> 1; 
            delay_ms(100); 
            if(led==0x01) break;
         }
      }
   }
}

void HC595_SendData(unsigned char data)
{                                  
   unsigned  char i;       
              
   for(i = 0x80; i > 0; i >>= 1)
   {                                
      if(i & data) output_high(DS);
      else output_low(DS);     
      output_high(SH_CP);           
      output_low(SH_CP);   
   }
   output_high(ST_CP);     
   output_low(ST_CP);                                
} 

baran123

16 bitlik halini istemiştiniz.
#include <16F877.h>      
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOPROTECT
#use DELAY(CLOCK=4M, CRYSTAL=4MHz) 

#define DS     pin_A0                 
#define SH_CP  pin_A1                              
#define ST_CP  pin_A2 

void HC595_SendData(unsigned char data);

void main(void)
{
   setup_timer_1(T1_DISABLED); 
   setup_timer_2(T2_DISABLED,0,1);         
   setup_CCP1(CCP_OFF);        
   
   int16 led = 1;          
   set_tris_b(0x00);
   output_b(0x00);
                
   while(TRUE) 
   {
      HC595_SendData(led);
      led = led << 1; 
      delay_ms(100);
                              
      if(led==0x8000) 
      {
         while(TRUE)  
         {           
            HC595_SendData(led);
            led = led >> 1; 
            delay_ms(100); 
            if(led==0x0001) break;
         }
      }
   }
}

void HC595_SendData(unsigned char data)
{                                  
   unsigned int16 i;       
              
   for(i = 0x8000; i > 0; i >>= 1)
   {                                
      if(i & data) output_high(DS);
      else output_low(DS);     
      output_high(SH_CP);           
      output_low(SH_CP);   
   }
   output_high(ST_CP);     
   output_low(ST_CP);                                
}

vedo35

Ekrem hocam Allah razi olsun harika calisiyor. Elinize, emeginize saglik.

Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.