Atmega8 LCD funzt nicht

Hallo. Mit Atmega bin ich Anfänger, habe aber früher Z80 mit Assembler programmiert. Als erstes Project will ich eine LCD Anzeige einbinden. Der Atmega8 läuft mit ext. Quarz(12MHz). PortB Bit0-2 wird für RS;RW;E verwendet, PortD für die 8 Datenbits. Das Timing der Impulse kann ich mit einem Oszi anzeigen. Es scheint IO. Untenstehend das Programm ; .INCLUDE "m8def.inc" ; mit Portdeklaration .DEF akku = r16 ; Arbeitsregister .DEF zaehl_L = r17 ; Zähler Low .DEF Zaehl_H = r18 ; dto. High .Def Schl_Z = r19 ; Schleifenzähler

#define takt 12000000 #define ms2 takt/1500 #define ms18 takt/183 #define us120 takt/12000

;RS = B0;RW=B1;E=B2 ;Data über DPort .CSEG ; Programmsegment im Flash rjmp start ; RESET-Einsprung

.ORG $10 ; Interrupteinspruenge uebergangen ;*******************************************************************

start: ldi akku,LOW(RAMEND); Endadresse des SRAM out SPL,akku ; nach Stapelzeiger ldi akku,HIGH(RAMEND) out SPH,akku ldi akku,0b00000111 ; Die unteren 3 out DDRb,akku ; sind Steuerungs- Ausgang für LCD ser akku ; out DDRD,akku ; ist Ausgang für LCD Daten rcall LCDini

schlei: ldi schl_z,15 ; 15 x 'A' ausgeben sl2: ldi akku,'A' rcall dataus dec schl_z brne sl2 ; noch keine 15 ldi akku,$01 ; Display clear rcall komaus rcall w2 ldi akku,$02 ; Cursor home rcall komaus rcall w2 rjmp schlei ; und nochmal

;*******************************************************************

LCDini: rcall w18 ; 16 ms warten cbi portb,Pb2 ; E auf low cbi portB,Pb1 ; RW auf low, LCD liest cbi portB,Pb0 ; RS auf low, LCD auf Empfang ldi Akku,$30 ; INIT laut Datenblatt 3x rcall komaus ; 1. rcall w2 ; 3 x 2ms = 6ms warten rcall w2 rcall w2 rcall komaus ; 2. rcall u120 ; min 238 µs warten rcall komaus ; 3. ldi akku,$38 ; 8 bit 2 Zeilen rcall komaus ldi akku,$0e ; Display off rcall komaus ldi akku,$01 ; Display clear rcall komaus rcall w2 ldi akku,$07 ; Entry mode Set rcall komaus ldi akku,$02 ; Cursor home rcall komaus rcall w2 ldi akku,$0F ; Display on rcall komaus ret

;********************************************************************

komaus: rcall w2 ; 2ms warten cbi portb,Pb0 ; RS auf Low, LCD soll Kommandos lesen sbi portb,Pb2 ; E auf High cbi portb,Pb1 ; RW auf Low rcall w2 out portd,akku ; Daten ausgeben ; Hier muß noch 1 µsek gewartet werden. nop nop nop nop nop nop nop nop nop nop nop nop nop cbi portb,Pb2 ; E auf low, Kommando übernehmen ret

;******************************************************************** ; Über R16 werden die Daten ausgegeben dataus: rcall w2 ; 2ms warten sbi portb,pb0 ; RS high: Daten sbi portb,pb2 ; E high cbi portb,pb1 ; RW auf low, LCD soll lesen out portd,AKku ; Daten auf Port D nop nop nop nop nop nop nop nop nop nop nop nop nop nop cbi portb,pb2 ; E auf low. Daten übernehmen rcall w2 ret

;******************************************************************** ; Zeitverzoegerung

Warte: dec zaehl_L brne warte dec zaehl_H brne Warte pop zaehl_H ; Register zurück pop zaehl_L ret

;******************************************************************** ; 18 ms warten w18: push zaehl_L ; Register retten push zaehl_H ldi zaehl_L,low(ms18) ldi zaehl_h,high(ms18) rjmp warte

;******************************************************************** ; 2 ms warten w2: push zaehl_L ; Register retten push zaehl_H ldi zaehl_L,low(ms2) ldi zaehl_h,high(ms2) rjmp warte

;******************************************************************** ; ms warten u120: push zaehl_L ; Register retten push zaehl_H ldi zaehl_L,low(us120) ldi zaehl_h,high(us120) rjmp warte

;********************************************************************

Kann mir jemand auf die Sprünge helfen? Schließe ich die LCD Anzeige nur spannungsmäßig an, passiert nichts. Ist das richtig? Scließe ich die Ports komplett an, bleibt ebenfalls alles dunkel. Verwende AVR STudio und Ponyprog. Danke im voraus Klaus-Peter

Reply to
Klaus-Peter Preuss
Loading thread data ...

Klaus-Peter Preuss schrieb:

Welche LCD Anzeige ? Mit welchem Controller ? Und nein, ich habe den Code nicht durchgelesen ;-)

