pcbway

ccs c ile 16f628a ile yapilmiş sheft registerli matrix led sorunu

Başlatan crnelektronik, 10 Şubat 2012, 12:36:05

crnelektronik

arkdaşlar programlama, ccs c de yeniyim matrix led ile karekter yazdirmayi 877 ile yaptim fakat 628 ve shef register ile nasil yapacağimi bilmiyorum bu konuda ccs c üstadlari bilginiz varsa yardimci olabilirmisiniz ?

yazici67

Tüm kodun düzenlemesini sen yaparsın sadece shift register\'ı sürecek fonksiyonu yazsan yeterli olur.
Mesela 74HC595 için;
#define DATA_BIT    PIN_B0
#define CLOCK        PIN_B1
#define ENABLE       PIN_B2

void SR_Write_Byte(unsigned char a)
{
unsigned i;
ENABLE = 0; // Kaydırıcı aktif.
CLOCK = 0;  // Clock pini temizlendi.
for(i = 7; i > 0; --i)
{
DATA_BIT = (a >> i) && 0x01; // a\'nın sıradaki bitini pine yaz.
CLOCK = 1;
delay_cycle(1);   // Bir clock palsı gönder.
CLOCK  = 0;
}
ENABLE = 1;    // Kaydırıcı pasif.
}
Bu arada bağlantılar şöyle :




Bu şekilde mantık basit elindeki shift register a göre metodu tekrar yazarsın.
Kodlarda yapılacak değişiklik basit. PORTlara yazılacak sutun_sec ve matris_karakter_gonder metodlarını iki shift registera bölersin.

crnelektronik

verdigin komut listesini inceledim ve derleyip yapmaya çaliştim ama programlama da acemi olunca galiba tam kavrayamadim karekter bilgisini sheft registere nasil gönderecem 8 bit olarak mi gönderecem ?

yazici67

Benim verdiğim kodu direkt olarak kullanmayacağını söyledim zaten ben onu örnek olsun diye yazmıştım.O kodu sen kendi devrene göre düzenle. Mantık olarakta önce ENABLE bitini 1 yapıyorsun, DATA bitine sırayla 8 bit yolluyorsun her bit kaydırdığında bir clock palsı gönderiyorsun.Sonrada ENABLE yi 0 yapıyorsun.

crnelektronik

verdigin bilgiler için teşekkür ederim yazici67 seni çok ugraştirmayacak ise bana sadece tek bir karekter gönderecek şekilde komut listesi yazabilrmisin sheft register ile, uğraşiyorum cok az birşey kaldi mantigini bir kavrasam geri kalani corap sökügü gibi gelecek inş :)

pwm.c

ccs derleyicisi içinde 74hc595 sürücüsü mevcuttur. kullanımı basit.
öncelikle gerekli tanımlamaları üst tarafta yapacaksın. burada 74hc595 in pin bağlantılarını gösteriyorsun ve kaç adet sürdüğünü belirtiyorsun.
#IFNDEF EXP_OUT_ENABLE
#define EXP_OUT_ENABLE  PIN_B0 // 74hc595 in 12. pini
#define EXP_OUT_CLOCK   PIN_B1 // 74hc595 in 11. pini
#define EXP_OUT_DO      PIN_B2 // 74hc595 in 14. pini
#define NUMBER_OF_74595 4 // 74hc595 adeti. (örnekteki 4)
#ENDIF
#include <74595.c>

bunları yaptıktan sonra göndermek istediğin sayıyı yada değişkeni sadece şu komutla yazdırabilirsin.
write_expanded_outputs(SAYI);
hepsi bu.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

crnelektronik

pwm.c verdigin bilgiler için teşekkür ederim ama programlamada yeni oldugum için 74hc595in include dosyasina nerden ulaşacam bilmiyorum benim ugraşitim dosyada ki gibi bir şey ama ben bunu 16f628a ile sheft register kullanarak yapmak istiyorum sheft registera bilgiyi gönderme mantigini kavraya çalişiyorum matris led de karekter gösterecek ve bunu  girişteki degerlere göre degiştirecem, matris lede karekteri sheft registerle gönderebilsem gerisine ugraşarak yapacam inş bu konuda yardimci olubilirsen sevinirim

pwm.c

sürücünün dosya konumu burası:
C:\\Program Files\\PICC\\Drivers\\74595.c
yoksa buraya yükledim.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

crnelektronik

saol pwm.c dosyayi buldum, gönderdiginin aynisi, mesala ben matrix led e  \"int A[]={0x03,0x75,0x76,0x75,0X03};\" A karekterini yazdirmak için bu datayi gönderecem write_expanded_outputs nasil bir kullanmam gerekiyor?

