 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
primozb2005 Član


Pridružen-a: Pon 12 Dec 2005 23:20 Prispevkov: 59 Aktiv.: 0.25 Kraj: vransko-ljubljana
|
Objavljeno: Tor Okt 23, 2007 10:23 pm Naslov sporočila: 16f877a lcd |
|
|
Zdravo
Ucim se programirati s pomocjo microC-ja. Imam plosco easypic2,vendar imam probleme pri prikazovanju vrednosti in znakov na lcd displeju. Osvetljene imam vse okvirje v prvi vrstici. Kodo sem ze preveril, preveril sem tudi povezave na lcd display:
Na lcd nimam priključene osvetljitve, kontrast pa lahko spreminjam.
Coda:
char *TEXT = "USPELO";
void main() {
TRISB=0;
Lcd_Init(&PORTB);
lcd_Cmd(Lcd_CLEAR);
Lcd_Cmd(Lcd_CURSOR_OFF);
Lcd_Out(1, 1, text);
}//~!
Kje je se lahko napaka?
|
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Tor Okt 23, 2007 11:51 pm Naslov sporočila: |
|
|
Težava, ki jo opisuješ je značilna za neinicializiran LCD.... oziroma do njega ni prišlo nič pametnega.
Kako imaš povezan LCD na PIC in ali je inicializacija PICa OK?
|
|
Nazaj na vrh |
|
 |
primozb2005 Član


Pridružen-a: Pon 12 Dec 2005 23:20 Prispevkov: 59 Aktiv.: 0.25 Kraj: vransko-ljubljana
|
Objavljeno: Sre Okt 24, 2007 7:50 am Naslov sporočila: |
|
|
inicializacijo izvedem z:
Lcd_Init(&PORTB);
vezava lcd je v prilogi
Opis: |
|
Velikost datoteke: |
34.62 KB |
Pogledana: |
27 krat |

|
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Sre Okt 24, 2007 10:10 am Naslov sporočila: |
|
|
Hitrost izvajanja programa zelo zmanjšaj (manjši kristal ali še bolje zunanji nastavljiv oscilator ranga frekvence nekaj kHz). To LCDja nič moti. S tem pa se izogneš čudnim pojavom na linijah. Upam, da nimaš predolgih žic in da je masa med PICem in LCDjem povezana skupaj.
Potem pa z osciloskopom ali multimetrom poglej, kaj se dogaja na dotičnih pinih porta B. Za lažje delo naredi zanko (repeat ali loop) in kompletno to kodo, ki si jo navedel tu, ponavljaš v neskončnost.
Če ne gre, poglej če ti prevajalnik naredi .ASM datoteko in jo odpri v MPLAB-u in tam poženi simulator tvojega procesorčka. In gledaš pine PORTB, kaj se dogaja na njih.
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Okt 24, 2007 12:06 pm Naslov sporočila: |
|
|
Mozno je, da se koda, ki se skriva za Lcd_Init(&PORTB) izvede prehitro. LCDju pošlješ en znak, ali spremeniš vrednost signala na pinu in za tem MORAŠ čakati določen čas predpisan v datasheetu, da procesor od LCDja prežveči signal. Načeloma to pomeni tudi, da LCD deluje, potem pa daš hitrejši kristal (quartz), pa vse skupaj ne dela več.
Jur
|
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.06 Kraj: Divača (Kačiče)
|
Objavljeno: Sre Okt 24, 2007 12:39 pm Naslov sporočila: |
|
|
jur je napisal/a: |
Mozno je, da se koda, ki se skriva za Lcd_Init(&PORTB) izvede prehitro. LCDju pošlješ en znak, ali spremeniš vrednost signala na pinu in za tem MORAŠ čakati določen čas predpisan v datasheetu, da procesor od LCDja prežveči signal. Načeloma to pomeni tudi, da LCD deluje, potem pa daš hitrejši kristal (quartz), pa vse skupaj ne dela več. |
Opisan primer je najpogostejša napaka pri krmiljenju LCD-jev, ki povzroči največ izgubljenih ur.
_________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
primozb2005 Član


Pridružen-a: Pon 12 Dec 2005 23:20 Prispevkov: 59 Aktiv.: 0.25 Kraj: vransko-ljubljana
|
Objavljeno: Sre Okt 24, 2007 12:47 pm Naslov sporočila: |
|
|
Bom na dodal še zakasnitev:
Delay_ms(1000);
ena sekunda mislim da bo dovolj......bom poskusil sporočil rezultate.
Hvala za namige.
lp
|
|
Nazaj na vrh |
|
 |