Die LCDs mit HD44780 zeigen eine Art "Testbild" d.h bei z.B. 4 zeiligem LCD eine Reihe/Balken hell,dann dunkel, hell, dunkel.

Schonmal am Kontrast gedreht ? Gruß Andy

Reply to
Andreas Weber

Hallo Andy. Danke für die schnelle Antwort. Ich wag es gar nicht zuzugeben. Der Kontrastregler muß ganz auf Anschlag gedreht werden, dann blinkt der Cursor. Habe zwar vorher schon dran gedreht, aber nie bis zum Anschlag. Schon ein kleiner Fortschritt. Sonst geht noch nichts. Da kann ich dann probieren. Ich habe zwei Anzeigen. Eine mit dem HD44780 und eine mit dem KS0070B. Von der Initialisierung und Ansteuerung sind sie gleich. Was mich stutzig machte, war, dass bei keiner was zu sehen war.

Vieln Dank Klaus-Peter

"Andreas Weber" schrieb im Newsbeitrag news:43b14c0e$0$26921$ snipped-for-privacy@newsread4.arcor-online.net...

das

Reply to
Klaus-Peter Preuss

Es sieht aus als läuft dir der stack weg. Du pushst 1 mal popst dann 2mal. Deshalb könnte auf dem oszi müll zu sehen sein. Versuchs mal mit einer blinkenden LED oder benutze einen Ausgang als trigger in dem momment in dem bestimmte daten anliegen sollen.

--
MFG Gernot
Reply to
Gernot Fink

Hallo Gernot.

Ist nicht so. Gepusht wird nur beim Aufruf der Verzögerungsschleife, je nach Verzögerung. Diese rufen 'Warte' auf, in der wieder gepopt wird. Scheint noch ein Wurm in der Datau zu sein, den das 'A' bekomme ich nicht auf die LCD. Lt. Simulator müßte es klappen. Wahrscheinlich ein Timingproblem.

Danke Klaus-Peter

"Gernot Fink" schrieb im Newsbeitrag news: snipped-for-privacy@individual.net...

Reply to
Klaus-Peter Preuss

Klaus-Peter Preuss schrieb:

Hallo Klaus,

mach hier mal ein $06. Das unterste Bit ist das SHIFT bit, das bedeutet deine AAAAs werden nach links rausgeschoben. Ich hab die Änderung auf $06 gemacht und mal simuliert, sieht dann mit hapsim so aus:

formatting link

Reply to
Andreas Weber

Halo NG, bin erst kürzlich über Hapsim gestolpert:

formatting link
Ist OpenSource und habe es eben das erste mal laufen lassen um Klaus-Peters Programm zu debuggen. Wäre doch sicherlich einen Eintrag in die FAQ wert, oder?

Gruß Andy

Reply to
Andreas Weber

Hallo Andy,

danke für die Hilfe. Habe das HAPSIM heruntergeladen nund werde es ausprobieren. Eine Anzeige ist inzwischen da, aber noch nicht so, wie ich mir das vorstelle. Da wird mir HAPSIM sicher helfen.

Ein neues Problem habe ich noch. Habe im DATASegment folgendes angelegt: .DSEG OK: .DB "Hallo World " mit ld zl,low(ok*2) ld zh,(high(ok*2) lpm r16,z+

will ich r16 mit dem Byte, auf das Z zeigt laden. Aber Pustekuchen. Habe auch in der Simulation Hyroglyphen.

Ich teste mal weiter, wenn Du etwas weißt ? bitte sehr.

Melde mich morgen wieder.

Klaus-Peter

"Andreas Weber" schrieb im Newsbeitrag news:43b1aa3a$0$26919$ snipped-for-privacy@newsread4.arcor-online.net...

Reply to
Klaus-Peter Preuss

Klaus-Peter Preuss schrieb:

Kommen nun die AAAAs ?

.CSEG OK: .DB "Hallo World "

dann mit:

ldi ZL,low(OK) ldi ZH,high(OK)

Z-Pointer laden und mit:

lpm r16,z+ rcall dataus

Zeichen raushauen. Keine Erklärung hier, selbst nachvollziehen (nur soviel: DSEG ist SRAM)

siehe oben. Und bitte ToFu abstellen. Man schreibt unter dem zitierten Text weiter. Ich programmiere übrigens schon seit 2 Jahren die AVRs NICHT mehr in Assembler sondern in C mit AVR-GCC

formatting link
Möchte auch nicht wirklich zurück, es sei denn es ist sehr zeitkritisch oder man hat mit dem Resourcen(Ram etc.) zu knapp kalkuliert. Gruß Andy

Reply to
Andreas Weber

Ich würde sowas in C machen, schon allein weil ich kein Atmega-Assembler kann ;)

Jedenfalls war mein erstes "Projekt" auch so eine Ansteuerung, die war in ca. 2h aufgesteckt und funktionstüchtig (allerdings mit #include oder so)...

guck Dir mal avr-gcc an, GNU-Software ist einfach gut ;-) und auf

formatting link
gibts nette Artikel über die AVRs

mfG

Reply to
Rieker Flaik

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.