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
intmain(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
return0;
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?
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
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
{
;
}
}
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
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.
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?
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.
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
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.
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 :)
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.
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 :)
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 ;)