primozb2005 Član


Pridružen-a: Pon 12 Dec 2005 23:20 Prispevkov: 59 Aktiv.: 0.25 Kraj: vransko-ljubljana
|
Objavljeno: Sre Okt 24, 2007 9:07 pm Naslov sporočila: |
|
|
void main() {
CMCON = 0x07;
Lcd_Config(&PORTB,2,3,0,7,6,5,4);
Lcd_Cmd(Lcd_CLEAR);
Lcd_Cmd(Lcd_CURSOR_OFF);
Lcd_Out(1, 1, "MikroE");
Delay_ms(1000);
}
dodal sem zakasnitev, vendar nobene spremembe.Vezavo sem še enkrat pregledal in vse je uredu.
Uporabljam pa tale display: pvc160203p
Oscilator sem uporabil 4MHz
????
|
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Sre Okt 24, 2007 10:05 pm Naslov sporočila: |
|
|
V tej drugi kodi ti takole na oko, manjka LCDInit
|
|
Nazaj na vrh |
|
 |
gregorino Član

Pridružen-a: Tor 15 Jun 2004 22:35 Prispevkov: 10 Aktiv.: 0.04 Kraj: Ptuj
|
Objavljeno: Sre Okt 24, 2007 10:39 pm Naslov sporočila: |
|
|
Koda: |
char *text = "mikroElektronika";
void main() {
TRISB = 0; // PORTB is output
Lcd_Init(&PORTB); // Initialize LCD connected to PORTB
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off
Lcd_Out(1, 1, text); // Print text to LCD, 2nd row, 1st column
}//~! |
Zgoraj imaš napisan program iz mokroC-jeve pomoči, ki je podan kot primer. Vezava je enaka kot na sliki, ki si jo podal.
|
|
Nazaj na vrh |
|
 |
primozb2005 Član


Pridružen-a: Pon 12 Dec 2005 23:20 Prispevkov: 59 Aktiv.: 0.25 Kraj: vransko-ljubljana
|
Objavljeno: Čet Okt 25, 2007 7:55 am Naslov sporočila: |
|
|
Hvala,tudi ta primer iz primera sem preizkusil, vendar brez uspeha. Mislim da je napaka v lcd-ju, saj mislim da ne deluje v 4 bitnem načinu. Bom šel kupiti lcd, kakršnega priporočajo pri mikroelektroniki, saj je configuracija izdelana za lcd z hitachi HD44780modulom.
lp
|
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.94 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Čet Okt 25, 2007 10:07 am Naslov sporočila: |
|
|
Si pustil reset mikrokontrolerja v zraku kot na shemi?
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Čet Okt 25, 2007 3:28 pm Naslov sporočila: |
|
|
Lcd_Config(&PORTB,2,3,0,7,6,5,4);
Lcd_Cmd(Lcd_CLEAR);
Lcd_Cmd(Lcd_CURSOR_OFF);
Lcd_Out(1, 1, "MikroE");
Delay_ms(1000);
Tole seveda nima smisla. Zakasnitev na LCDju je potrebno za vsako operacijo posebej, ne samo na koncu:
Lcd_Config(&PORTB,2,3,0,7,6,5,4);
Delay_ms(1000);
Lcd_Cmd(Lcd_CLEAR);
Delay_ms(1000);
Lcd_Cmd(Lcd_CURSOR_OFF);
Delay_ms(1000);
Lcd_Out(1, 1, "MikroE");
Delay_ms(1000);
Načeloma je možno, da imajo zgoraj navedene procedure že vgrajeno zakasnitev (ne vem), pa posebna zakasnitev ni potrebna.
Pri programiranju v assemblerju pa je pri vsaki manupulaciji z LCDjem potrebno čakati.
Jur
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Čet Okt 25, 2007 4:26 pm Naslov sporočila: |
|
|
Za vsakim ukazom dodaj še en blink neke LEDice, da vidiš, če se program sploh izvaja. Z osciloskopom ali kakšnim drugim orodjem si pregledal signale?
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
primozb2005 Član


Pridružen-a: Pon 12 Dec 2005 23:20 Prispevkov: 59 Aktiv.: 0.25 Kraj: vransko-ljubljana
|
Objavljeno: Pet Okt 26, 2007 9:07 am Naslov sporočila: |
|
|
USPELO...
Zamenjal sem lcd displaj in sedaj dela. Mislim da je bila napaka, da lcd display ni podpiral 4 bitne priključitve.
Hvala vam za nasvete.
lp Primož
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|