Ornek 74HC595 le yapilmis uygulamalar ariyorum.

Başlatan vedo35, 14 Ağustos 2014, 11:51:02

vedo35

Merhaba arkadaslar seriden paralele donusturme islemleri ile ilgili led animasyonlarina kafayi taktim. Google`da bulduklarim aurdinyo, c yada assembly ile yapilmis calismalar. Yada soru cevap seklinde tam olarak ccs ile yapilmis elinizde  ornek led animasyon calismalari varmi? Simdiden cevaplariniz icin tesekkurler.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

izzethoca

595 ile 2 adet displaye veri yollama
#include <595_2.h>
#INCLUDE <MATH.H>
#DEFINE DAT_P PIN_B1
#DEFINE CLC_P PIN_B0
#DEFINE LCH_P PIN_B2
#USE FAST_IO(A)
#USE FAST_IO(B)
UNSIGNED INT SAY=1;
UNSIGNED INT SAY1=1;
INT8 X=0;
INT TEMP=0;
INT Y=0;
//595 veri yazma
   VOID W_595(TEMP){
          OUTPUT_LOW(CLC_P);OUTPUT_LOW(LCH_P);
          FOR (X=0;X<8;X=X+1){
             OUTPUT_BIT(DAT_P,BIT_TEST(TEMP,(7-X))); 
             OUTPUT_HIGH(CLC_P);
             OUTPUT_LOW(CLC_P);
                             }
                  }
                  //veririyi gönderme ve en son kiklidi açma
   VOID GONDER(){
        TEMP=SAY;  W_595(TEMP);TEMP=0;
        TEMP=SAY1;  W_595(TEMP);TEMP=0;
        OUTPUT_HIGH(LCH_P);OUTPUT_LOW(LCH_P);
   
   }  
void main()
{

   SET_TRIS_A(0);OUTPUT_A(0);
   SET_TRIS_B(0);OUTPUT_B(0);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);

WHILE(1){
SAY=POW(2,Y);DELAY_MS(200);++Y;
IF(Y>7) Y=0;
GONDER();
  
  }

}

baran123

sıcaklıgı ve saati displaylerde gösterir

#include <16F628A.h>
#device adc=16         
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOPROTECT
#use delay(clock=4M)                                              

#include "ds18b20.c"
#include "ds1302.c"
                  
#define DS     pin_A0                 
#define SH_CP  pin_A1                              
#define ST_CP  pin_A2  

BYTE sec,min,hr;
signed int temp1;
const signed int digit[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F};
                                 
void send(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);   
   }                                
}              

void temp(void)
{
   rtc_get_time(hr,min,sec);
   
   temp1 = ds1820_read();
   if(temp1 == 85) temp1 = 0;

   if((temp1 >= -9) && (temp1 <= 99))
   {
      if((temp1 >= 10) && (temp1 <= 99))
      {
         send(0x39);                  
         send(0x63);
         send(digit[(int)temp1 % 10]);     
         send(digit[(int)temp1 / 10]);
         output_high(ST_CP);        
         output_low(ST_CP);
      }
                                       
      else if((temp1 >= 0) && (temp1 < 10))                    
      {                           
         send(0x39);                  
         send(0x63);
         send(digit[(int)temp1 % 10]);
         send(0x00);
         output_high(ST_CP);     
         output_low(ST_CP);              

      }                    
                                      
      else if((temp1 >= -9) && (temp1 < 0))        
      {                                                        
         send(0x39);                  
         send(0x63);
         send(digit[temp1 % 10]); 
         send(0x40);            
         output_high(ST_CP);     
         output_low(ST_CP);
      }                           
                   
      else                 
      {                        
         send(0x40);
         send(0x40);
         send(0x40);
         send(0x40);   
         output_low(pin_b4);  
         output_high(ST_CP);     
         output_low(ST_CP);
      } 
   }
   
   else                 
   {                        
      send(0x40);
      send(0x40);
      send(0x40);
      send(0x40);   
      output_low(pin_b4);  
      output_high(ST_CP);     
      output_low(ST_CP);
   }
}

void time(void)
{
   rtc_get_time(hr,min,sec);
   output_high(pin_a3);
   delay_ms(500);
   send(digit[(int)min % 10]);     
   send(digit[(int)min / 10]);
   send(digit[(int)hr % 10]);     
   send(digit[(int)hr / 10]);
   output_high(ST_CP);        
   output_low(ST_CP);
   output_low(pin_a3);
   delay_ms(500);
}

void main(void)
{
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);   
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_ccp1(CCP_OFF);     
   setup_vref(FALSE);
   
   set_tris_a(0x00);
   output_a(0x00);
   
   rtc_init(); 
 
   for(;;)             
   {
      rtc_get_time(hr,min,sec);
      
      if((sec >= 0) && (sec <= 50)) {time();}
      else {temp();}
   }
}                     

vedo35

Degerli cevaplariniz icin cok tesekkur ederim. Bunlar bayagi isime yarayacak. Allah razi olsun. Varsa gonderen olursa simdiden tesekkurlerimi borc bilirim.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

pwm.c

#4
CCS'in Drivers klasörü içinde 74hc595 kütübhanesi mevcut.
bu tanımlamaları ekleyerek kullanabilirsin.
#define EXP_OUT_ENABLE  PIN_B0 //enable pini
#define EXP_OUT_CLOCK   PIN_B1 //clock pini
#define EXP_OUT_DO      PIN_B2 //data pini
#define NUMBER_OF_74595 4 //displey adeti
#include <74595.c>


data göndermek için write_expanded_outputs(sayi); fonksiyonunu yazman yeterli.

örnek olarak, ADC sonucu displeyde gösterme uygulaması:

#include <16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)   // Gecikme fonksiyonu için kullanılan osilatör frekansı belirtiliyor
#use fast_io(b) // Port yönlendirme komutları b portu için geçerli
#define EXP_OUT_ENABLE  PIN_B0
#define EXP_OUT_CLOCK   PIN_B1
#define EXP_OUT_DO      PIN_B2
#define NUMBER_OF_74595 4
#include <74595.c>


// Ortak katot display için veri değerleri
int digit[14]={63,6,91,79,102,109,125,7,127,111,99,88,64,80};
//            [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 ,o ,c ,- ,r ]


/********* ANA PROGRAM FONKSİYONU********/

void main ()
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(ALL_ANALOG);
   
   set_tris_b(0x00); // B portu tümüyle çıkış olarak yönlendiriliyor
   output_b(0x00); // İlk anda B portu çıkışı sıfırlanıyor
   int mask[4];//maske
   int data[4];//gonderilecek dizi//
   int16 OKUNAN;
   
while(TRUE)
                              {
      set_adc_channel(0);
      delay_ms(10);
      OKUNAN = read_adc();
             
      mask[0]=(OKUNAN/1000)%10; //BİNLER
      mask[1]=(OKUNAN/100)%10;  //YÜZLER
      mask[2]=(OKUNAN/10)%10;   //ONLAR
      mask[3]= OKUNAN %10;     //BİRLER
                       
      data[0] = digit[mask[0]];
      data[1] = digit[mask[1]];
      data[2] = digit[mask[2]];
      data[3] = digit[mask[3]];
      
      write_expanded_outputs(data);
      delay_ms(500);
                           }
                                 }
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

vedo35

Tesekkur ederim pwm arkadasim. Allah razi olsun.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

soneratmaca

Beyler elinizde bunlarin ledlerle ilgili orneklerinin cizimleri varmi proteusta.ledlerin yaninda kullanilan direnclerin veya kondansatorlerin kullanilma mantigini Bilmiyorum.benimde amacim led.pic.tus takimi 74hc4094 kullanarak bi turkiye haritasi yapmak ama acikcasi nasil yapacagimi bilmiyorum Su an yardimci olursaniz sevinirim.simdiden tesekkurler.

vedo35

Arkadaslar bu verdiginiz orneklere benzer baska bir ornek elime gecti. Elimde daha onceden hazirlamis oldugum seriden paralele led surucu vardi. 74hc595 gibi ama 16 bit lik cikisi var. Onu kullandim sorunsuz ledleri yakip sonduruyor. Led surucum STP16CP05. Bu entegreye benzer ayni mantikla calisan baska led suruculerde mevcut. Tekrar verdiginiz kodlar icin tekrar tesekkur ederim.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

veliusta


vedo35

Veli usta cok tesekkurler. Verdiginiz linkte cok guzel anlatilmis.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

vedo35

Birsey daha sormak istiyorum. Asagidaki linkte kaynak koduda verilmis cok guzel led animasyonu buldum. Ancak kaynak kodu ne tur bir C oldugunu cikaramadim. Ben CCS kullaniyorum aksilik buya  bunu yapan vatandas farkli tarz C kullanmis. Bunu CCS ye cevirmek mumkunmudur sadece #include 16f628A.h ve fuses larida eklersem bu uygulamayi calistirabilirmiyim?  Tekrar cevaplariniz icin tesekkurler.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

vedo35

Pardon linki vermeyi unutmusum tuhhh  :-[  Pic c mi acep?  ;)

http://elektrokod.wordpress.com/2013/12/21/74hc595-entegresi-ile-32-led-animasyon/

kod soyle basliyor:

#define M0 PORTB.B4
#define M1 PORTB.B5
#define M2 PORTB.B6
#define M3 PORTB.B7
#define SH_CP PORTA.B0
#define DS PORTA.B1
#define ST_CP PORTA.B2

bit YON;
char mod=0, sayi=0;
//---------------------------
void bekle_us(int sure)
{
int t=0;
for(t=0;t<sure;t++)
{
asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
asm{NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;}
}

}
//----------------------------------
void veriYaz595(char veri)
{
char i=0;
ST_CP=0;
SH_CP=0;
DS=0;
for(i=0;i<8;i++)
{
if(veri.B7) DS=1;
else DS=0;
SH_CP=1;
asm{NOP;NOP;NOP;NOP;NOP;}
SH_CP=0;
veri<<=1;
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

dmc1

http://www.elektroarge.com/kayan-yazi-nasil-yapilir/

Burandan 74HC595 entegresini çok aktif olarak kullandığımız kayan yazı hakkında geniş bilgi bulabilirsin.
Toplam 13 ders var video,simulasyon,code vs. herşey mevcut.

vedo35

Sagol dmc de yukaridaki soruma hala cevap ariyorum. Sence hangi tur dilde yazilmis.?
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

baran123