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

Zdravím
Zas jednou jsem byl “utrácet” tak jsem si koupil displej HC160203C-VA a Atmegu8-16 mám doma a našel jsem si stránku project.irone.org/2x16-lcd-with-atmega-8/ na které je schéma ze zdrojovým kódem tak jsem si řekl že to zkusím ale výsledek po překladu je tento:
Build started 9.9.2010 at 18:59:03
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
In file included from …/Text_LCD.c:2:
c:/winavr-20100110/lib/gcc/…/…/avr/include/util/delay.h:85:3: warning: #warning “F_CPU not defined for <util/delay.h>”
…/Text_LCD.c: In function ‘LCD_send_char’:
…/Text_LCD.c:27: error: stray ‘\327’ in program
…/Text_LCD.c:27:12: error: invalid suffix “f” on integer constant
…/Text_LCD.c:27: error: expected ‘)’ before numeric constant
…/Text_LCD.c: In function ‘LCD_send_command’:
…/Text_LCD.c:43: error: stray ‘\327’ in program
…/Text_LCD.c:43:13: error: invalid suffix “f” on integer constant
…/Text_LCD.c:43: error: expected ‘)’ before numeric constant
…/Text_LCD.c: In function ‘LCD_init’:
…/Text_LCD.c:53: error: stray ‘\327’ in program
…/Text_LCD.c:53: error: expected ‘;’ before numeric constant
…/Text_LCD.c:54: error: stray ‘\327’ in program
…/Text_LCD.c:54: error: expected ‘;’ before numeric constant
…/Text_LCD.c:57: error: stray ‘\327’ in program
…/Text_LCD.c:57: error: expected ‘)’ before numeric constant
…/Text_LCD.c:58: error: stray ‘\327’ in program
…/Text_LCD.c:58:20: error: invalid suffix “c” on integer constant
…/Text_LCD.c:58: error: expected ‘)’ before numeric constant
…/Text_LCD.c:59: error: stray ‘\327’ in program
…/Text_LCD.c:59: error: expected ‘)’ before numeric constant
…/Text_LCD.c: In function ‘main’:
…/Text_LCD.c:76: error: stray ‘\327’ in program
…/Text_LCD.c:76: error: expected ‘)’ before numeric constant
…/Text_LCD.c:77: error: stray ‘\223’ in program
…/Text_LCD.c:77: error: stray ‘\205’ in program
…/Text_LCD.c:77: error: stray ‘\205’ in program
…/Text_LCD.c:77: error: stray ‘\224’ in program
…/Text_LCD.c:77: error: ‘Project’ undeclared (first use in this function)
…/Text_LCD.c:77: error: (Each undeclared identifier is reported only once
…/Text_LCD.c:77: error: for each function it appears in.)
…/Text_LCD.c:79: error: stray ‘\223’ in program
…/Text_LCD.c:79: error: ‘project’ undeclared (first use in this function)
…/Text_LCD.c:79: error: stray ‘\224’ in program
…/Text_LCD.c:83: error: stray ‘\327’ in program
…/Text_LCD.c:83:20: error: invalid suffix “c” on integer constant
…/Text_LCD.c:83: error: expected ‘)’ before numeric constant
…/Text_LCD.c:87: error: stray ‘\327’ in program
…/Text_LCD.c:87: error: expected ‘)’ before numeric constant
make: *** [Text_LCD.o] Error 1
Build failed with 34 errors and 1 warnings…

je to vůbec pro tento compiler ? díky moc

:arrow_right: administrator: přejmenováno z "Test LCD"

Je to pro kompiler avr-gcc.

V chybových řádcích je třeba přepsat
křížek (ascii 215) písmenem ‘x’
uvozovky (ascii 147,148) běžnými uvozovkami (ascii 34).

Zdravím
Bylo to tím ještě mi zbývá jeden
c:/winavr-20100110/lib/gcc/…/…/avr/include/util/delay.h:85:3: warning: #warning “F_CPU not defined for <util/delay.h>”
tam se domnívám že chybí definice na jaké rychlosti to bude běhat, ve schématu není žádný externí krystal tak se myslím že tam bude něco interního a z toho ale nepoznám frekvenci, tak jakou tam mám na definovat frekvenci? .Z PICků jsem navyklý jinak nastavovat jaký oscilátor použiji ale tady se to dělá pomocí fuse a přiznám se bez mučení že v tomto mám pěkný “hokej”.A ještě k tomu schématu mohu to tak přesně zapojit?díky za trpělivost.

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

