Program koşuyor ama ledler kırpışarak yanıyor

Başlatan f1varol, 07 Ağustos 2007, 10:50:39

f1varol

merhaba. Aşağıdaki programı pice yükledim. Program çalışıyor, sorun yok. Deneme kartında denedim. programın işlevi basit. Portc.0 pini 1 ise çıkış olan tüm port pinlerini 1 yap, değilse low. bunu yapıyor ama sorun çıkışlarda bağlı olan ledler sürekli yanıp sönüyor. Kırpışıyor yani. giriş pini low olduğunda ledler sönüyor. Sorun yok.. ama giriş 1 olduğunda ledler kırpışarak yanıyor. Acaba sorun yazılımdamı. Öyle görünüyo çünkü kartta farklı programlar çalışıyor sorunsuz.
_____________________________________________
'görevi; pc den buton okusunlar/okumasınlar mesajını aldığında bunu 628 lere iletmek
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_OFF
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
DEFINE OSC 4
TrisA=%000000   'A portu çıkış olarak ayarlandı
TrisB=%00000000 'B portu çıkış olarak ayarlandı
TrisC=%00000001 'C0 portu giriş olarak ayarlandı.
TrisD=%00000000 'D portu çıkış olarak ayarlandı
PORTA=0         'A portu tüm çıkışlar low
PORTB=0         'B portu tüm çıkışlar low
PORTC=0         'C portu tüm girişler low
PORTD=0         'D portu tüm çıkışlar low
ADCON1=7

BASLA:

IF  PORTC.0=1 then 'PC SORU OKUMA SÜRESİNİ BAŞLATTI İSE
GOTO oku
endif
if PORTC.0=0 then
GOTO okuma
endif
oku:        '628 lere buton oku mesajı at
PORTA=%111111
PORTB=%11111111
PORTD=%11111111
pause 1000
goto BASLA

GOTO okuma
okuma:      '628 lere buton okumayı kes mesajı
PORTA=%000000
PORTB=%00000000
PORTD=%00000000
pause 1000
GOTO BASLA
END
___________________________________________________

Deneme kartında ledler D portunun pinlerine bağlı idi. Bu nedenle sadece d portunu gözlemleyebildim. Diğer portlarda benzer kırpışmayı yapıyordur ama....

Maxim

Portc.0 girişini pull-down yaptınızmı ?
yani 4k7 ile şaseye verdinizmi ?

programda hata yok gibi ,

alayli

Arkadaşım;

Bu dediğinin olması gayet normal... PIC'in sınırlarını zorluyor olman yüksek ihtimal... Nitekim 32 adet pin'i çıkış olarak atamışsın. Ledlerinin önüne bağladığın akım sınırlama dirençlerinin değerleri nedir bilmiyorum ama genelde 220 - 680 ohm arası bağlarız bu dirençleri. 330 ohm bağladığın durumda kırmızı ledler yaklaşık 10 mA akım çeker PIC'ten pin başına... 10 mA x 32 adet LED = 320 mA yapar. Portlardan kombine (toplamda, her birinden ayrı ayrı değil!)  olarak çebebileceğin source ve sink akımları 16F877 için max 200 mA'dir. Bu sınır değeri aşmış olma ihtimalin yüksek. Ledlerin önündeki seri dirençlerin değerini arttırmayı (parlaklıkları çok azalabilir yada hiç ışıldamayabilirler) veya ledlerle PIC'in pinleri arasına uygun tampon devresi koymayı dene...

Saygılar...

Edit:

Sonradan hatırladım bu yukarıda bahsettğim "..... çebebileceğin source ve sink akımları 16F877 için max 200 mA'dir." şeklindeki durum biraz daha farklıydı... PORT A,B, E'nin toplamı 200 mA'i; PORT C VE D'nin toplamı da 200 mA'i  geçmemeliydi. Fakat burada yine bir trick var. Bu seferde Vss ve Vdd pinlerinden geçirebileceğin akımlarda sınırlarla karşılaşırsın. Bu değerler ledler ortak katotlu ise Vdd için 250 mA ile ledler ortak anotlu ise Vss için 300 mA ile sınırlı...

Sen ledlerini ortak katotlu bağlamışsın bu durumda;
Aşmaman gereken limit akım = 250 mA - PIC programının çalıştığı esnada PIC'in kendi çektiği akım olacaktır...
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

CaFFeiNe

Brownout' u kapatıp bir denesen?
tüm ledler yanınca anlık bir voltaj düşüklüğü oluyor olmasın?
(4V civarına anlık düşmelerde brownout açık ise rest alıyor olabilir)

f1varol

