ATmega48+Display HD44780 2x16 hjälp!

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

ATmega48+Display HD44780 2x16 hjälp!

Inlägg av jesse »

Håller på och programmerar en ATMega48 och ska ansluta den till en display som enligt uppgift är HD44780 kompatibel. Men jag har fastnat och vet inte vad jag ska göra nu. Displayen är stendöd (det enda som jag sett fungera är bakgrunds-LED).

Detta har hänt:

jag har testat att processorn fungerar och den går att programmera. Jag har också kollat timingen att klockan stämmer (8 Mhz nedskalat till 1 Mhz till CPU)

Jag har använtdenna info om displayen.

På grund av att jag kommer att ansluta många andra funktioner till processorn så använder jag olika portar för data och RS / E och använder mig av 4-bitars överföring.

Jag har kontrollerat att "rätt" ben på processorn går till "rätt" motsvarande ingång på displayen. Har även noga kontrollerat att matningspänningen är rätt ansluten till displayen enligt datablad. Har också varit noga tt ansluta oanvända ingångar (D0-D3 samt R/W) till GND. Jag har testat programmet både i simulator och testat att koppla bort displayen och köra programmet *långsamt* för att med lysdioder på utgången bekräfta att rätt signaler går fram. Jag kan inte finna något fel. Ändå är displayen stendöd.

Finns det något annat sätt att kolla att inte displayen är trasig?

Går det att köra 4-bitars mode på alla HD44780 kompatibla displayer eller kan det finnas undantag som måste matas med 8 bitar?

Här kommer även en länk till assemblerfilen. (varning : den innehåller mer än "bara" drivrutiner till displayen, dvs. kan vara ganska mycket att läsa, samt kanske inte så grymt bra kommenterad)


BL_MASTER.asm

ritning (jpg)

Så här har jag kopplat upp det hela:

Kod: Markera allt

PB0 IN Key sw2        PC0 UT disp D4     PD0 RXD - line
PB1 IN Key sw1        PC1 UT disp D5     PD1 TXD - line
PB2 UT sound          PC2 UT disp D6     PD2 NC
PB3 ISP - MOSI        PC3 UT disp D7     PD3 NC
PB4 UT disp RS / ISP  PC4 ADC4 – matn.sp PD4 NC
PB5 UT disp CLK / ISP PC5 NC             PD5 UT line/PC
PB6 XTAL              PC6 RESET          PD6 UT LED GRÖN
PB7 XTAL              PC7 ---            PD7 UT LED RÖD



Det enda jag inte har testat i nuläget är att lägga en negativ spänning på Vee (=kontrast). Enligt datablad ska det räcka med positiv. Har en 10K pot mellan 0 och +5V. Kan det verkligen vara så att det inte syns någonting om man inte har negativ spänning på kontrasten?

Bild

Det enda som inte finns på bilden är flatkabeln som ska gå mellan processor och display. Om någon undrar varför det är 16 stift istället för 14 på kretskortet så beror det på att de två nedersta ska gå till bakgrunds-LED.

hjälp!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Finns det något annat sätt att kolla att inte displayen är trasig?

Hittat ett känt fungerande LCD program och köra med.

> Går det att köra 4-bitars mode på alla HD44780 kompatibla displayer

Ja, annars är de inte "kompatibla"...

> den innehåller mer än "bara" drivrutiner till displayen,

Fixa det !
Banta ner det till en minimalt LCD pogram och få det att fungera *först* !

> samt kanske inte så grymt bra kommenterad

Fixa det också... :roll:
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

att programmet innehåller "mer" spelar ingen roll för mig, det är bara subrutiner som inte anropas i nuläget. Bara lite jobbigt för utomstående att hitta i djungeln kanske.

Jag kanske fixar lite mer kommentarer lite senare.

Finns det någon bra plats där det kan finnas programexempel?
Jag antar att jag måste göra om programmen en del (bl.a. vilka utgångar som används) för att det ska passa min koppling och ev. också för att passa just M48:an.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Inlägg av Swech »

Har kikat..
Din init rutin är skum
du kör "rcall bitut4" endast med de låga 4 bitarna i
initieringskommandon.... vad jag kan se..
därefter vid print text swappar du och kör ut hela 8 bitar i 2 steg...

tror att du missat att swappa och köra installationskommandon 2x4 bitar