Tady se tou definicí nenastavuje frekvence procesoru, je to jen informace pro překladač.
Project->Configuration Options->/vyplň políčko “Frequency”/. Pokud jsi s fuses nehýbal, je nastaven interní RC oscilátor 1MHz.

Tak to mám nechat tak ten interní RC oscilátor 1MHz.?.Hodlám to programovat s ponyprog2000 bodl by správně vyplněný Configuration and Security bits dialog abych to třeba proboha nezamkl díky moc.
Configurarion.JPG

Jelikož tam kromě lcd nic není, tak bude 1MHz stačit. Nech to jak to je.
Kdyby ses chtěl podívat na aktuální nastavení, klikni na “read”.

Oprava ten Configuration and Security bits dialog je nastavený takto dlouho se mi to nedařilo ten programátor po delší době oživit až nyní se podařilo přečíst Configuration and Security bits já se tímto za omyl dodatečně omlouvám tak co mám zatrhnout a co ne?díky.
Configurarion.JPG

Nech to tak.
Je nastavený interní osc. 1 MHz.

Zdravím
Tak jsem to konečně zapojil na nepájivém poli podle toho odkazu co jsem uvedl hned na začátku vlákna s výsledkem : napřed se na horním řádku objevovaly písmena nesmyslně až jednou jsem napřed zapojil displej a pak zapojil atmegu8-16 a začalo to fungovat na horním řádku se objevil nápis “Project” na dolním řádku se “project.irone.org” napřed se to posouvalo doprava až zmizel ten text na obou řádcích a potom se to posouvalo doleva ,
problém je v tom že další pokusy po zapnutí nevedly už výše zmíněnému výsledku

#include <avr/io.h>
#include <util/delay.h>
#define LCD_RS    0     //MCU pin connected to LCD RS
#define LCD_RW    1     //MCU pin connected to LCD R/W
#define LCD_E        2    //MCU pin connected to LCD E
#define LCD_D4    4    //MCU pin connected to LCD D3
#define LCD_D5    5    //MCU pin connected to LCD D4
#define LCD_D6    6    //MCU pin connected to LCD D5
#define LCD_D7    7    //MCU pin connected to LCD D6
#define LDP PORTD    //MCU port connected to LCD data pins
#define LCP PORTD    //MCU port connected to LCD control pins
//MCU direction register for port connected to LCD data pins
#define LDDR DDRD
//MCU direction register for port connected to LCD control pins
#define LCDR DDRD
#define LCD_CLR    0    //DB0: clear display
#define LCD_HOME    1    //DB1: return to home position
//Sends Char to LCD
void LCD_send_char(unsigned char ch)
{
LDP=(ch&0xf0);
LCP|=1<<LCD_RS;    //data
LCP|=1<<LCD_E;    //e1
_delay_ms(1);
LCP|=0<<LCD_E; //e0
_delay_ms(1);
LDP=((ch&0x0f)<<4);
LCP|=1<<LCD_RS;
LCP|=1<<LCD_E;
_delay_ms(1);
LCP|=0<<LCD_E;
_delay_ms(1);
}
//Sends Command to LCD
void LCD_send_command(unsigned char cmd)
{
LDP=(cmd&0xf0);
LCP|=0<<LCD_RS;
LCP|=1<<LCD_E;    //e0
_delay_ms(1);
LCP|=0<<LCD_E;    //e1
_delay_ms(1);
LDP=((cmd&0x0f)<<4);
LCP|=0<<LCD_RS;
LCP|=1<<LCD_E;
_delay_ms(1);
LCP|=0<<LCD_E;
_delay_ms(1);
}
void LCD_init(void) //Inisilaisasi LCD
{
_delay_ms(15);
LDP=0x00;
LCP=0x00;
LDDR|=1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4;
LCDR|=1<<LCD_E|1<<LCD_RW|1<<LCD_RS;
LCD_send_command(0x28); //4-bit 2-line 4×8
LCD_send_command(0x0c); //disply on, cursor off, bling off
LCD_send_command(0x06); //shift inc, unsivible
}
void LCD_string(char* str)
{unsigned char x=0;
while(str[x]!=0){_delay_ms(1);
LCD_send_char(str[x]);
x++;}
}
void delay_ms(int ms)
{    for(int i=0;i<ms;i++){
_delay_ms(1);};
}
int main (void)
{    delay_ms(200);
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++){
delay_ms(1000);
LCD_send_command(0x1c);
}
for(char j=0;j<16;j++){
delay_ms(1000);
LCD_send_command(0x18);
}
}
return(0);
}

