Test a zprovoznění LCD displeje HC160203C-VA s Atmega8-16

Ahoj.
Kdyz tak si s tim prosim jeste pres vikend hrej, v pondeli si to sestavim na nepajivem poli, vyzkousim to a dam ti vedet.
Ja bych se tim Resetem moc nezabyval, podle meho slouzi jenom k programovani, znovuspusteni programu lze docilit vypnutim/zapnutim napajeni.
V ponyprogu uz nenahravam, ale myslim, ze to delas spravne

Tak mcu i displej běží. Chyba je nejspíš v programu. Na začátku se LCD vpořádku zapne, procesor se mu pak snaží něco nacpat, ale jaksi to nedopadne :slight_smile:

Jen tak mimochodem: kde máš blokovací kondíky napájení procesoru a displeje???

Tu ledku ti sem dám odpoledne když to neudělá někdo dřív, teď musim zmizet.

Využijem tady, že příkazy v mainu se už vykonávají s vteřinovým krokem, nemusíš tam tedy vkládat další zpoždění.

[code]int main (void)
{
// ledka s odporem bude mezi PB1 a Vcc
DDRB |= 1<<PB1; // PB1 = vystup, na portu je po resetu “0”,
// ledka tedy teď svítí
delay_ms(1000);
LCD_init();
LCD_send_command(LCD_CLR);
LCD_send_command(LCD_HOME);
LCD_send_command(0x80+0);
LCD_string("…Project…");
LCD_send_command(0xc0+0);
LCD_string(“project.irone.org”);
while(1)
{
for(char i=0;i<16;i++)
{
PORTB = PINB ^ 1<<PB1; // negace PB1
delay_ms(1000);
LCD_send_command(0x1c);
}

	for(char j=0;j<16;j++)
	{ 
		PORTB = PINB ^ 1<<PB1;	// negace PB1
		delay_ms(1000); 
		LCD_send_command(0x18); 
	} 
} 
return 0; 

}[/code] Zvykni si odsazovat příkazy v nadřízených strukturách, jinak je program velice nečitelný.

Edit: teď koukám do ds megy8 a asi neumí negaci zápisem do pin registru. Trochu jsem tedy upravil kód.

for piityy :tento řádek jsem musel dát do komentáře DDRB |= 1<<PB1; // PB1 = vystup, na portu je po resetu “0”, zatím díky

Bez tohoto řádku nebude pin nastaven jako výstuní a ledka ti nebude blikat. Jaký je s ním problém?

Překladač mi to nepobere

