Seri girisli led surucu icin yardima ihtiyac var.

Başlatan vedo35, 06 Şubat 2013, 22:06:24

vedo35

#15
Hayir o uc bosta opsiyon olsun diye  ona ek olarak biruc biraktim. GND ye bagli değil.

mesaj birleştirme:: 21 Mart 2013, 01:37:32

Simdi  o ucu GNd ye bagladim ama gene ayni hicbir led yanmadi. Himmm  :'(
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

vedo35

Arkadaslar tekrar merhaba. Bikmistim tekrar baslayayim dedim. Bu arada  codlarla biraz kendim oynadim birseyler yapmaya calistim. ama hicbir led yanmiyor. Kodlarin son durumu asagida. Baska forum sayfalarindada sordum bazi yanlisliklar oldugunu soylediler. Mesela biri derki :

led_data(b01000100000000001);
Send16Bit(led_data );

bu komut ana fonksiyonun icinde olmali  diyor. Onun verdigi sekilde yapinca:


void Main()
    {
    output_high(SDI);
    delay_ms(100);
    output_high(CLK);
    delay_ms(100);
    output_low(CLK);
    while(true)
        {
        led_data = b01000100000000001;
        Send16Bit(led_data );
        if(kbhit())
            {
            data=getc();
            counting();
            }
        }
    }

su hata kodu geliyor  bir turlu anlamadim gitti.

*** Error 12 "stp16cp05-new.c" Line 57(20,38): Undefined identifier b01000100000000001
1 Errors, 0 Warnings.

Bende deneme karti var portlarin tanimli oldugu ledler kirpisiyor sonuyor gorebildigim kadari ile clock sinyali  uretilmiyor yada cok kisa bir sure uretildigi icin icraat yok gibi. OE cikisini kendim elle GND ye bagladim ama tik yok. 

Obur hollanda formunda'da soyle hatalar buldular diyorki:
sen 16f877 kullandigini soylemissin ama 887 yaziyor dediler. Yani gozden kacan hata. Duzelttim derledigimde  #FUSES NOMCLR hata verdi  bende o satiri sildim. Ama adam diyorki  877 de mclr yi devre disi birakamazsin. Tabiki o uc Pull-up demis.
oteki bulunan hatada
counting()   komutunda .

bu komut klok sinyalini calistirmiyor onun icinde sdi  gelen datalari  almiyor demis. Birde ne olay oluyor onu gormen icin osilaskop yada lojik analiz cihazi lazim diyor. Yani sasirdim bir el atsaniz su isi halletsek . Olunca hepinizle paylasacagim forumlarda ve google da epey bu isle ugrasan ve sorunlari olanlar gordum ama CCS ile ilgili bir calismaya denk gelmedim. Kodun son hali su:


#include <16F877.h>           
#FUSES NOWDT           

#FUSES NOCPD
#FUSES NOBROWNOUT
#FUSES XT

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
/////////////////////////////////////////////////////////////////////////////////

#define SDO     PIN_C0   
#define CLK     PIN_C1
#define LE      PIN_C2
int i, data;

void counting()
{
output_low(SDO);
for (i=0; i<data; ++i){
output_low(CLK);
delay_ms(100);
output_high(CLK);
delay_ms(100);
}
printf("%2x", data);
}   


void Send16Bit(unsigned int16 data16bit )
{
   unsigned int16 i;
   for(i=0x8000;i>0;i>>=1)
   {
      if(i&data16bit)output_high(SDO);
      else  output_low(SDO); 
      output_high(CLK);
       delay_us(1);
      output_low(CLK);
   }
   output_high(LE);
   delay_us(5);

output_low(LE);

}

        unsigned int16 led_data;


        led_data(b01000100111100001);
        Send16Bit(led_data );


void Main() {
output_high(SDO);
delay_ms(100);
output_high(CLK);
delay_ms(100);
output_low(CLK);
while(true){
if(kbhit())
          {
             data=getc();
counting();
            }     

}
}

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

vedo35

