20x4 LCD an MyAVR Board anbinden

OP #4577682
Lesenswert?

Hallo Forum,

ich habe mir ein 2004 LCD 20X4 Zeichen HD44780 zugelegt. Da ich noch ein 
altes MyAVR Board (aus Schulzeiten) mit einem Atmega8 habe, dachte ich 
mir diesen einfach mittels Atmel Studio 6 anzubinden. Doch da fangen die 
Probleme schon an, da meine Programmierkenntnisse solala sind.

Ich hatte mir schon ein paar libs und Anleitungen dazu angeschaut, aber 
irgendwie bekomme ich das LCD nicht eingebunden. (ehrlich gesagt bin ich 
mir auch nicht sicher was ich da alles einbinden muss, da wir damals 
kaum mit  dem Board gearbeitet hatten bzw ein LCD noch nie benutzt 
hatten). Das LCD wollte ich im 4Bit-Modi betreiben mit den 
Datenleitungen DB4-DB7 betreiben.

Hat jemand eine Idee wie ich es vernünftig einbinde (gibt es da schon 
etwas)???
Hatte auch erst mal vor, nur was kleines Textmäßiges und was kleines mit 
Timern auszugeben. vllt ein kleines Beispiel Programm damit ich mich da 
auch mal rein arbeiten kann. Um Hilfe für den kleinen Anfänger wäre ich 
sehr verbunden.

Vielen Dank schon mal im voraus
OP #4578349
Lesenswert?

Im Anhang ist das was ich mir jetzt zusammen gestellt habe. Vllt kann da 
ja jemand mal rein schauen und sagen was mir da fehlt oder was zu viel 
ist. habs versucht zu überspielen, das ging auch, jedoch zeigt das LCD 
immer noch die zwei weißen Balken an, so viel wie ich hier gehört habe 
müsste das ja heißen das es noch nicht initialisiert wurde.

Pin Belegung habe ich wie folgt:
 RS an PortB 4
 RW an GND
 E  an PortB 5
 D0-D3 ist nicht belegt
 D4-D7 an PortB 0-3
Angehängte Dateien:
Gast #4578369
Lesenswert?

Tobi G. schrieb:
> habs versucht zu überspielen, das ging auch, jedoch zeigt das LCD
> immer noch die zwei weißen Balken an, so viel wie ich hier gehört habe
> müsste das ja heißen das es noch nicht initialisiert wurde.

Es kann auch sein, dass das an deiner Beschaltung liegt.
In deiner Pin-Belegungsliste fehlen die Versorgungsspannung und VEE.
Gast #4578935
Lesenswert?

der code scheint ok zu sein.

Kontrast stimmt?

kleines Testprogramm für die i/o schreiben und mit einem Multimeter die 
Verdrahtung prüfen und mit lcd.h abgleichen:

lcd_init();
for(i=0;i<6;i++){
PORTB|=i<<1;
_delay_ms(2000);
PORTB&=~(i<<1);
}
Gast #4579081
Lesenswert?

Also das mit dem Kontrast müsste stimmen, damit hebe ich ja auch nur die 
Zeilen hervor

Habe auch schon mehrfach versucht in der main was zu schreiben und paar 
Befehle einzusetzen, aber über die Balken auf dem Display komme ich 
nicht hinaus, aber ich denke es wird einfach nicht initialisert.

Hat denn keiner ein anderes fertiges Programm mit .c und .h datei für 
ein 4x20 Zeilen Display, dann könnte ich vllt mal vergleichen was das 
nicht stimmt

So langsam verzweifel ich mit dem dingen hier :D es wird wahrscheinlich 
ein kleiner Fehler sein aber ich bin halt zu doof um den zu finden, weil 
ich mich auch nicht so gut auskenne

MfG
#4579103
Lesenswert?

Nicht so ungeduldig. Wenn Du auf die Rückseite des Displays schaust, 
solltest Du zwei Controller erkennen können. Typischerweise werden 20x4 
nämlich nicht nur mit einem Controller angesteuert.
Aber ich kenne das Display nicht, daher ist das nur eine Vermutung.

Wenn Du in das Datenblatt des LCD schaust, wirst Du die Initialisierung 
dort finden, eventuell sind die Timings falsch.

Überprüfe mal das hier aus der lcd.h gegen das Datenblatt:
#define LCD_BOOTUP_MS           15
#define LCD_ENABLE_US           20
#define LCD_WRITEDATA_US        46
#define LCD_COMMAND_US          42

#define LCD_SOFT_RESET_MS1      5
#define LCD_SOFT_RESET_MS2      1
#define LCD_SOFT_RESET_MS3      1
#define LCD_SET_4BITMODE_MS     5

