Stránka 1 z 1
problémy s MikroPascal a LCD ATM1601A a GDM1602A
Napsal: 02 zář 2008, 15:20
od Ouch
Ahoj. Neporadil by mi nekdo s naprogramováním PIC16F88 pro LCD display ATM1601A, nebo GDM1602A. testoval jsem 4bit i 8bit verzi ale nechce to fungovat. Po zapnuti se tvari vse ok. Jde mi posouvat kurzor, blika atd. Nejde ale psat zadny znak ani retezec. Pomozte pls.
Program pro 4bit vypada takto:
Osccon := %01110110;
TrisA := 0;
TrisB := 0;
Delay_ms(500);
SetBit(PortA,3);
Delay_ms(500);
ClearBit(PortA,4);
Lcd_Config(PORTB,7,6,5,4,PORTA,2,0,3);
Delay_ms(1000);
Lcd_Cmd(LCD_BLINK_CURSOR_ON);
Delay_ms(2000);
Lcd_Out_cp('t');
Delay_ms(5000);
end.
Napsal: 02 zář 2008, 15:55
od mety
Prečo to tak komplikuješ?Veď sa to da aj jednoduchšie.V mikropascale je veľa príkladov,stači si len vybrať
napr:
program lcd_demo;
begin
Lcd_Init(PORTD); // Tu dosadiš port na ktorom maš LCD
Lcd_Cmd(LCD_CLEAR);
Lcd_Cmd(LCD_CURSOR_OFF);
Lcd_Out(2, 1, 'mikroElektronika'); //Tu napišeš text,ktory sa ma zapisať
end.
Napsal: 02 zář 2008, 16:36
od Ouch
jj, ale kdyz nemam PIC zapojeny podle toho jak vyzaduje standartní konfigurace tak potrebuju pouzit Lcd_Config. Ale pokud myslis ze tohle pomuze tak prekopu tu desku

. Zatim dik jdu to otestovat.
Napsal: 02 zář 2008, 16:59
od Ouch
Tak ani tohle nefunguje
program Display;
begin
Osccon := %01110110;
TrisA := 0;
TrisB := 0;
Delay_ms(500);
Lcd_Init(PORTB);
Lcd_Cmd(LCD_BLINK_CURSOR_ON);
Delay_ms(3000);
Lcd_Out(1, 1, 'text');
Delay_ms(5000);
end.
Nevim jestli to neni treba nejakym nastavenim, nebo treba spatnej typ displeje. Zapojeny by to melo byt dobre ale proste to nejde.
Napsal: 02 zář 2008, 19:19
od mikollar
skus vyvod R/W pripojit bud na PORTB,0 alebo natvrdo na - pol
Napsal: 03 zář 2008, 07:00
od Ouch
jj. Pin R/W mam pripojeny na Gnd ale nefunguje to. Trapim se s tim uz dost dlouho a fakt uz jsem bezradnej. Nemuze to byt treba nejaka chyba MikroPascalu? Testoval jsem ver.6 , ver.7 a nyni ver.8. Nebo treba ze pouzivam PIC16F88, nebo frekvence 8MHz vnitreni oscilator? Jinak vse slape protoze na pinech se hodnoty meni ale display vzdycky ma polovinu tmavou. Neukaze se zadne pismenko ani jinej znak. Display je 100% v poradku protoze je odzkouseny na jine aplikaci (ne ode mne). Mam jednoradkovej i dvouradkovej a oba se chovaji podobne.
Napsal: 03 zář 2008, 07:20
od mety
V mikropascale chyba neni,ja to použivam dosť často .
Skus toto:
program test;
var pozdrav: array[6] of char;
begin
TRISB := 0; // PORTB je výstupny
Lcd_Init(PORTB); //Inicializacia LCD
Lcd_Cmd(LCD_CURSOR_OFF); // Vypni kurzor
pozdrav := 'Ahoj';
Lcd_Out(1, 1, pozdrav); // Zapiš data na display
end.
Napsal: 03 zář 2008, 08:44
od Ouch
Tak tohle taky nefunguje. Zapojeni by melo byt spravne podle helpu v Mikropacalu. Jeste me napada jestli neni problem s tema displayema jestli nepouzit nejake jine druhy. Tohle je z GM jednoradkovej a na zadni strane ma ATM1601A v2.0, ten druhej je dvouradkovej a vzadu je napsano GDM1602A ver 2.0 . Nevim v cem by mel byt jinak problem. Fakt uz jsem testoval vsechny moznosti ale porad stejny vysledek. Treba by to slo s jinym PICem.?
Napsal: 03 zář 2008, 09:49
od Ouch
Tak se mi podarilo rozbehnou ten LCD dispaly ale s procesorem PIC16f877A po 8 bit komunikaci. Program je zde:
program Dispaly877A;
var pozdrav: array[6] of char;
begin
TRISB := 0;
TrisA := 0;
TrisC := 0;
TrisD := 0;
PortA := %00010000;
Lcd8_Config(PortC, PortD, 0,1,3,7,6,5,4,3,2,1,0);
Delay_ms(500);
PortA := %00000000;
LCD8_Cmd(LCD_CLEAR);
Lcd8_Cmd(LCD_CURSOR_OFF); // Vypni kurzor
pozdrav := 'Ahoj';
Lcd8_Out(1, 1, pozdrav); // Zapiš data na display
Lcd8_Out(2, 1, 'druha radka');
end.
ale dost by me zajimalo proc to nechodi s 16f88.
Prosim nenapada nekoho neco?
Docela by me to pomohlo.
Napsal: 03 zář 2008, 12:20
od mety
Mne to stale fungovalo,ja použivam procesory 16F877A
No ale na tvoju otozku prečo to nechodi z 16F88 nepoznam odpoveď

Napsal: 09 zář 2008, 13:37
od Ouch
Ahoj. Tak uz to chodi. Staci pridat do programu ANSEL := %00000000; a je to. Patrne nektere bity na portu A ovlivnuje AD prevodnik tak kdyby nekdo mel podobny problem tak tohle je reseni. Jinak diky za rady. Programek vypada nejak takhle:
program Display;
begin
Osccon := %01110110;
ANSEL := %00000000;
TrisA := 0;
TrisB := 0;
Delay_ms(500);
SetBit(PortA,3);
Delay_ms(500);
ClearBit(PortA,3);
Lcd_Init(PORTB); // Initialize LCD on PORTB
Lcd_Cmd(LCD_BLINK_CURSOR_ON); // Turn off cursor
Delay_ms(100);
Lcd_Out(1, 1, 'text'); // Print text at LCD
end.