#17
Arkadaslar nihayet baska bir forumda bir vatandasin yardimi ile halloldu yoksa  projeyi rafa kaldiriyordum. Vatandas derki  led bilgisi void main in icinde tanimlanmaliydi ve son hatayida buldu. Oda senin derleyicin  binary değilde hex  kodu  olarak taniyabilir dedi. son seklini verdi yaptim oldu. Ustelikte ledlerin yanma  sonme yerlerinide degistirebiliyorum. Simdi sira cesitli animasyonlar yada kara simsek gibi animasyonlar hazirlamaya geldi. Kodun son calisir hali asagida.  STP16CP05 in OE cikisi Gnd ye baglanacak yoksa calismiyor.  Umarim birilerinin isinede yarar bu kodlari farkli  seri girisli led suruculer icinde kullanabilirsiniz. CAT4016 yada benzeri. Resim ekleyemiyorum yada nerden eklenecek ben goremiyorum. Resminide koyacaktim. Kodda emegi gecen, gorus ve  duzenlemeleri yapan gerek bu forumdaki arkadaslara gerekse  diger forumdan arkadas Ian rogers a ozel tesekurlerimi gonderiyorum.

#include <16F877.h>
#FUSES NOWDT
#FUSES NOCPD
#FUSES NOBROWNOUT
#FUSES XT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
/////////////////////////////////////////////////////////////////////////////////
#define SDI PIN_C0
#define CLK PIN_C1
#define LE PIN_C2
int i, data;

void counting()
    {
    output_low(SDI);
    for (i=0; i<data; ++i)
        {
        output_low(CLK);
        delay_ms(100);
        output_high(CLK);
        delay_ms(100);
        }
    printf("%2x", data);
    }

void Send16Bit(unsigned int16 data16bit )
    {
    unsigned int16 i;
    for(i=0x8000;i>0;i>>=1)
        {
        if(i&data16bit)output_high(SDI);
        else output_low(SDI);
        output_high(CLK);
        delay_us(1);
        output_low(CLK);
        }
    output_high(LE);
    delay_us(5);
    output_low(LE);

    }
unsigned int16  led_data;


void Main()
    {
    output_high(SDI);
    delay_ms(100);
    output_high(CLK);
    delay_ms(100);
    output_low(CLK);
    while(true)
        {
        led_data = 0xCCC0;
        Send16Bit(led_data );
        if(kbhit())
            {
            data=getc();
            counting();
            }
        }
    }

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

salihonur

Alıntı yapılan: skara1214 - 07 Şubat 2013, 14:02:06
hocam düzenli birşey yollamıyorsun 8 bitlik data yolluyorsun 100 hz değil 5 hz görüyor olman lazım ama dediğim gibi oda düzenli değil bir harfe bastıkça düzenli sinyal görmek için getch ı kardır sürekli counting dönsün

Hatta ya seri haberleşmeyi interrupta ya da output işlemlerini timer'a taşırsan daha güzel olur. Rahatsız edici titreşimler oluşmaz.

vedo35

Hocam su son yazdiklarinizi yukaridaki kod uzerinde duzenleyerek birdaha buraya koysaniz? Aksam evde bir deneyeyim. Boylece daha duzgun bir kod elimizin altinda bulunmus olur. Dedigim gibi bu kodda biraz daha eklemeler yapabilirsem  tek yada farkli nolu ledleri flas yapabilirsem iyi olacak.  Ya bu led driver i led kup icin kullanandan tutunda led bord, kayan yazi falan fistik islerde kullaniyorlar iste.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

vedo35

Arkadaslar merhaba tekrar basinizi agritiyorum. Ben istedigim bir veya birkac ledi yakip sondurmek istiyorum. bunun icin biri bana komut verdi bunu yazarsan olmasi lazim dedi ama o kodu hangi satirin arasina girecegimi bilemedim. bazi yerlere girdim ama derlerken birsuru hata kodu veriyor tekrar bir el atarsaniz cok sevinirim.  Adam diyorki timer 0 i kullanacaksin 100ms ara birak bunun icin ledlerin lojik durumlarini gosteren gostergec yap falan diyor. simdiden tesekkurler. Verdigi komut su:

if(T0IF)
   {
   LED_STAGE++;
   T0IF = 0;
   }
if(LED_STAGE == 1) Ledbuffer &= MASK1;
if(LED_STAGE == 2) Ledbuffer &= MASK2;
if(LED_STAGE == 3) Ledbuffer &= MASK3;
if(LED_STAGE == 4) Ledbuffer &= MASK4;
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

vedo35

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