#define LCD_CLEAR_DISPLAY_MS    2
#define LCD_CURSOR_HOME_MS      2

Gibt es Compiler-Warnungen?
Gast #4579328
Lesenswert?

@ Pete

habe dieses Display gekauft. Leider aber kein Datenblatt dabei.
2004 LCD blue Display Anzeigen 20X4 Zeichen 5V mit HD44780 CP02009 von 
ebay
Bei Datenblättern aus dem inet fand ich aber keine wirklichen Timings 
bzw nur das mit dem display is clear hab ich da gesehen.

Warnungen habe ich beim überspielen nicht erhalten

@Udo

wie grundschüler schon sagt Hat der Atmega8 nicht so viele. PortB0-5
Gast #4579342
Lesenswert?

Macht das überhaupt ein Unterschied Udo?
habs an PortD muss aber Bei PortD 2-5 die Datenleitungen 
anschließen.(0-1 sind glaube ich schon vom Board selber belegt) 6 an RS 
und 7 an E


jetzt habe ich auf dem Display alle 4 Zeilen dargestellt bzw mit einem 
weißen Balken belegt
Gast #4579408
Lesenswert?

@TO

Hast du den richtigen CPU Takt eingestellt? Lasse mal eine LED in 1s 
Takt blinken.

Werden die Ports richtig angesteuert?
--> Debugmodus und die Initialisierungsroutine mal durchgehen.

Ich bin kein Freund von Arduino. Aber irgendwo tief im Schrank liegt bei 
mir einer. Manchmal können Kleinigkeiten Tage in Anspruch nehmen.
Gast #4579425
Lesenswert?

Hi Udo

ehm habe nur Atmel Studio 6.2 mit dem ich programmiere.

@aSma CPU von 3686400 stimmt Led hab ich noch nicht probiert weil ich ja 
sonst nix sehe  mit dem debuggen muss ich mal schauen.

ich häts vllt besser mit Arduino gemacht :P ;D da findet man viel ;D
#4579444
Lesenswert?

Hab gerade mit meinem alten "myAVRBoard mit LCD-Display" am LPT-Port 
herumgespielt und bemerkt, dass das Prog. erst nach dem Brennen läuft 
und auf dem LCD eine Anzeige erscheint, wenn das LPT-Kabel abgezogen 
ist.
Ich häng mal einfach was an: LCD1.asm und die Hex dazu. Ist zwar in 
Assembler, sollte auch in deinem Studio laufen. Sonst einfach mal die 
Hex brennen. Good luck!

MfG Udo
Angehängte Dateien:
Gast #4579523
Lesenswert?

Wenn du an den Routinen nichts verändert hast, ist es unwahrscheinlich 
dass der Fehler daran liegt. Ob du Port B, c oder D verwendest, ist 
völlig egal. Mit der oben dargestellten Test-Routine kannst du zum einen 
das Pinout überprüfen, zum anderen merkst du, ob der CPU-Takt stimmt.
OP #4591697
Lesenswert?

Hallo Liebe Leutsss,

Nochmals Vielen Dank für ALLE die mich bei meinem Problem unterstützt 
haben.
Den genauen Fehler werde ich wohl nicht erfahren. Habe eure Vorschläge 
getestet und nachgeschaut.

Nach dem gefühlten 1000 Test Tag hatte ich den Mikrocontroller 
angeschlossen und auf einmal gab er meinen Text aus^^. Im Programm wurde 
nichts geändert, komisch das er dann auf einmal ging(ob das an 
irgendwelchen Zeiten lag kaaa). Das war mir dann auch egal die Freude 
hat gesiegt....

Jetzt hab ich schon ein bisschen rum gespielt, paar Texte ausgegeben und 
verschoben. Jetzt hätte ich trotzdem noch ne Frage. Wie sieht denn der 
Befehl aus wenn ich eine Zahl in meiner main ausgeben möchte, das hatte 
ich auch schon probiert jedoch bekomme ich immer ne Fehlermeldung....too 
few arguments... irgendwas scheint zu fehlen :P.

Ich hatte mir vorgestellt, etwas auf dem Display zu zählen. Mit ner LED 
hab ich das schon getestet.

Einfallende Signale möchte ich zählen(counts = counts + 1;) und das dann 
auf dem Display hochzählen lassen..
Kann ich den Befehl einfach in das lcd_number(); übernehmen oder kann 
ich dem nur zahlen vorgeben??? Das versteh ich nicht so ganz

Mit freundlichen Grüßen
topps

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren