at mega32 LCD-Problem HD 44780

Gast #896384
Lesenswert?
• ▲
▼
Hallo,
erst mal ein Danke vorweg für alle, die sich mit meinem Post 
beschäftigen.

Folgende Hardware habe ich hier:
- ein at mega32, 1 MHz Takt
- ein LCD-Modul 2x16 mit HD 44780 Kontroller (EA DIP162-D)

Angeschlossen ist das Display an PortB.

PB0  RS
PB1  R/W
PB2  E

PB4  D4(D0 für 4 Bit Modus)
PB5  D5(D1 für 4 Bit Modus)
PB6  D6(D2 für 4 Bit Modus)
PB7  D7(D3 für 4 Bit Modus)


Die Hardware ist ausgiebig getestet und zu 100% funktionsfähig.

Jetzt zu meinem Problem. Ich sitze schon seit 5 Tagen dran und hab es 
noch nicht geschafft
kontrolliert ein Zeichen auf dem Display darzustellen.
Irgendwas mache ich wohl falsch aber ich komm nicht drauf.
Das Tutorial habe ich auch von oben bis unten durch gearbeitet,
hat mich aber nicht weiter gebracht.

Ich poste hier mal 3 Versuche von mir, vielleicht kann mir irgendwer 
weiterhelfen.

Danke
anemby
Angehängte Dateien:
Gast #896456
Lesenswert?
• ▲
▼
Mal so ganz auf die schnelle:
Du scheinst WinAVR zu nutzen. Warum nimmst du nicht einfach das Beispiel 
stdiodemo aus der WinAVR installation? Dort gibt es sehr gut 
struturiertes 4-Bit LCD Programm, dass auch schon funktioniert und 
dokumentiert ist.

Bei div. LCD gibt es trotz gleichen Controllers unterschiedliches 
Verhalten, wenn man in der SW mit dem Timing "pfuscht". Das ist in dem 
Beispiel schon bereinigt und geht auch mit "langsamen" Displays.

Nichts und niemand nimmt dir die Möglichkeit, dann noch deine weitere SW 
zu entwickeln, aber LCDs sind schon soooooooo oft der Stein des 
Anstosses gewesen, dass die eigene SW-Entwicklung nicht mehr lohnt.
#896634
Lesenswert?
• ▲
▼
Hallo,

ich bezweifle, dass jemand hier die Geduld hat, alle 3 von dir 
hochgeladenen Versionen durchzuackern. Tipp fürs nächste Mal: beschränke 
dich auf eine C-Datei, und lade sie auch in .c hoch, dann wird es auch 
vom Forum angezeigt und man muss nicht runterladen und entpacken.

Was mir beim 1. Blick so auffällt: Du hast die Datenleitungen des LCDs 
auf die oberen 4 bit des Ports gehängt. Die meisten LCD-Funktionen 
inklusive das Tutorium hier auf der Seite verwenden dazu aber die 
unteren Portbits. Falls du trotzdem die oberen Bits verwenden willst, 
musst du die Daten bei der entsprechenden Funktion 4 bit nach links 
schieben.

Aus deiner "LCDsteuerung.c":
1
void lcd_data(unsigned char temp1)
2
{
3
  unsigned char temp2=temp1;
4

5
  LCD_PORT |= (1<<LCD_RS);
6

7
  temp1=temp1 >> 4;
8
  temp1=temp1 & 0x0F;
9
  LCD_PORT &= 0xF0;
10
  LCD_PORT |= temp1;
11
  lcd_enable();
12

13
  temp2=temp2 & 0x0F;
14
  LCD_PORT &= 0xF0;
15
  LCD_PORT |= temp2;
16
  lcd_enable();
17

18
  _delay_us(42);
19
}

Korrekt für deine Belegung wäre sowas:
1
void lcd_data(unsigned char temp1)
2
{
3
  unsigned char temp2=temp1;
4

5
  LCD_PORT |= (1<<LCD_RS);
6

7
  temp1=temp1 & 0xF0;
8
  LCD_PORT &= 0x0F;
9
  LCD_PORT |= temp1;
10
  lcd_enable();
11

12
  temp2=temp2 << 4;
13
  LCD_PORT &= 0x0F;
14
  LCD_PORT |= temp2;
15
  lcd_enable();
16

17
  _delay_us(42);
18
}

Oder du machst dir das Leben einfach und hängst die Datenbits auf die 
Portbits 0-3.

Gruß,
David

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.