Herkese iyi akşamlar,
pic den 74164 ile dataları göndererek ve ULN2003 ile de displayleri sürerek 4 tane 7segmente sayıları tarayarak yazdırıyorum.Sayılar normal şekilde yanıyor ancak örneğin 1 sayısı yazaken b ve c segmentlerinin haricinde kalan segmentler sönük olması gerekirken onlarda da neredeyse %50 oranında parlaklık görünüyor.
önce bc546 kullanmıştım sürmek için anahtarlama hızı yavaş kalıyordur diye düşündüm ULN2003 le sürdüm çok az bir düzelme oldu.Sonra segmentlere giden direnç değerlerini büyüttüm biraz daha düzeldi ama hala bariz şekilde yanıyor gibi diğer yanmaması gereken segmentler.
Yazılımda tarama yaptırırken diğer segmente geçmeden önce komple kapatıp diğerini yaktırıyorum değişen bişey olmuyor.
Bu sorunun çözümü nedir?direnç değerlerini daha çok büyütsem parlaklık azalacak.Ne yapmalı?
Şimdiden teşekkürler.
Alıntı YapYazılımda tarama yaptırırken diğer segmente geçmeden önce komple kapatıp diğerini yaktırıyorum değişen bişey olmuyor.
Transistörlerin yavaşlığından kaynaklanıyordur.
Aşağudaki yöntemi dene.
Yeni segmentleri yak.
Bekle1
Segmentleri söndür.
Bekle2
Şeklinde yaparsan sorun çıkmaması lazım. Ancak parlaklıkta düşüş yaşayacaksın bunu da akımı artırmak yoluyla aşarsın.
Bekleme değerlerini dene yanıl da bulabilirsin.
Şu ana kadar belki 10 tane taramalı led display tasarımı yaptım.
Hiçbirisinde yanık kalıyor gibi bi sıkıntı olmadı...
Açıkçası devrenizi merak ediyorum.
Ve tarama frekansınız nedir ?
devreni gorebilirmiyim?
Bende de aynı durum oldu.Programa göre ikisi aynı anda açık olmamasına rağmen sönük olması gereken kısımlarda hafif yanıklık var.20KHz civarı bir frekansta açılıp kapanıyor 7segmentler.Sanırım 7segment için çok yüksek bir hız bu.
Benim kod da şöyle bir şey.
;Tablo
_7SEG ;ortak anot icin tablo
addwf PCL
retlw h'C0' ;0
retlw h'F9' ;1
retlw h'A4'
retlw h'B0'
retlw h'99'
retlw h'92'
retlw h'83'
retlw h'F8'
retlw h'80'
retlw h'90' ;9
;Tablo
ONYAK
bcf PORTA,3
bsf PORTA,2
movfw ONLAR ; ONLAR'i aküye al
call _7SEG
movwf PORTB ; 7 segmentleri yak
return
BIRYAK
bcf PORTA,2
bsf PORTA,3
movfw BIRLER
call _7SEG
movwf PORTB
return
KESME ;7 Segmentleri sür
btfsc IE,0
call ONYAK
btfss IE,0
call BIRYAK
movlw d'1' ;IE'i tersle , sonraki interruptta basamak degistir
xorwf IE,1
bcf INTCON,2
retfIe
END
bunalmıs hocam söylediğiniz yöntemi denedim,hatta sönük kalma kısmını yanık kalma kısmından 5 kat daha uzun yaptım ama gene olmadı malesef.
Devre bağlantı şeklim aynen bu şekilde.MSP430 ile sürüyorum.Ancak bundan önce de picle deneme amaçlı yaptığım bir çalışmada da aynı şekilde sorun yaşamıştım.
ISIS simulasyonunu yapmadım,sadece bağlantıları göstermek için çizdim bunu.
[IMG]http://img15.imageshack.us/img15/1922/adszmnt.jpg[/img] (http://imageshack.us/photo/my-images/15/adszmnt.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
Devremin fotoğrafı da bu:
[IMG]http://img36.imageshack.us/img36/2386/301120111567.jpg[/img] (http://imageshack.us/photo/my-images/36/301120111567.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
mcn;
74164'e veri gönderirken kesinlikle ULN2003 kapalı olmalı.
pea;
20 kHz çok yüksek bir tarama frekans bence,
ben genellikle 100-200 Hz arası tercih ediyorum...
bence tarama frekansin cok yuksek oldugu icin hepsini yanik olarak goruyo olabilirsin...
Olabilir.
Assembly'de ilk ve büyük olasılıkla son kodumdu.Prescaler'la uğraşmak istememiştim ;D
@Allegro hocam,dediğiniz gibi yaptım.şu anda o bahsettiğim yanık kalmadan eser kalmadı.Tertemiz.
Ama bu seferde sayılar bozuldu :) yani,en iyi fotoğraf anlatır olayı:
[IMG]http://img840.imageshack.us/img840/2135/301120111568.jpg[/img] (http://imageshack.us/photo/my-images/840/301120111568.jpg/)
Uploaded with ImageShack.us (http://imageshack.us)
tarama algoritmam şu şekilde:
// 0 dan 9999 a kadar sayıyor devre.
while(true){
sayiyi 1 arttır
birleri hesapla
onları hesapla
yüzleri hesapla
binleri hesapla
//burada "i" 74164e gönderilecek sayının dizi içerisindeki hex değerine ulaştırıyor
i=birler basamağı
74164 e verileri gönder
birler basamağı segmentini aktif et
bekle
tüm segmentleri söndür
i=onlar basamağı
74164 e verileri gönder
onlar basamağı segmentini aktif et
bekle
tüm segmentleri söndür
i=yuzler basamağı
74164 e verileri gönder
yuzler basamağı segmentini aktif et
bekle
tüm segmentleri söndür
i=binler basamağı
74164 e verileri gönder
binler basamağı segmentini aktif et
bekle
tüm segmentleri söndür
}
neden ki?
valla anlamadım hocam bende,eski haline alıyorum sayılar normal gözüküyor,tabi yanık kalmalarda devam.
o while dongusununun icinde yaptiklarinizi 10 kezde tekrar edin ama sayiyi arttirmadan..10 kez tekrar ettikten sonra sayiyi arttirin..
ayrica display ler ortak anotmu ortak katotmu?
bekle kısmı 1 ms olsun
74164 e giren seri dveri, çipin paralel çıkış pinlerine nasıl aktarılıyor.
programda 74164 e verileri gönder kısmından sonra, 74164 çipini aktif ve pasif etmek gerekmiyor mu?
programa göre, çipe ne basarsanız anında paralel port pinlerine basılıyor gibi bir durum var.
bu normalmidir?
displayler ortak katot.
Allegro, justice_for_all hocam,dediklerinizi yaptım değişen bişey olmadı malesef ???
peki suan entegrenin p1 portunu kullaniyomusun? ayrica hic sabit bi sayi yada rakam gonderip denedin mi?sadece birler basamagina bi rakam gonder bakalim..
Balık tutma yöntemi: i) Aynı devrede 1 ler basamağındaki 7 segmente 0-9 sayıcı programı yaz
ii) Sonra en değersiz 2 segmentte 0-99 programı yaz
iii) Ardından bize 0-9999 sayıcının nasıl yapılacağını ve önceki hatanı sebepleriyle birlikte buraya yaz
(lütfen)
Kolay gelsin...
Bi tavsiyede benden tarama işini iptal et ilk segmentin ortağını eksiye çek,shiftregistere sayıları gönder. En azından displeye gönderdiğin rakamların doğruluğundan emin ol.
Şimdi,tüm segmentleri aktif yapıp hepsinde sırayla 1 den 9 a kadar sayıları saydırıyorum.Tarama yaptırmadan yani,burada problem yok.Sayılar düzgün.
Ama tarama yaptırmaya çalıştığımda örneğin tüm segmentlere 1 yazmaya çalıştığımda fotoğrafta da gösterdiğim gibi sayı bozuk çıkıyor.(her segmentte aynı şekilde)
@picmanya
dediğiniz doğru,74164 e veri gönderildikten hemen sonra uln yi aktif ediyorum.Belki sorun bundandır diye,74164 e veri gönder kısmını 2 defa yaptım,bekleme koydum 1ms ama gene değişen bişey olmadı.
@justice_for_all
p1 portunu kullanmıyorum şu an.
bide p1 portunu kullanarak displayleri kullanin derim bence bakalim o zamanda ayni hata olcakmi
Sonundaaaaa!!!! ;D
Clock ve data pinini p1 portuna alınca düzeldi ;)
Herkese çok çok teşekkürler,konu çözüldü. :)
Ayrıca Taramada 74164 yerine 74595 kullanmanı tavsiye ederim.
Alıntı yapılan: mcn - 30 Kasım 2011, 21:54:16
Sonundaaaaa!!!! ;D
Clock ve data pinini p1 portuna alınca düzeldi ;)
Herkese çok çok teşekkürler,konu çözüldü. :)
Burda duralim simdi. Port degistirerek sorunun duzelmis olmasi cozum degil. Port degistirmeden de sorunu bulup duzeltebilmen gerekli.
Evet bunalmıs hocam haklısınız.BEnde o yazıyı yazdığımdan beri onunla uğraşıp nedenine bakıyorum ancak bir ilerleme kaydedemedim.
Selamlar,
P2 Portunun hangi pini idi sıkıntı olan hocam ?
ayrıntıları veriyorum:
kullandığım işlemci MSP430G2553
http://www.ti.com/lit/ds/symlink/msp430g2513.pdf
1 MHZ de dahili osilatörle çalıştırıyorum
Sorunlu haldeki pin bağlantısı:
CLOCK P2.0
DATA P2.1
P2.2 ULN nin 1. bacağı
P2.3 ULN nin 2. bacağı
P2.4 ULN nin 3. bacağı
P2.5 ULN nin 4. bacağı
daha sonra data ve clock pinlerini şu şekilde değiştirince sorun çözüldü:
CLOCK P1.0
DATA P1.1
[IMG]http://img836.imageshack.us/img836/307/p2reg.png[/img] (http://imageshack.us/photo/my-images/836/p2reg.png/)
P2DIR ayarlamaları yukarıdaki tablodaki gibi yapıldıktan sonra bir sorun olmamalı ama yine de kesin konuşmam için kodu da ekleseniz iyi olur.
Debug yapıp pinin low-high gerilimlerini olçtünüz mü hiç ? Sonuç ne çıkıyor ?
Sanırım sorun kökten çözüldü;
Şimdi,
her 74164 e bilgiyi gönderdikten sonra
kodumdaki onlar basamağının tarama satırı şu şekildeydi:
i=onlar;
tara(); P2OUT = 0x13;
delay(x); P2OUT = 0x00;
burda tarama da son olarak clock pinini lojik0 yaparak tara() fonksiyonundan dönmekte.Ancak ben burada tekrar o clock ve data pinini lojik1 yaptığımdan dolayı taramadan önce
74164 e yüklü olan datayı bozuyordu ve sayıları yanlış gösteriyordu.
Şimdi şu şekilde yapınca:
i=onlar;
tara(); P2OUT = 0x10;
delay(x); P2OUT = 0x00;
Yani tara() fonksiyonundan çıkınca data ve clock pinini 0 da tutmaya devam edince 74164 e tekrar clock ve veri gönderilmemiş sorun çözülmüş oldu.
Port değiştirince düzelmesinin nedeni de buydu.Şimdi tam olarak sorunu çözdük diyebiliriz sanırım.