avatar_elektro77

18F4520 Uygulamaları

Başlatan elektro77, 12 Kasım 2019, 10:46:05

elektro77

18f4520 ye yeni geçtiğim için 4520 ile yapılmış birkaç devre ve algoritmayı kütüphane oluşturup tutmak istiyorum.
ekte 18f4520 ile yaptığım bir uygulama var. Keyped+usart+tmr0 kesmesi.
keypedi dün çözmüştük ama işin içine usart da girince biraz işler değişti galiba.
ekteki uygulama kısmen çalışıyor ama çok saçmaladığı noktalar var. Usart kesmesi içinde tmr0 kesmesi ile lcd nin arka ışığının yanık kalma süresini şartlara bağladım ama çalışmıyor. usart kesmeside vericide sürekli veri alıp gönderiyor. Yanlış olan yerleri gösterebilirmisiniz lütfen.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Timer çalışmıyor. Aşağıdaki iki regster ayarını programın başına ekle.
T0CON=%11000111
RCON.7=1

Sonra bak bakalım çalışacakmı?

Ete

elektro77

sayac çalıştı hocam. fakat şu hatayı verdi
[PIC18 EXEC] PC=0x051A. RETFIE executed (in interrupt priority mode) with both GIEH and GIEL set. [U6]

usart sürekli veri alıp gönderiyor ve sayacta doğal olarak hep basa alıyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

#3
Programda mantık hatan var. SW1=0 yapmaz isen sürekli o sayac yeni baştan başlayıp sayacaktır.
Diğer hata içinde şunu ekle  INTCON2.2=1. Ayrıca data sheet okumaya alışman gerek. Bunları data sheet inceleyerek buluyorum.
BASLA satırının altındaki açıklaması "'ARKA ISIK AÇIP KAPATMA BOLUMU" olan satırları endif e kadar kaldır. Yerine aşağıdaki
IF SW1=1 and durum=0 THEN
    durum=1:SW1=0
    GOSUB DELAY:SAYAC=SAYACDEGER 
    BILGI=1
    GOSUB GONDER
    LCD_LED=1
    TMR0L=60
    INTCON.5=1 
ENDIF
ekle. Daha doğrusu var olan satırları buna çevir.
Kesme kısmındaki Saya değerini yazdıran LCDOUT komutu zaman aldığı için SAYAC değerini 50 vermen yeterli oluyor. LCDOUT u kaldırırsan 50000 ancak yetiyor.

Ete

ete

Bu verdiğim şekilde çalışıyor ancak LCD_arka ışık iki defa yanıp sönüyor. Bunun sebebi Buton kontrolünde çok hızlı çalışıp ben butondan elimi çekinceye kadar yeniden set ediyor.
Bunu önlemek için bir bit değişkeni daha gerekir.
İlişikteki programı dene.
Priority ikazını gidermek için
'RCON.7=1
'INTCON2.2=1
satırlarını kapat yada sil. TMR0 kesmesine öncelik vermiştim ama aynı anda kesme oluşuyor ve şaşırıyor program. Kendi bildiği gibi yapsın.

elektro77

teşekkürler hocam. harika çalışıyor. Emeğinize sağlık. Size borcumu ödeyemem. Artık kütüphanemde iyi bir işlemci örneği var.
Bu arada 18f4520 yi sizde ilk defa kullandınız heralde. Yada unuttunuz. Bunun dışında hafızası 877 nin hafızasından büyük olan yani 16kb filan yada 32 kb başka ne gibi bir işlemci öneriniz olur. Çünkü 18f4520 çok pahalı.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

18f45k22 yi seviyorum iyi bir işlemci ve nisbeten daha yeni nesil işlemcilerden.
Diğerinden ucuz olabilir.

Ete

elektro77

#7
Alıntı yapılan: ete - 12 Kasım 2019, 22:46:0418f45k22 yi seviyorum iyi bir işlemci ve nisbeten daha yeni nesil işlemcilerden.
Diğerinden ucuz olabilir.

Ete


hocam ben 32 bit de pbp 2.60 ve mcs 4.0.0 versiyonlarını kullanıyorum. bu bahsettiğiniz pic yani18f45k22  bu versiyonlarda yok. 18f45k22 yi tanımak istiyorum. Ne yapmalıyım.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Data sheetini okumanı tavsiye edeceğim.
Eski versiyonda PBP da 45K22 olması lazım. Yoksa mecburen 3.1 verisyona geçmen gerek.

Ete

Powered by EzPortal