Abend zusammen.
Ich bin gerade dran das Avr Tutorial durch zu arbeiten, und bin bei dem
Programm Uhr http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr
auf folgendes Problem gestoßen:
Dass Display zeigt gar nichts an, es wird nur ein schwarzer Balgen
angezeigt, als wäre das Display nicht Initialisiert. Ich habe dass
Programm schon durch den Avr Simulator laufen lassen, und es scheint
alles zu funktionieren, soweit ich dass beurteilen kann.
Das Display ist dieses
Hier:http://www.reichelt.de/Hintergrund-gruen/LCD-162F-LED/3/index.html?&ACTION=3&LA=2&ARTICLE=31655&GROUPID=3005&artnr=LCD+162F+LED
Ich nutze noch folgende Dinge:
Eigenbau Board streng nach Tutorial mit ATmega 8
Original Atmel ISP MK2
AVR Studio 4 (Das 6.1 hab ich auch, ist mir aber für den Anfang zu
überfrachtet)
Was ich noch zu meinem Problem hinzufügen muss: Die anderen Test
Programme liefen alle auf meinem Controller. Auch dass Programm aus dem
LCD Tutorial lief einwandfrei, und auf meinem LCD erschien der Text
TEST.
Wenn jemand eine Zündende Idee hat, wäre ich sehr dankbar.
Ich Suche da jetzt schon seit Wochen dran, und seh den Wald vor lauter
Bäumen nicht mehr.
Gruss Jens
>Eigenbau Board streng nach Tutorial mit ATmega 8
Welche Taktfrequenz?
>Dass Display zeigt gar nichts an, es wird nur ein schwarzer Balgen>angezeigt, als wäre das Display nicht Initialisiert.
Dann sind entweder die delays fürs Display zu kurz
oder die Pinbelegung stimmt nicht.
Mit 4MHZ, externer Oszillator. Den habe ich in den Fuses auch angewählt.
Kann die Pin belegung trotzdem falsch sein, obwohl das Display in einem
anderen Programm funktioniert?
>Kann die Pin belegung trotzdem falsch sein, obwohl das Display in einem>anderen Programm funktioniert?
Sicher, dazu müsste man aber deine Pinbelegung wissen
und auch mal das komplette Programm sehen. Alles andere ist nur raten.
Pinnummer
LCD Bezeichnung Anschluss
1 VSS GND (beim TC1602E: VCC)
2 VCC +5 V (beim TC1602E: Gnd)
3 VEE GND oder Poti
4 RS PD4 am AVR
5 RW GND
6 E PD5 am AVR
7 DB0 nicht angeschlossen
8 DB1 nicht angeschlossen
9 DB2 nicht angeschlossen
10 DB3 nicht angeschlossen
11 DB4 PD0 am AVR
12 DB5 PD1 am AVR
13 DB6 PD2 am AVR
14 DB7 PD3 am AVR
15 A Vorsicht! Meistens nicht direkt an +5 V abschließbar,
sondern nur über einen Vorwiderstand, der an die Daten
der Hintergrundbeleuchtung angepasst werden muss.
16 K GND
Dass ist die Pinbelegung die ich verwendet habe, ist die aus dem
Tutorial und stimmt so weit ich gesehen habe exakt mit der aus dem
Datenblatt des Displays über ein.
Dass Programm ist direkt in dem ersten Link den ich im Startpost
gepostet habe.
Jens Naumann schrieb:> Dass ist die Pinbelegung die ich verwendet habe, ist die aus dem> Tutorial und stimmt so weit ich gesehen habe exakt mit der aus dem> Datenblatt des Displays über ein.
Gemeint ist wohl eher, an welche AVR Pins du das LCD angeschlossen hast
und ob das mit der im Programm verwendeten übereinstimmt.
Wenn du ein Testprogramm hast, in dem das LCD funktioniert, dann sehe
ich 2 gute Möglichkeiten
Entweder vergleichen, worin sich die beiden in den LCD Routinen
unterscheiden.
Oder aus dem funktionierenden Programm das Uhrenprogramm entwickeln.
Letzters ist keine so schlechte Übung, denn mit Copy&Paste
Programmierung und sich daran erfreuen, dass das Programm welches du
gerade kopiert hast, lernst du sowieso nicht sehr viel. Wenn du hingegen
das funktionierende Programm um die Timersachen und die andere Ausgabe
erweiterst, musst du dich zumindest ein wenig mit dem Code beschäftigen,
den du gerade kopierst.
Die Lcd Routinen sind in beiden Programmen die gleiche, dass ist ja dass
Komische.
Ich sehe nur im moment absolut nicht, wo der Fehler im Hauptprogramm
liegen könnte, bzw wo da noch anpassungen notwendig sind.
Klar lerne ich nichts durch Copy und Paste, allerdings bekomme ich so
ein wenig Routine im Umgang mit dem Avr Studio, und sehe so schon mal
den Aufbau von einem funktionierenden Programm.
Danke dir Karl Heinz,
mir ist aufgefallen, wenn ich in dein Programm oder das Uhren Programm,
unter Main noch den Satz:
ldi temp1, 0xFF
out DDRD, temp1
Einfüge, funktioniert das Display.
Das Uhren Programm aus dem Tut funktioniert so auch, wenn ich den Satz
noch einfüge. Es zählt so auch auch.
Einziges Problem:
Das Display gibt die Zahlen so aus: 0J:0J:0J
Das Display zählt aber trotzdem hoch. Nach zehn Sekunden steht drauf
0J:0J:1J
Edit: Das Display zeigt jetzt richtig an, hat alles geklappt. Danke noch
mal an Karl Heinz, dein Tipp die Programme zu vergleichen hat mich
weiter gebracht. Manch mal denkt man vor lauter lauter nicht an die
einfachsten Dinge.
Gruß Jens
Jens Naumann schrieb:> Danke dir Karl Heinz,>> mir ist aufgefallen, wenn ich in dein Programm oder das Uhren Programm,> unter Main noch den Satz:>> ldi temp1, 0xFF> out DDRD, temp1
Hmm.
Das sollte eigentlich nicht notwendig sein.
Denn lcd_init beginnt so
1
lcd_init:
2
ldi temp1, 0xFF ; alle Pins am Ausgabeport auf Ausgang
3
out LCD_DDR, temp1
4
....
setzt sich also selbst die Pins auf Ausgang.
kontrollier mal in deinen LCD-Routinen ob am Anfang LCD_DDR richtig
gesetzt ist.