pwm.c

sana test amaçlı bir örnek hazırladım. bunu iyi incele.
https://yadi.sk/d/DXEerlId3M6NT9
devrenin yaptığı iş, adc değerini okuyup desimal olarak 74hc595 ile 4 displayde gösteriyor.
hem 74hc595 sürümü hemde karakter dönüşümü örneği bir arada bulunuyor.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

yazici67

@pwm.c yadığın örnek güzel olmuş ben algoritma yandaşı bir programcıyım tarzım bu.Tabi ki kolaylık varken kullanmamak \"akılsızlık\" olur.
@crnelektronik umarım mantığı çözmüşsündür kolay gelsin...

crnelektronik

pwm.c verdiğin örneği inceledim ve mantiğini anladim okunan adc yi mask ile 1000 ler 100 ler 10 lar ile modüler bölüm yapip basamak degerlerini ayarlamiş sonra data degişkeni ile digit deki karekter degerlerini write_expanded_outputs(data) komutu ile data degişkenindeki degerileri sheft registere aktarmişssin yanliş anlmadiysam tabi, ama matris de mecburen tarama ile yapmak zorundayim fakat daha önce hiç yapmadim satir bilgisini sutun bilgisini 74595 ile nasil süreceğimi bilmiyorum takildigim nokta burasi, verdiginiz bilgiler ve emeginize saglik

pwm.c

sizin yazdığınız kodda şöyle bir komut var:
output_b(harf[j]);     // Gösterilecek harfin satır bilgisini B portuna gönderburada b portuna satır bilgisi gönderilmiş. aynı işi 74hc595 ile yapmak istiyorsanız 74hc595 için gerekli pin tanımlamalarını ve 8bitlik \"data\" isimli değişkeni atadıktan sonra yukarıdaki kodu şu şekilde değiştiriniz:

data=harf[j];
write_expanded_outputs(data);

bunu bir deneyiniz olması lazım. boş bir vaktimde bende denerim, olmassa başka yöntemlerde ararım.
yada isterseniz şu devreyi inceleyebilirsiniz:
https://320volt.com/pic16f88-128x8-pc-kontrol-kayan-yazi-ccs-c-ile/
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

crnelektronik

pwm.c söyledigin gibi denedim olmadi galiba degişken tanimlamalarinda bir hata yapiyorum ccs c nin programlama mantigini ögrenebilecegim bir yöntem var mi, özellikle operatörleri kullanma mantigi nasil oluyor [] ,{},() ,int char, float, bu oparetörleri neye göre kullanacaz serdar çicegin kitabini aldim ama fazla birşey anlamadim:(

pwm.c

bize gönderdiğin uygulamaya 74hc595 ekledim. daha fazlası için kendin ekleme yaparsın.
tüm dosyalar burada:
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

crnelektronik

emegine saglik bundan sonrasini çözerim inş

write_expanded_outputs(data);
            delay_ms(10);    // Gecikme veriliyor
            data[0]=255;
           write_expanded_outputs(data);

burada data \'yi niye 255 e eşitledigini söyleyebilrmisin !

crnelektronik

pwm.c hocam gönderdigin komut listesini 628 e uyarladim fakat RA5/MCLR ucunu ve RA4 ucunu kullanamiyorum
konfigrasyon ayarlarinda \"#Fuse NOMCLR\" ile master cleare kapattim ama proteus da çalişmiyor 

pwm.c

Alıntı yapılan: crnelektronik - 25 Şubat 2012, 09:00:23pwm.c hocam gönderdigin komut listesini 628 e uyarladim fakat RA5/MCLR ucunu ve RA4 ucunu kullanamiyorum
konfigrasyon ayarlarinda \"#Fuse NOMCLR\" ile master cleare kapattim ama proteus da çalişmiyor
o bahsettiğin pin sadece lojik giriş olabilir. çıkış vermez.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

crnelektronik

evet datasheed i inceledim sorunu çözmek için ordan ögrendim,
data degişkenini neden 255 e eşitledigini anlatabilirmisin ?

pwm.c

burada ledleri yaktıktan sonra 10ms bekleyip tekrar söndürüyoruz. yoksa önceki girdiğin karakterler bir sonrakinin üzerinde çıkıyor.
çıkışa 255 yükleyince ledlerin tamamı sönüyor.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

crnelektronik

saol hocam verdigin bilgiler sayesinde birşeyler ögreniyorum emegine saglik
sütünlari da 74595 ile sürmeyi deneyecem