Připojil jsem k ATMega8 jednořádkový 16znakový LCD pomocí 4 datových vodičů a použil Fleuryho knihovnu (homepage.hispeed.ch/peterfleury/ … .html#libs). Funguje to, ale zobrazuje se na displeji jen prvních 8 znaků. Protože s LCD dělám poprvé, nevím, jestli je chyba v tom, že jsem zapomněl něco nastavit v lcd.h nebo mám displej s avr špatně prodrátovaný.
LCD připojuji na port D
data4 - pin0
data5 - pin1
data6 - pin2
data7 - pin3
RS - pin4
RW - pin5
E - pin6
int main(void)
{
lcd_init(LCD_DISP_ON);
lcd_command(LCD_FUNCTION_4BIT_1LINE );
lcd_clrscr();
for(;
{
lcd_clrscr();
lcd_puts(“1234567890123456”);
// dalsi kod
}
}
[/code]
Po připojení displeje k napájení bez AVR se na něm objevuje na prvních 8 pozicích 8 čtverečků a na dalších pozicích už nic. Je potřeba pro aktivaci všech 16 pozic nějaká softwarová inicializace nebo to vypadá spíš na vadný displej? V dokumentu “http://www.dbzoo.com/_media/livebox/how_to_use_cdm_1.pdf” se píše “When powered up, the display should show a series of dark squares, possibly only on part of the display.”.
Když to něco píše, tak to je zapojený správně.
Můžeš zkusit nastavit definice v .h souboru na displej 16x4 a zapsat něco do každýho řádku. Kdyby měl tvůj displej jinak namapovanou paměť, nejspíš by se ti něco povedlo dostat i na druhou osmici.
Když to nerozjedeš, vlož sem aktuální .h soubor a typ lcd. Na 16x2 mi tento modul pracuje bez problému.
Je ten lcd_command() v programe vôbec potrebný?
Vždy používam 4 bitovú komunikáciu, lcd displej 16x2 a zatiaľ som tento príkaz na správnu funkciu nepotreboval - všetko potrebné som nastavil v #define súborov knižnice.
#define LCD_LINES 2
#define LCD_DISP_LENGTH 8, tak mi pořád LCD zobrazoval jen 8 znaků. První, co jsem zkusil bylo právě
lcd_command(LCD_FUNCTION_4BIT_2LINES );
a rozběhlo se všech znaků 16.
Má to malou nevýhodu, při zapisování řádku s 16 znaky se nejdříve ukáže prvních 8 a po malé chvilce teprve zbylých 8. Nevadí to, ale působí to divně. Je-li tedy jiná možnost nastavení ne LCD commandem ale v define, sem s ní.
sqad: Ano, toto nastavení jsem zkoušeljako jedno z prvních, ale při nastavení právě jedné řádky s 16 znaky se zobrazí jen prvních 8 znaků. Mám v LCD nějaký čip od Samsunga, který je sice kompatibilní s 44780, ale asi ne zcela.
Jak jsem psal, displej 16x1 je dvouřádkový takže musíš napsat 8 znaků do prvního a 8 do druhého řádku.
Jde zapsat i 16 znaků najednou, když nastavíš LCD_WRAP_LINES.
Aspoň u mne to tak funguje bez nějakého zpoždění.
lcd_command(LCD_FUNCTION_4BIT_2LINES );
Tento příkaz už byl provedený ve funkci lcd_init(), takže by neměl nic ovlivnit.