deneme yaparken sadece portd pinlerinde yük(led) bağlı. Yani 8 adet led. Diğer çıkış pinleri boş.Buna rağmen yapıyorsa akım değerleriyle ilgili olmasa gerek; değilmi?

Caffaneut hocam brownout nedir ve nasıl kapatılır. Program yükleme aşamasında yapılan birşeymidir yoksa yazılım kısmındanmı?
Maxsibot portc.0'ı 4k7 ile pull-down yaptım , aynı, değişiklik yok.

Maxim

Alıntı yapılan: "f1varol"deneme yaparken sadece portd pinlerinde yük(led) bağlı. Yani 8 adet led. Diğer çıkış pinleri boş.Buna rağmen yapıyorsa akım değerleriyle ilgili olmasa gerek; değilmi?

yok %99.9 onunla ilgili ,
her lede direnç yada ledlerin ortak uçlarına 1 adet denemek için direnç takıp denermisin ?
sonradan hatırladım ,aynı şey benim başımada gelmişti .

led ler arasında çok farklılıklar var ama,
normal bir led 3 voltta 25 ma çekerken ,25x8 =200ma
5 voltta 80 ma hatta daha fazla çekebiliyor , 80x8 =640ma

f1varol

maxi dostum ledlerin anot larına seri 470 ohm bağlı. Direnç değerinimi artırmakmı  gerek dersin? ama dostum kafamı kurcalayan 470ohm pic-led bağlantılarında çok yaygın kullanılır. Yine hatırlatmak isterim sadece 8 led bağlı pic çıkışlarına.

Maxim

ben direk bağlı olduğunu düşünmüştüm yada öyle anladım ,
o zaman başka birşey

f1varol

çıkışlar aktifken kırpışan ledlerde 0,30v gibi bir değer okuyorum. Led bu tepkiyi düşük voltaj geldiğin de yaparmı? benim bildiğim parlaklık çok düşer gerilim düşükse. anlamadım gitti

alayli

Bu kadar basit bir yazılım ve donanımda bunun olması garip. Yazılımda sorun görünmüyor, nitekim zaten yeterince basit. Yine de aklıma gelen umutsuz bir kaç şey daha;

*Kartı beslediğin güç kaynağının yada adaptörün özellikleri ne? Yeterince regüle mi?

*Deneme kartında Pic'in mclr pini pull-up mı?

*Pic beslemesine 100 nF takılı mı?

*Pic beslemesine 470-1000 uF gibi bir kondansatör de takıp denesen...

*Kırpışmanın yaklaşık frekansı ne civarda? WDT' ye senkron olabileceği aklıma geldi de...

*WDT kodda kapalı görünüyor ama pic'e yüklerken bu gerçekten kapalı mı?

*Pic beslemesini ve en azından ledlere bağlı pinlerden bir tanesini osiloskopta inceleme imkanın var mı? Bu pinler tam sıfıra iniyor mu? İniyorsa ne kadar süre 0 da kalıyor?

*portc.0'ı şu an ne ile sürüyorsun? buton ile mi? PC'ye mi bağlı?
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

CaFFeiNe

@ DEVICE pic16F877, WDT_OFF  gibi bir satır olacak
basici bıraktığım için tam çıkartamıyorum bi araştır
@ DEVICE pic16F877, BROWNOUT_OFF olabilir belki?

alieren

@ DEVICE pic16F877 'islemci 16F877
@ DEVICE pic16F877, WDT_OFF 'Watch Dog timer kapali
@ DEVICE pic16F877, PWRT_ON 'Power on timer acik
@ DEVICE pic16F877, PROTECT_OFF 'Kod Protek kapali
@ DEVICE pic16F877, MCLR_ON 'MCLR pini kullaniliyor.
@ DEVICE pic16F877, XT_OSC 'Dahili osilatör kullanilmayacak
@ DEVICE pic16F877, LVP_OFF
@ DEVICE pic16F877, BOD_OFF
DEFINE OSC 4

konfig ayarlarini boyle bir deneyin isterseniz.

f1varol

garip bişey oldu. Programı mcs ile derleyip winpic ile yüklerken hex kodları yaklaşık 20 satırdı. ve bunu yüklediğimde ledler kırpışarak yanıyordu. uğraşıp dururken bir kaç gündür dün aynı programı yeniden derlediğimde garip bir şekilde winpic deki hex kodlarının satır sayısı iki-üç katına çıktı. Ve yüklediğimde ledlerin kırpışması kesilmiş progaram istediğm gibi çalışıyordu. Başına hiç böle bişey gelen oldumu. Neden acaba?
sorunum çözülmüş oldu. İlgilenen arkadaşlara teşk. edrim

_____________________________