Swech
laban12
Inlägg: 1199
Blev medlem: 17 april 2008, 16:01:56
Ort: Stockholm

Inlägg av laban12 »

Erfarenhetsmässigt så brukar jag alltid köra initieringskommandona till displayer två gånger efter varandra, och med onödigt långa E pulser.
Samt inleda med en sekunds delay i programmet så alla spänningar hinner sätta sig.

Inte för att jag har direkt dåliga erfarenheter av LCD:er men just initieringen kan stöka ibland.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

du kör "rcall bitut4" endast med de låga 4 bitarna
jo, det var meningen då jag först kör ut 0011 (4 bitar) och sedan 0011 igen (4 bitar) ... annars hade det ju blivit 0000 0011 + 0000 0011 och så skulle det väl inte vara?

Jag väntar också 1 sek innan jag startar (blinkar med LED för att indikera start/reset)
Senast redigerad av jesse 11 juni 2008, 18:44:45, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> att programmet innehåller "mer" spelar ingen roll för mig,...

OK, jag missförstog dig. Jag trodde att du ville att
någon annan skulle kolla på koden... Ber om ursäkt. :-)

> Finns det någon bra plats där det kan finnas programexempel?

Detta är i och för sig inte till AVR, men det kanske kan vara
till någon ledning:

http://www.jescab.se/HD44780.html

Du kan kolla koden direkt efter labeln "lcd_init_hd44780"...
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Jag hittade en ledtråd i ett program som jag hittade:

Kod: Markera allt

reset:
	ldi	temp, low(RAMEND)
	out	SPL, temp
	ldi	temp, high(RAMEND)
	out	SPH, temp

;LCD after power-up: ("*" means black bar)
;|****************|
;|		  |

	rcall	LCD_init
	
;LCD now:
;|&		  | (&: cursor, blinking)
;|		  |
Den här koden antyder att en oinitierad display visar en svart rad på första raden. Min display visar ingenting, oavsett om jag initierar eller inte.

Visar alla displayer en svart rad vid start om den inte initialiseras? I så fall utgår jag från att min display är trasig eftersom den inte visar något alls. Kan detta bekräftas eller dementeras av er som brukar jubba med sådana här displayer?
laban12
Inlägg: 1199
Blev medlem: 17 april 2008, 16:01:56
Ort: Stockholm

Inlägg av laban12 »

Jag ser ofta den svarta raden... men att säga "alltid" vågar jag inte.
Den ses bara om kontrasten är ställd på hög oxå, vid låg kontrast syns den inte.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> I så fall utgår jag från att min display är trasig

Eller att kontrasten är feljusterad.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

ursäkta Sodjan. Jag har rensat lite skräp och skrivit lite bättre kommentarer. Det "extra" som finns i programmet begränsar sig till en timer som blinkar en lysdiod vid reset samt vid programslut.

Jag kan inte se att de exempel jag jämför med skiljer sig i funktion mot min version... börjar luta åt trasig display eller dålig flatkabel --- kanske ska mäta signalerna även på displayen och inte bara på processorns utgångar så att jag kan utesluta kontaktproblem.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Om jag har en 10k pot mellan 0v och +5v borde väl något synas om jag vrider den hela vägen?
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

** måste åka och hämta min dotter nu. vi hörs.**
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Om jag har en 10k pot mellan 0v och +5v borde väl något synas om jag vrider den hela vägen?

Ja, om det är en standard-temp-range LCD.
Nej/kanske, om det är en extended-temp-range LCD.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Har äntligen vari nere i min verkstad igår och lade på en negativ spänning. Och - TJOHOO - Jag kan se texten! (Jobbigt att det ska gå flera dar mellan varje gång jag får tid att komma dit!)

den behöver en spänning mellan -3,3 och -4.1 volt ungefär. -3.3 gav en del bortfall vid horisontella streck mdans -4.1 skapade nya lodräta streck där de inte skulle finnas. Gränsen däremellan var hårfin.

Tach för hjälpen, alla. Så simpelt, ändå trodde jag i det längsta att det skulle synas något om jag använde en positiv spänning - men icke! Det var väl enbart min lathet/dumhet som gjorde att jag int lade dit en negativ spänning med en gång... :wall:

Vem som vill får gärna använda programsnutten ovan. (den riskerar iofs att försvinna inom någon månad)
Skriv svar