rm -rf Text_LCD.o  Text_LCD.elf dep/* Text_LCD.hex Text_LCD.eep Text_LCD.lss Text_LCD.map
Build succeeded with 0 Warnings...
avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Text_LCD.o -MF dep/Text_LCD.o.d  -c  ../Text_LCD.c
../Text_LCD.c:74: error: expected declaration specifiers or '...' before '*' token
../Text_LCD.c:74: error: 'main' declared as function returning a function
../Text_LCD.c: In function 'main':
../Text_LCD.c:74: error: expected declaration specifiers before '|=' token
make: *** [Text_LCD.o] Error 1
Build failed with 3 errors and 0 warnings...

zase díky za pomoc a trpělivost.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

To ti tam někde chybí/přebejvá nějaká blbost jako středník, závorka apod. Dej sem celej zdroják (jako soubor, ať nezaplácneš celou stránku).

Tak tady to máš ten soubor ale už jsem se domák znak { místo na řádce 74 tak byl na 76 díky.
Text_LCD.c (2.48 KB)

S tou závorkou jsi to našel dobře. Nechápu ale, jak v tý neformátovaný prasečině můžeš něco najít :wink:

5 minut jsem to dával do kupy. Je tam několik chyb, označil jsem ti je šipkama. To bys mohl zvládnout opravit.
Text_LCD.c (2.76 KB)

To já ne to zdroj project.irone.org/2x16-lcd-with-atmega-8/ :blush: já jsem to vzal jako bezchybný vzorový zdroják já se jen učím pracovat s displejem a jazykem C tak jak to mám upravit ? :blush: díky za pomoc
takto ? :
Text_LCD.c (2.79 KB)

Jj, tak.

Ono na webu se to vždycky tekhle sesype když si nedaj práci to tam vložit správně. Pak si to musíš naformátovat sám abys s tím mohl dělat. Každopádně to nebylo bezchybný :slight_smile: (né že by teď nutně bylo…).)
Ještě jsem si tam všim funkce “delay_ms()”. Její význam mi asi zůstane navždy utajen (protože její maximálka je stejná jako interní funkce v GCC), každopádně je tam zbytečná. Odstranil jsem ji a nahradil “_delay_ms()”, kterou obsahuje překladač.

Vyzkoušej, co to dělá.
Text_LCD.c (2.5 KB)

Tak jsem do mcu nahrál ten upravený kód (ten poslednÍ)co jsem dal k posouzení ledka už sice bliká a to následovně sekundu svítí sekundu ne ale bohužel displej ne a ne fungovat tento zdroják v tom tvém posledním příspěvku už by měl fungovat? (rozuměj já toho švába musím předělávat z jedné destičky na které to programuji do druhé na které mam ten displej) tak uvažuji do budoucna si postavit tu zkušební a programovací desku z mp222.wz.cz/ je to dobrá volba? díky za trpělivost.

Jesli to bude fungovat netuším, ale asi to bude stejný, dělal jsem tam jen kosmetický úpravy. Budš muset znovu zkontrolovat připojení displeje k mcu a definice jesli vše souhlasí.
Ve vydloubnutí procesoru a vložení do druhého pole sice nevidím problém, ale proč si tedy nepřipojíš programátor do toho pole s displejem? ISP je na portu B, kterej máš volnej (nebo aspoň potřebné piny) a reset programátoru můžeš připojit i k případnému obvodu resetu mcu jesli u něj nějaký máš. Ta deska mi přijde zbytečná když máš nepájivý pole. Místo ní si můžeš udělat samotnej programátor (jesli ho teď máš jen na nepájivym poli).

Když se ovšem chceš učit práci s mcu, je zbytečný se vrtat v takovym programu, když ani nevíš, co kterej řádek znamená. Nejdřív se musíš naučit pracovat se samotným procesorem a teprve pak k němu připojovat složitější věci. Nehledě na to, že bez znalosti C stejně každou chvíli narazíš.

Odpoj pin 5(RW) na LCD od mikroprocesoru a uzemni ho.

Zdravím
Ani to nepomáhá :blush:díky

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Zdravim.
Tak jsem si to sestavil uplne stejne, a taky mi to nefunguje.
Kdyz prodlouzim casy ukazuje to U,(ctverec),&,(Suma),(Divny znak ze Stargate),V7H
Vysledek znamena ze problem je v tom programu.
Overeno s mou knihovnou, zapojeni je v poradku.
S pozdravem

Tak dalsi poznatek.
Zkopiroval jsem puvodni projekt a opravil chyby, tak kdyz to nahraji programatorem, tak vse funguje jak ma, ale kdyz vypnu/zapnu napajeni, tak se LCD nezinicializuje…
Asi je potreba na zacatku pohrat si s tim delay

Zdravím
Já to programuji následujícím způsobem napřed to dám na destičku kde mám zapojený programátor pak ten šváb přenesu na druhou desku kde mám to zapojení s tím displejem a to prodlužuje čas a to nehledě k tomu že ty nožičky zažívají jak to udělat aby jsem nemusel ten šváb přehazovat? mohu to dát dohromady nebude se to hádat? já vím že je ten programátor je připojen na PORTUB a navíc na PORTUB pin PB1 si chci zachovat tu Ledku pro kontrolu běhu, když pomineme ten reset který je na stejném pinu bude to celé fungovat? díky za trpělivost.

Určitě bude, běžně se to tak dělá. Kdyby se ti nechtělo, můžeš programátor nechat na tý desce, na který ho máš, tačí desky propojit drátkama.

Ja taky potvrzuji ze to pujde, prave prvni prikaz v int main(void) urcuje ze se pouzije pouze 2 pin jako vystup ostatni jsou jako vstupy.
Neboj se toho, jenom asi pozor, aby si mel stejny potencial na programatoru a na tvem napajeni uC, protoze sice nevim, jaky programator pouzivas, ale nektere krmi uC vlastnim napajenim (coz je asi tvuj pripad) a zde muze to ze programator dava treba jenom 4 V a ty ten uC budes krmit 5V s tveho napajeni trosku problem.
Jinak jak jsem avizoval, ten program tak jak je funguje pouze po nahrani programatorem, kdyz se vypne/zapne napajeni uC, tak se proste ta inicializace neprovede korektne, asi nejaka chyba s casovanim inicializace, nebo nejaka nestandartni inicializace.