překlad proběhl dobře až na toto

c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"

nemůže ten problém být tady?
a druhá věc která mě napadla nemám na tu atmegu připojit reset? sice ve schématu tam nic takového není díky.

reset tam samozrejme mit musis (pozor, je invertovany). anebo ho zakazat v programatoru (nejsem si ted jist, jak je to u mega8 a jestli to jde).

Ten reset = 1 pin přes odpor 1k připojit na +5V? díky.

Co s tím může být? dřív se mi aspoň zobrazovaly nějaké znaky na první řádce a teďka se mi při připojení jen na okamžik jen objeví na první řádce všechny body a pak zmizí, mám tam dát do toho ztrojáku definici toho kmitočtu mohlo to být tím?a jen pro upřesnění to napájení toho prosvíceni displeje jsem pro svou přehlednost nezapojil díky za pomoc.
zapojeni1.jpg
zapojeni.jpg

Definici toho kmitočtu dát musíš, počítá s tím funkce _delay_ms( ). Když to nezadáš podle kmitočtu co používá uProc., tak pak správně neproběhne inicializace pro LCD displej(chybné časování).
Takže pokud pouzíváš vnitřní osc. 1MHz, tak uprav program:

#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>

pozeram ze stale nemas zapojeny odpor na MCLR tj pin1 At megy…alebo mas ten pin zakazany v poistkach ?

Zdravím
Ten reset v tom schématu není zapojený, ale asi kdo to schéma nakreslil tak automaticky předpokládal že ho tam každý zapojí nemyslel na mně kterému to musí podávat polopaticky :smiley: tak že pin 1 zapojit přes odpor 1 k na +5V? jinak jestli to mám zakázaný to nevím která pojistka je na to určena u Atmegy8? moc díky,

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

Bohužel furt to nevede k tíženému výsledku co dělám spatně už jsem s toho zoufalý :blush: přemýšlím jestli to špatně nenahrávám do toho procesoru programuji takto:
File>Open program (Flash)File…díky za pomoc
ponyprog.JPG

Reset ani ISP si při ISP vypnout nemůžeš (znemožnil by sis programování), takže bez obav. Na anhrávání taky není co zkazit.
Je dobrý si do zapojení vždycky dávat ledku pokud je místo a v mainu s ní blikat. Poznáš tak, jesli jsi to naprogramoval, jesli procesor běží a můžeš odhadnout/změřit jak rychle.

Zkus v programu v mainu upravit hned první příkaz
“delay_ms(200);”
na “delay_ms(2000);”

Při překladu už žádný varování?

Už žádné varovaní není, ono se může stát že když proběhne programování a verifing v pořádku tak to nemusí znamenat že je to opravdu naprogramované ? taky mě zarazilo že při prvním programovaní toho procesoru tak že ten proces programování trval delší dobu ale jakmile jsem upravil ten stroják o #define F_CPU 1000000UL a po přeložením tak to programování trvá jen okamžik sice verifing trval i při prvním delší dobu programovaní a proběhne v pořádku nemám ten procesor napřed vymazat? díky moc za trpělivost

Nejde ani o to programování - od toho je verifikace, ale když máš blikající ledku, tak hned víš, jesli procesor třeba nevisí v resetu, jesli běží oscilátor a jak rychle.
Jinak definici F_CPU tam mít nemusíš když zadáš frekvenci v nastavení projektu. Překladač si to pak načete z toho nastavení. Na škodu to ovšem samozřejmě není.

Programátor mcu před programováním maže automaticky, to musí z principu funkce flash. Po prvotním vybrání souboru pro naprogramování už pak stačí jen tlačítko “reload” a “vrite program memory”.

Tu dobu v “delay()” už jsi prodloužil?

Zdravím
Ono se řekne dej si tam ledku ale jak ten program upravit aby ji obhospodařoval ?v asm na PIC to je jednoduché ale v Céčku a na atmege8,hoď sem nějaký kód na tu ledku předem dík, jinak po té úpravě té doby v mainu delay_ms(200) na delay_ms(2000) tak se prodloužila doba na 2.40 sekund po které svítí celý horní řádek displeje pak přestane před úpravou jen ten horní řádek jen probliknul.Jiná věc chci si postavit tuto zkušební desku mp222.wz.cz/ materiál mám už koupený akorát chystám se na tiščák je to dobrá volba? zase díky za trpělivost.