avatar_elektro77

Batarya şarj göstergesi

Başlatan elektro77, 24 Ekim 2019, 18:05:08

elektro77

2x16 alphanumerik lcd de sağ üst köşede veya alt köşede, telefonlardaki gibi hareketli batarya şarj oluyor şekli göstermek istiyorum. işlemcideki bir pine bilgi gönderip şarj aletinin takılması ile birlikte bu şekil şarj oluyor gibi hareket etmeli. tam şarj olduğunda ise yine işlemcideki başka bir pine bilgi gönderip bu bilgiye göre şarj şekli tam doluluğu göstermeli.
lcdout komutunu nasıl yazmalı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

Ucu açık bir soru bu. Yani kriterleri tam olarak belli değil.
Bir çok şekilde yapılabilecek bu işin esasları tam olarak verilmeli.
Mesela,
LCDOUT $FE,$8B,255
komutunu verince ekranin üst sağ tarafına bir blok (dik) dikdörtgen kare yerleşir.
Bundan 3 - 4 adet yerleştirip 2 tanesini sırası ile soldan sağa doğru önce yerleştirip sonra silip yine sırası ile yerleştirirsen şarj ediyor imajını verirsin.
Blok dikdörtgen yerine bu işi ince dik çizgilerle de yapabilirsin. Yada en güzeli kendin karekter tanımlarsın (türkçe harf tanımlar gibi) o karekterleri yerleştirirsin.
Ben senin için yaptım. İlk sıradaki solda 2 piksel yan yana kullanarak yukarıdan aşağı çizgi oluşturur. İkincisi ise sağda aynı çizgiyi oluşturur. Bunları yan yana koyarak çzigiler elde edersin. Gerisi senin düşünce kabiliyetine kalmış.

    '
    '    Custom character definition
    '    ===========================
LCDOUT $FE, $40, $18, $18, $18, $18, $18, $18, $18, $18 '
LCDOUT $FE, $48, $03, $03, $03, $03, $03, $03, $03, $03 '

Ete



elektro77

#2
Öncelikle verdiğiniz cevaplar için çok teşekkür ederim.
LCDOUT $FE, $40, $18, $18, $18, $18, $18, $18, $18, $18 '
LCDOUT $FE, $48, $03, $03, $03, $03, $03, $03, $03, $03 '
Hocam
yukarıdaki komutları yerleştirdiğimde ekranda hiç bir şey göremiyorum. Bir hata olabilirmi?
Fakat ilk örnekteki
LCDOUT $FE,$8B,255 kodunu yerleştirdiğimde ise dediğiniz gibi dik diktörtgen kareyi görüyorum.

Birde bu lcd ekranlar için bir karekter tablosu varmı. Hangi karekteri, hangi lcdout komutuyla çıkartırız gibi. Yoksa bunu lcd nin datasheetinden mi bakacağız.
"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

Biraz meraklı olman gerekiyor. Ne söylemişim (türkçe harf tanımlar gibi) o halde yapman gereken Türkçe harfler yada karekterler nasıl tanımlanıyor ve program içinde nasıl kullanılıyor araştırman gerekiyor idi. Verdiğim o bir şey göremediğin kodlar karekter tanımlama kodları ve bu kodlar adres $40 den başlar lcd komutunda 0 ile gösterilir. Sonraki karekter $48 ile başlar lcd komutunda 1 ile görülür. Sonraki karekter $50 sonraki $58, sonraki 60 ve sonraki $68 ile başlar toplam 8 adet karekter tanımlayabiliyorsun. Sitede Özel karekter tanımlama adı altında gereken açıklama olması gerek. Ararsan bulursun. Bunların hepsi Ders Notlarını okumadan iş yapmandan kaynaklanıyor. Derslerin içinde var bunlar.


Aşağıdakini dene bakalım, İlk veriğimde ince bir çizgi oluşturmuştum ama daha kalın olanı daha güzel gözüktüğü için değiştirip biraz kalınlaştırdım.

