Forum: Mikrocontroller und Digitale Elektronik ATmega8 + LCD-Probleme


von Boon (Gast)


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?

: Bearbeitet durch User
von g457 (Gast)


Lesenswert?

> Irgendwer irgendwelche Ideen?

Ja. Wo ist der Rest vom Quellcode? Wie sieht der Aufbau aus?

von Boon (Gast)


Angehängte Dateien:

Lesenswert?

Der Rest in den angehängten ofiziellen Bibliotheken für LCD.

Die Beschaltung ist oben genannt.

von Christian B. (chbalnuweit)


Lesenswert?

ich konnte so auf anhieb nix fehlerhafte erkennen.
Ich vermute den Fehler woanders.
Wird sauber kompiliert?
Wie sehen die Fusebits aus?
Lass mal eine LED mit 1 Hz toggeln und guck ob das delay_ms() richtig 
arbeitet.

Gruß,
Christian

von Chris (Gast)


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
{
    ;
}

}

von Oliver (Gast)


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

von Hubert G. (hubertg)


Lesenswert?

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

von Boon (Gast)


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.

von Boon (Gast)


Lesenswert?

Edit: @Chris: deinen Code habe ich ausprobiert - leider ohne Erfolg.

von Boon (Gast)


Lesenswert?

Edit2: Wenn ich die ersten Datenbits nicht auf Masse lege, bekomme ich 
ein Paar falsch dargestellter Zeichen zu sehen. Kann ich in diesem Fall 
davon ausgehen, dass das LCD funktioniert?

von Hubert G. (hubertg)


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.

von Dietrich L. (dietrichl)


Lesenswert?

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

Siehe bei
1
#define F_CPU 8000000

von Boon (Gast)


Angehängte Dateien:

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

von Hubert G. (hubertg)


Lesenswert?

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

von Boon (Gast)


Angehängte Dateien:

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 :)

von Peter D. (peda)


Lesenswert?

Boon schrieb:
> Abtrennen muss man den Quatsch nicht

Warum nicht, ist denn ein Schutzwiderstand in Reihe?
Ansonsten muß der arme MAX gegen den AVR kämpfen.
Könnte sein, er nimmt es bald übel.

von Boon (Gast)


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 :)

von Hubert G. (hubertg)


Lesenswert?

Auf der RS232 (PC) Seite des MAX sind am TX +-12V drauf, da ist dein LCD 
auch ganz schnell hinüber.

von Boon (Gast)


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 ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.