AVR a Nokia 5110 display

Odpovědět
Mortyx

AVR a Nokia 5110 display

Příspěvek od Mortyx » 07 čer 2015, 19:19

Dobrý den,
před nedávnem jsem přešel z Arduina na holé AVRko a s ním zkouším rozchodit display ze staré Nokie 5110. Kdysi jsem ho zprovoznil na Arduinu, kde fungovalo jako po másle, proto jsem se rozhodl přepsat starý C++ Arduino kód do C kódu pro Attiny2313, který běží na frekvenci 1MHz (interní osc.). Celý obvod, včetně displaye, je napájen ze zdroje o 5V. Tady je zapojení, snad se v něm vyznáte:

5V ... VCC (jak jsem řekl, napájím z 5V)
GND ... GND
PB0 ... odpor 1k ... SCE
PB1 ... odpor 10k ... RST
PB2 ... odpor 10k ... D/C
PB3 ... odpor 10k ... DIN (nebo DNK nebo MOSI)
PB4 ... odpor 10k ... SCLK
5V ... odpor 330 ... LED

Kód do AVR jsem z Arduina doslova opisoval. Nebyl jsem si jist, jestli mi bude fungovat komunikace, při které se nějakým způsobem shiftují data. Celé mi to přijde velice dřevorubecké. To byl důvod mého strachu. Konkrétně jsem se bál příkazu shiftOut. Našel jsem si ale zdrojáky Arduina, které vám přidám do přílohy pod jménem wiring_shift.c, a tam jsem to vykoukal. Nyní by komunikace měla fungovat. Teď už ale k mému problému.

Na začátku komunikace se display inicializuje a musí se do něj nastavit nějaké nastavení. To mi funguje (ale nevim jestli vše). Ověřil jsem si to tak, že jsem příkazem writedata(0x09, 0); zapnul všechny pixely, takže byly tmavé. Pak jsem se ale pokoušel odeslat do lcd nějaká data na zobrazení (třeba příkaz writedata(0xFF, 1); ). To už ale nefunguje a nemám ponětí proč. Nevěděl by někdo co s tím?
Jinak zdroják v C jsem si různě zjednodušil, jsem totiž líný psát PORTB |= 1<<rst; tak jsem si na to udělal funkci high(rst); ... zlaté Picaxe :D

Děkuji za Váš čas a přeji hezký den ;)
Přílohy
Nokia_5110.zip
(4.12 KiB) Staženo 125 x

Mortyx

Re: AVR a Nokia 5110 display

Příspěvek od Mortyx » 10 čer 2015, 16:28

Tak jste mi tedy pěkně pomohli :D ... ale nevadí, už jsem na ten problém přišel. Chybička se vloudila ve funkci writedata(), v podmínkách, kde jsem nastavoval pin dc jako 0 nebo 1 podle toho, jestli to byl příkaz nebo data na vykreslení. Podmínka byla if (data == 1)... Místo toho tam má být if (d_c == 1)...
Nad takovouhle hloupostí jsem strávil snad desítky hodin a to jsem tu podmínku několikrát kontroloval! :shock:
Ale to nevadí, hlavní je, že jsem na problém přišel.

Přeji hezký den!

Milops3
Příspěvky: 47
Registrován: 09 kvě 2013, 20:51

Re: AVR a Nokia 5110 display

Příspěvek od Milops3 » 10 čer 2015, 18:53

cau, vetsinou pro data a prikaz se pise zvlast rutina..

Kód: Vybrat vše

void write_lcd(unsignet int8 data)
{
output_low(nok_cs);
spi_write(data);
output_high(nok_cs);
}

void write_data(unsignet int8 data)
{
output_low(nok_dc);
write_lcd(data);
}

void write_cmd(unsignet int8 data)
{
output_high(nok_dc);
write_lcd(data);
}
pak nemusis resit nejaky podminky, nastavujes jen piny

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: jova a 1 host