LCDOUT $FE, $40, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E ' 
LCDOUT $FE, $48, $18, $1C, $1E, $1F, $1E, $1C, $18, $10 ' 

PAUSE 200  ' LCD nin kullanıma hazır hale  gelebilmesi için gerekli süre
LCDOUT $FE,1  ' Ekran silindi
CLEAR

BASLA:
      
LCDOUT $FE,$CA,0,0,0,1
PAUSE 150
LCDOUT $FE,$CA,0,0,32,32
PAUSE 250
GOTO BASLA
END
bu satırları programda LCD tanımlamasını yaptıktan sonraki kısma yerleştir ve sonucu gör bakalım.

Ete

elektro77

Okuma konusunda haklısınız hocam. Kaynaklarınızı ve derslerinizin printini alıp kitap gibi ciltletmeme rağmen hala okuyamadığım bölümler var. buda onlardan biri galiba. bu konuya rastlamadım henüz demekki.
Hatta babam aylardır yoğun bakımda ve bende yanında refakatçiyim. kitabınızı yanıma almayı nasıl unuttum anlamıyorum. Gerçi kitabınızı bu zamanlarda okumamın bana fayda vereceğini de sanmıyorum.
Babamın yanında elimden geldiğince birşeylerle uğraşıyorum işte.

Verdiğiniz algoritmaya gelince. Gayet güzel çalıştı. Emeğinize sağlık.
"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"

elektro77

#5
BASLA:
LCDOUT $FE,$CC,0
PAUSE 150
LCDOUT $FE,$CC,0,0
PAUSE 150
LCDOUT $FE,$CC,0,0,0
PAUSE 150
LCDOUT $FE,$CC,0,0,0,1
PAUSE 150

LCDOUT $FE,$CC,0,32,32,32
PAUSE 250
GOTO BASLA
END
bende yukarıdaki gibi biraz değişiklik yaptım hocam. Biraz yer kaplar ama şık oldu.

Bir sorum daha olacak.
diğer programları etkilemeden bu şarj göstergesini kod dizini  içine nasıl yerleştirmeliyiz.
bir return dongusu kurup gosub ile çağırsak olurmu mesela. ama ekranda o anda ne varsa hiç etkilenmemeli. aynı telefonlar gibi yani.
"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"

MB_77

#6
bu mesaj tarafımdan silinmiştir.

ete

Baban için ağlık dileklerimi iletiyorum. Umarım en kısa sürede sağlığına kavuşur.
Soruna gelince, en son yazdığın kısıma bakacak olursan 150 ms lik peryotlar ile çalışıyor.
Bu durumda süresi 150 ms lik peryodu olan bir while wend döngüsü yaratıp programın diğer kısımlarını bu döngü içinde çalıştırıp döngü sonunda pil gösterge komutlarını eklesen sorun olmaz diye düşünüyorum.
Aslında bu sorunun cevabını programların diğer kısmını gören biri olarak kendin vermen gerekiyor. Ben sadece fikir üretebilirim. Benim kullandığım yöntem de eski kısmı while-wend döngüsü içine almak şeklinde. Yada for next döngüleri kurarsın. Next sonunda 150 ms geçmiş olur aynı şeyi yaparsın. Belkide birden fazla döngü kurman gerekir. Çünki kodun otomatik yapılması pek mümkün gözükmüyor. Şöyle olabilir;
say=0:LCDOUT $FE,$CC,0;  
dongu:
buraya 150 ms lik bir döngü (for next yada while wend) kurup sonra,
LCDOUT ,0;
say=say+1:IF say<4 then dongu
lcdout ,1
pause 150
LCDOUT $FE,$CC,0,32,32,32
pause 250
goto dongu
olabilecek en kısa şekil bu sanırım.

Ete

elektro77

sağlık dilekleriniz için sonsuz teşekkürler hocam.
Mb77 sizede teşekkürler.
"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"

Powered by EzPortal