ATmega8 + LCD-Probleme

Gast #3361454
Lesenswert?

Als ob die schon vorhandenen Threats nicht ausreichen würden -.-

Auf jeden Fall: Problem mit der Darstellung auf einem HD44780-bestückten 
LCD im Verbund mit ATmega8. Verwendet wird der Header lcd-routines.h.
Poti ist korrekt angeschlossen, Alle Kästchen können von komlett aus bis 
sehr gut erkennbar manipuliert werden.
Gearbeitet wird mit PORTD, PD0...PD3 für die oberen Datenbits. PD5 für 
RS, PD6 für EN.
Zusätzlich ist ein kleiner Resistor für die Hintergrundbeleuchtung 
integriert.
Problem: Kann keine Zeichen darstellen - absolut nichts zu sehen!
1
#define F_CPU 8000000
2
#include <avr/io.h>
3
#include "lcd-routines.h"
4

5

6

7
int main(void)
8
{
9
  
10
  lcd_init();          // Initialisierung des LCD
11
  lcd_clear();        // LCD löschen
12
  
13
  lcd_home();    
14
  
15
  lcd_string("Hallo Welt");
16
  
17
  lcd_setcursor( 1, 2 );    //  2te Zeile, 1.Zeichen setzen
18
  
19
  lcd_string("Test");
20
  
21

22
return 0;
23
}

die .c-Datei in Makefile implementiert, die Zugriffszeiten sind mit dem 
Datenblatt verglichen. Das LC-Display ist erst vor Kurzem gekauft 
worden...

Irgendwer irgendwelche Ideen?
Gast #3361572
Lesenswert?

Boon schrieb:
> return 0;


Das sollte da besser nicht stehen ;)
mein() darf nicht verlassen werden, sonst treibt dein µC irgendwas.
Möglicherweise rennt er durch den leeren Speicherbereich und fängt 
main() wieder von vorne an --> Display wird dauernd gelöscht so dass man 
nichts erkennt.

Versuchs mal so:

int main(void)
{

  lcd_init();          // Initialisierung des LCD
  lcd_clear();        // LCD löschen

  lcd_home();

  lcd_string("Hallo Welt");

  lcd_setcursor( 1, 2 );    //  2te Zeile, 1.Zeichen setzen

  lcd_string("Test");

while(1)    // Endlosschleife wird nie verlassen
{
    ;
}

}
Gast #3361579
Lesenswert?

Chris schrieb:
> Das sollte da besser nicht stehen ;)
> mein() darf nicht verlassen werden, sonst treibt dein µC irgendwas.

Das ist zwar richtig, das "irgendwas" ist aber bei einer einigermassen 
aktuellen avr-gcc/avr-libc-Kombination als Endlosschleife implementiert.

Oliver
Gast #3362101
Lesenswert?

1
Du hast sicher ein Hardwareproblem. Die Software habe ich 
2
vorsichtshalber getestet, funktioniert einwandfrei.
3
Hast du R/W auf GND gelegt?

R/W auf GND gelegt, sowie die ersten Datenbits des LCD.
1
Wird sauber kompiliert?
2
Wie sehen die Fusebits aus?
3
Lass mal eine LED mit 1 Hz toggeln und guck ob das delay_ms() richtig 
4
arbeitet.

Ich bekomme nicht einmal eine Warnung. Das delay funktioniert tadellos - 
habe beim LCD aber auch schon 1,8 MHz int und 16MHzext. ausprobiert.
Die FuseBits...sidn im Ursprungszustand - für den extenen Quarz ändere 
ich die eben inkl. des CKOPT.
#3362159
Lesenswert?

Kannst du ein Bild von deinem Aufbau hier hereinstellen. Es kann nur was 
hardwaremässiges sein wenn der Code richtig kompiliert und übertragen 
wird.
Das der µC oder LCD defekt sind, ist doch eher unwahrscheinlich, wenn 
auch nicht auszuschließen.
Die ersten Datebits braucht man nicht auf GND legen, es sind intern 
PullUp drinnen.
Gast #3362216
Lesenswert?

1
Hast Du in lcd-routines.h auch die richtige Taktfrequenz eingetragen?

Jup, alles aktualisiert. Aber wenn nicht - ist das in der .c-Datei 
geschehen. Dann gibt es eine Warnung, funktionieren tut es aber 
trotzdem.

Anbei ein Foto vom Aufbau - das LCD ist jetzt mal auf max.Kontrast 
eingestellt, um die weißen Kästchen zu sehen - selbstverständlich zu für 
das Foto.

Ich gehe davon aus, dass es irgendein dumemr Fehler ist, da alle 
"klugen" bereits behoben sind :D
Angehängte Dateien:
Gast #3362268
Lesenswert?

1
Recht viel erkennt man auf dem Bild nicht.
2
Ist auf dem Controllerboard ein MAX232 oder dergleichen drauf und RX und 
3
TX nicht abgetrennt. Das könnte stören.

OMFG, das war der Gedanke! Abtrennen muss man den Quatsch nicht - aber 
zumindest die richtige Abzweigung vom Port nutzen. Auf dem Board ist 
eine hinter den MAX232 geschaltet und eine davor. Ratet mal, welche ich 
angesteckt habe ;)

Ich danke euch allen, habt 'nen schönen Tag :)
Angehängte Dateien:
Gast #3362379
Lesenswert?

dem TxD-Eingang wird nichts passieren - er wird eben irgendein Signal 
ausgeben. Natürlich Vorsicht geboten, wenn man die RS232-Schnittstelle 
nutzen möchte.
Beim RxD müsste ich diese..ähm.. reverse supply nachschauen - aber danke 
für die Warnung :)
Gast #3362470
Lesenswert?

Wie es aussieht, hat mein LCD doch noh überlebt :D
Aber ehrlich, einfach solche dummen Fehler... Schon an alles gedacht, 
Zugriffszeiten, Beschaltung, Widerstände, Code... Und dann liegt es an 
dem falschen( aber gleichgenannten) Port ;)

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