Erledigt: Ein Dummy hat eine Frage

Status
Für weitere Antworten geschlossen.

atmegafreak

Neues Mitglied
14. Sep. 2012
7
0
0
60
Sprachen
  1. ANSI C
Ich versuche gerade ein 44780 kompatibles LCD 2x16 im 4-bit Modus über ein ATmega8 anzusteuern. Die Datenbits am LCD (D4-D7) sind am PORTD.4 - PORTD.7 des μC und die Kontrollpins E, RW und RS ebenfalls auf die noch freien Pins am PORTD verbunden. Die Aufteilung eines Byte in High und Low Nibble in C ist kein Problem. Die Frage ist aber, wie übermittle ich ein Byte bzw. diese Nibbles? Pseudocode genügt.

Ich habe auf mal wieder ein LCD am Atmega8 etwas gefunden und taugt der folgende Ablauf? Falls ja, werde ich diesen Assembler Code in C umschreiben.

LCD_init:
;**** for the most LCD you must write 3times a dummy command before you change to 4Bit***


ldi temp, 0b00001110 ;control lines are output, rest is input
out DDRD, temp

rcall LCD_delay ;first, we'll tell the LCD that we want to use it
ldi arg, 0x20 ;in 4-bit mode.
rcall LCD_command8 ;LCD is still in 8-BIT MODE while writing this command!!!

rcall LCD_delay
ldi arg, 0x20 ;NOW: 2 lines, 5*7 font, 4-BIT MODE! ** DUMMY ***
rcall LCD_command ;

rcall LCD_wait
ldi arg, 0x20 ;NOW: 2 lines, 5*7 font, 4-BIT MODE! ** DUMMY ***
rcall LCD_command ;

rcall LCD_wait
ldi arg, 0x28 ;NOW: 2 lines, 5*7 font, 4-BIT MODE! ** this change to 4bit 2 lines **
rcall LCD_command ;after this point you don't can change anything 'show HD44780 Datasheet'

Wenn der Ablauf klar ist, werde ich mich an die Initialisierung machen!
 
Hallo,

schau dir am besten einmal eine bereits fertige C-Lösung für den 44780 LCD-Controller an. Hier findest zum Beispiel eine von den Kollegen bei mikrocontroller.net. Dies hilft dir bestimmt weiter.

Dirk :ciao:
 
Danke für den Hinweis. Ich musste in der Header-Datei wenige Pins anpassen aber auch wenn ich nur die init() aufrufe, tut sich nichts resp. die schwarzen Balken in der ersten Zeile bleiben sichtbar. An der Verbindung sollte es nicht liegen, da mit avrdude -c usbtiny -p atmega8 sowohl der Programmer wie auch der Chip richtig erkannt werden.
 
Ich gehe nach dem Buch von Dr. G. Spanner "AVR-Mikrocontroller in C programmieren" vor und verwende den auf Seite 160 f. abgebildeten Code resp. Datei LCD_display.h. Irgendwas scheint in dieser Header-Datei zu fehlen. Wenn ich zum Beispiel den String "Hallo Welt!" and die Methode lcd_write() übermittle, geschieht überhaupt nichts. Wenn ich aber den USB-Stecker rausziehe und wieder einstecke, kann ich den Text sehen. Da ich ein 4x20 Display bereits zum Laufen gebracht habe, werde dort mal nachsehen ob die Control-Bits beim 2x16 Display alles ok ist.
 
Vom Buch ""AVR-Mikrocontroller in C programmieren" hätte ich schon etwas mehr Sorgfalt erwartet. Eine Header- und eine C-Datei zu liefern, statt alles in einem File zu verwursteln, bedeutet kein grosser Mehraufwand. Egal, den 2x16 LCD kann ich nun erfolgreich ansprechen und werde mich nun an die Code-Optimierungen machen.
 
Ich habe jetzt den Code in eine Header- und eine C-Datei aufgeteilt und das Display läuft ausgezeichnet. Es geht nun weiter mit einem Flachkabel.
 
Status
Für weitere Antworten geschlossen.

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)