Dobrý den,<br><br>Takže děkuji všem za rady, zvláště uživateli s přezdívkou petop. Nyní již oba řádky fungují v obou konfiguracích pokaždé.<br>Nižší kontrast byl kvůli napájení, při připojení programátoru bylo pouze 4,588V, při napájení z adaptéru(na desce je stabilizátor 5V) 4,883V.<br>
Při inicializaci podle katalogového listu<br><a href="http://www.allshore.com/pdf/Samsung_KS0066_(s6a0069).pdf">http://www.allshore.com/pdf/Samsung_KS0066_(s6a0069).pdf</a> (str. 28)<br>mi oba řádky dnes naopak fungovali při napájení z adaptéru. Po přidání dvou inicializací na 8-bitovou komunikaci jedou oba řádky spolehlivě. Přidávám současný kód.<br>
<br>děkuji a s přátelským pozdravem,<br><br>Zdeněk<br><br><br>Pro funkci main<br><br>#define F_CPU 16000000L <br><br><br>#include <avr/io.h><br>#include <util/delay.h><br>#include "bitove_operace.h"<br>
#include "dlouhe_zpozdeni.h"<br>#include "LCD_ATmega-S6A0069.h"<br><br>int main(void)<br> {<br> <br> DDRB=0xff;<br> DDRE=0xff;<br> DDRC=0xff;<br> DDRA=0xff;<br> <br> <br> PORTB=0x00;<br>
PORTE=0x00;<br> PORTC=0x00;<br> PORTA=0x00;<br><br> dlouhe_zpozdeni(200); <br> Inicializace_LCD(1);<br><br> Posli_retezec("krasna 1",1,0);<br> Posli_retezec("krasna 2",2,0);<br><br>
nastaveni_cestiny();<br> Posli_retezec("Krásná čeština",1,0);<br> <br> }<br><br><br>a pro knihovnu LCD inicializaci<br><br>void Inicializace_LCD(unsigned char podsviceni) <br>{<br><br>unsigned char zaloha_DDR,zaloha_PORT;<br>
<br> <br> if (podsviceni)<br> sbi(PORTA,7);<br> else<br> cbi(PORTA,7);<br> <br> zaloha_DDR=DDR_LCD; // zálohování obsahu registru DDR <br> zaloha_PORT=PORT_LCD; // zálohování obsahu registru PORT<br>
<br> outp(0x00, PORT_LCD); // výstup do log "0"<br> outp(0xff, DDR_LCD); // konfigurace portu jako výstupního<br> <br> dlouhe_zpozdeni(100); // cekame 100ms na nabeh napajeciho napeti<br>
<br> sbi(DDR_LCD,RS_PIN);<br> cbi(PORT_LCD,RS_PIN);<br> <br> sbi(DDR_LCD,RW_PIN);<br> cbi(PORT_LCD,RW_PIN);<br><br> _delay_ms(1);<br> <br>// rezim 8 bitu<br><br> Posli_nibble(0x03);<br> _delay_ms(1);<br>
<br> dlouhe_zpozdeni(200);<br><br>// rezim 8 bitu<br><br> Posli_nibble(0x03);<br> _delay_ms(1);<br><br> dlouhe_zpozdeni(200);<br><br>// rezim 4 bitu<br><br> Posli_nibble(0x02);<br> _delay_ms(1);<br><br> Posli_prikaz(0x28); // dva řádky<br>
_delay_ms(2);<br> Posli_prikaz(0x01); //smaž displej<br> _delay_ms(2);<br> Posli_prikaz(0x0c); //zapni displej<br> _delay_ms(2);<br> Posli_prikaz(0x06); //režim inkrementace<br>
_delay_ms(2);<br><br> <br> <br> DDR_LCD=zaloha_DDR; // obnovení obsahu registru DDR <br> PORT_LCD=zaloha_PORT; // obnovení obsahu registru PORT<br>
<br>}<br><br><br><br><br><div class="gmail_quote">2010/5/26 petop <span dir="ltr"><<a href="mailto:petop@stonline.sk">petop@stonline.sk</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000">
Zdravím, priatelia.<br>
Stretol som sa s tím. <br>
Skúste tento postup:<br>
rcall wait200<br>
rcall LCD_init<br>
rcall wait200<br>
rcall prenos_lcd_1 ...až teraz zadávate data na LCD...<br>
Je potrebné urobiť poriadne čakanie na BUSY signál, nepomáha nechať po
commande len napr. 15ms.<br>
A taktiež mám vyhodené 3x inicializovanie 8 bit komunikácie a nasledne
prepnutie na 4 bit.<br>
asi takto:<br>
LCD_init: rcall wait15<br>
cbi LCDport_b,lcdrs ;daj RS do 0 <br>
ldi temp,kom_8b<br>
rcall zapis_nBF ;zapis instrukciu be cakania na BF<br>
rcall wait15<br>
ldi temp,kom_4b<br>
rcall zapis_BF<br>
rcall busy<br>
<br>
;nastavenie rezimu modulu 2riadky, znak 5 x 7<br>
ldi temp,(kom_4b | rez_2r | fon_5x7) ; | je za OR<br>
rcall zapis_4BF<br>
rcall busy<br>
...atd.<br>
<br>
Ak budete mať zaujem pošlem trošku viac kódu...<br>
<br>
Petop<br>
<br>
<br>
Zdeněk lada wrote:
<blockquote type="cite"><div><div></div><div class="h5">Zdravím konferenci,<br>
<br>
dnes jsem několik hodin zápasil s displejem z GME 1602B V2.0. odkaz viz
zde:<br>
<br>
<a href="http://www.gme.cz/cz/mc1602e-syl-h-p513-109.html" target="_blank">http://www.gme.cz/cz/mc1602e-syl-h-p513-109.html</a>,<br>
<br>
ale zadní strana vypadá jinak, fotka je poněkud neaktuální. Problém je
v tom že pokud naprogramuji ATmega128 s připojeným programátorem,
fungují oba řádky displeje.<br>
V okamžiku kdy odpojím programátor a vypnu a zapnu napájení se rozsvítí
jen jeden řádek, navíc s větším kontrastem než v případě kdy fungují
oba řádky. V některých případech se mi zobrazili jakési nesmysli, jako
znaky & a podobně.<br>
<br>
S displejem komunikuji pomocí 4 vodičů.<br>
<br>
Setkal se tím někdo a nevíte kde by mohla být chyba? V inicializaci
displeje, nebo v pomalém nabíhání napájecího napětí, po případně úplně
někde jinde? Zkoušel jsem dát prodlevy v sekvenci 5x delší, ale
nepomohlo mi to...<br>
<br>
s pozdravem,<br>
<br>
Zdeněk<br>
<br>
<br>
</div></div><pre><hr size="4" width="90%"><div class="im">
_______________________________________________
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a>
<a href="mailto:Hw-list@list.hw.cz" target="_blank">Hw-list@list.hw.cz</a>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>
</div></pre>
</blockquote>
</div>
<br>_______________________________________________<br>
HW-list mailing list - sponsored by <a href="http://www.HW.cz" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br></blockquote></div><br>