![Cool 8-)](./images/smilies/icon_cool.gif)
display ovladaný atmelem
Moderátor: Moderátoři
display ovladaný atmelem
zdravim šecky elektroniky mam menší problem nedavno sem si koupil alfanumerický display MC0802A-SYL/H s tim že ho budu ovladat přes atmega8 ale jaksik display vubec nereaguje nevim asi to nějak špatně ovladám prosimvás kdyby někdo měl nějaky navod jak se displaye ovladají byl bych mu vděčný ![Cool 8-)](./images/smilies/icon_cool.gif)
![Cool 8-)](./images/smilies/icon_cool.gif)
Předpokládám, že pro komunikaci použivaš 8-mi bitovou sběrnici.(jestlni ne tak je to krapet slozitejsi). v podstate jde jen o to ze na displej musiš poslat dva byty ktere nastavi spravnou fci a mezi nimi dodržet minimalni dobu potřebnou k zapisu slova do řadiče v LCD cca.40us, nebo pockat na nastaveni kontrolniho bitu(konce zapisu) v LCD,a pak displej vymazat, a je vše připraveno k použiti. v mem případě vypadala inicializace kdysi asi takhle:
(jsou to pochopitelne jen vzpsane funkce, nikoli cely program)
void lcd_init(void)
{
//nastaveni osmibitove komunikace,4 radky,font 5x7
lcd_comm(0b00111011);
lcd_comm(0b00001111);
}
void lcd_clr(void)
{
CLR_BIT(COMM_PORT,RS);
write_delay();
DATA_PORT=1;
SET_BIT(COMM_PORT,ENABLE);
clr_delay();
CLR_BIT(COMM_PORT,ENABLE);
write_delay();
}
void lcd_comm(unsigned char byte)
{
CLR_BIT(COMM_PORT,RS);
write_delay();
DATA_PORT=byte;
SET_BIT(COMM_PORT,ENABLE);
write_delay();
CLR_BIT(COMM_PORT,ENABLE);
write_delay();
}
?!snad je to i z verze funkcniho programu uz je to doba co sem to psal
(jsou to pochopitelne jen vzpsane funkce, nikoli cely program)
void lcd_init(void)
{
//nastaveni osmibitove komunikace,4 radky,font 5x7
lcd_comm(0b00111011);
lcd_comm(0b00001111);
}
void lcd_clr(void)
{
CLR_BIT(COMM_PORT,RS);
write_delay();
DATA_PORT=1;
SET_BIT(COMM_PORT,ENABLE);
clr_delay();
CLR_BIT(COMM_PORT,ENABLE);
write_delay();
}
void lcd_comm(unsigned char byte)
{
CLR_BIT(COMM_PORT,RS);
write_delay();
DATA_PORT=byte;
SET_BIT(COMM_PORT,ENABLE);
write_delay();
CLR_BIT(COMM_PORT,ENABLE);
write_delay();
}
?!snad je to i z verze funkcniho programu uz je to doba co sem to psal
Žádné množství pokusů nikdy nemůže dokázat, že jsem měl pravdu. Jeden pokus však kdykoliv může dokázat, že jsem se mýlil.........(Albert Einstein).
Tady je například datasheet
http://pdf1.alldatasheet.com/datasheet- ... 44780.html
tohle asi bude ta prodleva po zapnutí
asi nejdůležitější je že po resetu se nastaví mimo jiné tohle
takže displej zůstane zhasnutý
http://pdf1.alldatasheet.com/datasheet- ... 44780.html
tohle asi bude ta prodleva po zapnutí
Kód: Vybrat vše
The busy state lasts for 10 ms after VCC rises to 4.5 V.
Kód: Vybrat vše
N = 0; 1-line display
D = 0; Display off
Můj člověk, assembler je good. Nicméně nejde o programovací jazyk, nýbrž o sled zadaných instrukcí. Z meho programu v C(viz výše) mužeš vzít ony dvě hodnoty a poslat je na displej
0b00111011 ;nestaví sběrnici a par dalších fcí
;počkej 40us
0b00001111 ;zapne displej, upraví zobrzení kursoru atd..
;dalších 40us
0b00000001 ;vzmaže znaky na displeji
;počkej 1,6ms a už mužes posilat data
0b00111011 ;nestaví sběrnici a par dalších fcí
;počkej 40us
0b00001111 ;zapne displej, upraví zobrzení kursoru atd..
;dalších 40us
0b00000001 ;vzmaže znaky na displeji
;počkej 1,6ms a už mužes posilat data
Žádné množství pokusů nikdy nemůže dokázat, že jsem měl pravdu. Jeden pokus však kdykoliv může dokázat, že jsem se mýlil.........(Albert Einstein).
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
Config Lcd = 16 * 2
Lcd "Nejaky TExt"
Když si představím co bych všechno musel napsat v assembleru abych dosáhl toho co udělají tyto 3 příkazy, tak mě jímá hrůza.
S pozdravem "bojovník proti assembleru"
Config Lcd = 16 * 2
Lcd "Nejaky TExt"
Když si představím co bych všechno musel napsat v assembleru abych dosáhl toho co udělají tyto 3 příkazy, tak mě jímá hrůza.
![Smile :)](./images/smilies/icon_smile.gif)
S pozdravem "bojovník proti assembleru"
Že by další dušička píšící v Bascomu?nekmil píše:Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
Config Lcd = 16 * 2
Lcd "Nejaky TExt"
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Jinak jak už zaznělo, LCD potřebuje na začátku provést inicializaci a ta není okamžitě, je potřeba počkat než se příkaz provede. A také po rozjezdu vnitřního procesoru (řadiče) se musí počkat na ustálení jeho oscilátoru a tak podobně.
Jen tak na okraj, máš připojené napájení? A nastavený kontrast? Pokud se zapne jen napájení, tak se na displeji zobrazí v horním řádku kostičky. To není podceňování, tuhle jsem hledala důvod podivného poblikávání LCD a on to nakonec byl upadlý drátek od napájení...