Forum: Mikrocontroller und Digitale Elektronik LCD ANAG VISION Funktioniert nicht mehr


von Ronald E. (ronald_1)


Angehängte Dateien:

Lesenswert?

Hallo zusammen.

Ich möchte mit einem ATMega8 16PU auf einem MK2 Board ein ANAG VISION 
AV0820 betreiben. Der Controller wurde mittels des myAvrQuickProg auf 
die Standardeinstellungen gesetzt.
Der Witz an der Sache ist, dass genau dieser Code mit genau dieser 
Schaltung schon funktioniert hat. Mit dem neuen Controller jedoch nicht 
(das Display initialisiert erst gar nicht).
Code ist im Anhang.
Habe ich was übersehen? Kann mir evt. jemand weiterhelfen?

MfG Ronald

zur Schaltung
PB0-PB3 --> LCD PIN 11-14
PB4 --> LCD PIN 4 (RS)
PB5 --> LCD Pin 6 (E)
Kontrastspannung ist super (Man sieht die Balken)

von Helfer (Gast)


Lesenswert?

>> Der Witz an der Sache ist, dass genau dieser Code mit genau dieser
>> Schaltung schon funktioniert hat. Mit dem neuen Controller jedoch nicht
>> (das Display initialisiert erst gar nicht).

Der Code setzt voraus:

> #define F_CPU 3686400UL

Das ist bei einem neuen Controller zunächst nicht der Fall. Der neue 
Controller läuft ab werk nicht mit externen 3686400 Hz sondern .ot 
typ. 1 MHz interner RC-Oszillator. Stichwort AVR Fuses

von Ronald E. (ronald_1)


Lesenswert?

Helfer schrieb:
> Das ist bei einem neuen Controller zunächst nicht der Fall. Der neue
> Controller läuft ab werk nicht mit externen 3686400 Hz sondern .ot
> typ. 1 MHz interner RC-Oszillator. Stichwort AVR Fuses

Ja dass stimmt natürlich. Aus diesem Grund habe ich mit dem 
myAvrQuickProg die Fuses auf Standard gestellt.
Zuerst dachte ich vielleicht ist das Board kaputt, doch dass 
Diagnosetool sagt alles ist okey!
Aber danke für den Hinweis.
MfG Ronald

von holger (Gast)


Lesenswert?

>Kontrastspannung ist super (Man sieht die Balken)

Wirklich DIE Balken? Es dürfte nur einer sein.
Dreh mal den Kontrast runter.

von Ronald E. (ronald_1)


Lesenswert?

Ja es ist nur einer.
MfG

von holger (Gast)


Lesenswert?

Dann halt mal am Timing drehen.

#define LCD_BOOTUP_MS           50
#define LCD_ENABLE_US           10
#define LCD_WRITEDATA_US        100
#define LCD_COMMAND_US          100

#define LCD_SOFT_RESET_MS1      50
#define LCD_SOFT_RESET_MS2      50
#define LCD_SOFT_RESET_MS3      50
#define LCD_SET_4BITMODE_MS     50

#define LCD_CLEAR_DISPLAY_MS    5
#define LCD_CURSOR_HOME_MS      5

von Ronald E. (ronald_1)


Lesenswert?

Danke dir holgar, doch das funktioniert leider auch nicht :(

MfG Ronald

von holger (Gast)


Lesenswert?

>Danke dir holgar, doch das funktioniert leider auch nicht :(

Dann such den Fehler in der Schaltung.

von Ronald E. (ronald_1)


Lesenswert?

Davon abgesehen, dass ich die Schaltung jetzt sicha schon 10 mal mit dem 
dem Durchgangsprüfer die Schaltung durchgemessen habe, habe ich sie 
jetzt nochmal durchgemessen. Ich hab sogar noch einen draufgesetzt und 
alle Lötstellen nochmal nachgelötet und nochmals nachgemessen.
Leider ohne Erfolg. Ich bin mit meinem Latein irgendwie am Ende.

von Helfer (Gast)


Lesenswert?

Die Fuses sollten auch zum Sourcecode passen und von 
Sourcecodeänderungen schreibst du nichts.

Die "Standard"-Fuses (1 MHz interner RC-Oszillator?) passen jedenfalls 
auch nicht zu F_CPU 3686400UL. Im Sourcecode musst du in diesem Fall 
F_CPU 1000000UL eintragen.

Vor dem lcd_init() in dieser Sequenz:
1
int main(void)
2
{
3
  // Initialisierung des LCD
4
  // Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken
5
  // verschwunden sein
6
  lcd_init();

fügt man öfter ein längeres delay_ms() ein. Das soll sicherstellen, dass 
ein schnell startender AVR keine Kommandos zu einem langsamer startenden 
LCD-Display sendet. Eine empirische Wartezeit wäre hier z.B. 200 ms. 
Wenn beim AVR die Brownout-Fuse verwendet wird, kann die Wartezeit eher 
kürzer ausfallen.

In lcd_init() ist zwar eine delay_ms( LCD_BOOTUP_MS ) definiert:
1
    // verwendete Pins auf Ausgang schalten
2
    uint8_t pins = (0x0F << LCD_DB) |           // 4 Datenleitungen
3
                   (1<<LCD_RS) |                // R/S Leitung
4
                   (1<<LCD_EN);                 // Enable Leitung
5
    LCD_DDR |= pins;
6
 
7
    // initial alle Ausgänge auf Null
8
    LCD_PORT &= ~pins;
9
 
10
    // warten auf die Bereitschaft des LCD
11
    _delay_ms( LCD_BOOTUP_MS );

IMHO gehört die aber vor die Zuweisungen an LCD_DDR und LCD_PORT, um 
sicherzustellen, dass das LCD ungestört den Power-On-Reset abschliessen 
kann.

von Ronald E. (ronald_1)


Lesenswert?

Vielen Dank für die Hilfe. Die delays habe ich wie von dir angemerkt 
eingefügt. F_CPU 1000000UL hab ich ach schon probiert. Mit dem 
myAVRQuickProg habe ich den Externen Quarz aktiviert (3686400). Leider 
noch nichts zu sehen.

von Helfer (Gast)


Lesenswert?

Hast du die Schaltung zwischendurch auch mal komplett spannungslos 
gemacht, so dass das LCD definiert die Power-On-Reset Sequenz 
durchlaufen muss (und dabei nicht gestört wird)?

von Ronald E. (ronald_1)


Lesenswert?

Ja hab ich (mehrmals). Jetzt gerade nochmal.

von Ronald E. (ronald_1)


Lesenswert?

Hat den evt. jemand noch eine Idee?

MfG Ronald

von Ronald E. (ronald_1)


Lesenswert?

Sorry dass ich nerve, aber wie schon die Beatles sangen: "Help! I need 
somebody. Help!..."
Wie kann das sein, dass es nicht mehr funktioniert?

MfG Ronald

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Probiere mal diese HEX Datei.

von Ronald E. (ronald_1)


Lesenswert?

Hallo holger,

danke für deine Hilfe. Ich habs mit dem myAvrQuickProg (einmal mit den 
Standardfuses und einmal mit externem Quarz) gebrannt, doch leider kein 
Ergebnis. Drauf hab ich abermals die Schaltung durchgemessen, und sie 
passt wirklich 100%. Heute Abends habe ich an myAVR-Support eine e-mail 
geschickt, ob man evt. bei einem neuen Controller (ATMega8 16PU)eine 
Einstellung am Board vornehmen muss.
Hätte ich ein Oszilloskop, dann könnt ich mir anschauen was da genau 
rausgeht.
Ich kann es immer noch nicht fassen, dass das Ding schon mal 
funktioniert hat!

MfG Ronald

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Ich seh gerade das ich für PORTD statt PORTB kompiliert habe;)
Entschuldigung! Probier das noch mal.

von Ronald E. (ronald_1)


Lesenswert?

Hallo, sry dass es ein bisschen gedauert hat.
Leider funktionierts nicht (irgendwie hab ich dass Gefühl es wird 
niemehr laufen).

MfG

von holger (Gast)


Lesenswert?

>Leider funktionierts nicht (irgendwie hab ich dass Gefühl es wird
>niemehr laufen).

Nicht so schnell aufgeben;)

Kontrolliere deine Verbindungen auch mal auf Kurzschlüsse
zwischen den Leitungen. Dann noch auf Kurzschlüsse zu
GND oder VCC.

von Ronald E. (ronald_1)


Lesenswert?

Scheint alles in Ordnung zu sein (optisch, und auch mit dem 
Messinstroment).

von holger (Gast)


Lesenswert?

>Scheint alles in Ordnung zu sein (optisch, und auch mit dem
>Messinstroment).

Dann mach mal folgendes:

Programm schreiben das nur einen Pin am LCD auf High setzt.
Nachmessen ob der auch High ist und Nachbarpins nicht High sind.

Das machst du dann für jeden Pin am LCD.

von Ronald E. (ronald_1)


Lesenswert?

Habs durchgemessen. Es ist immer nur das aktuelle Bit durchgeschalten 
(die nicht benötigten Datenbits sind anscheinend auch immer high). Es 
liegen jedoch bei high nur 4,68V an.

von holger (Gast)


Lesenswert?

>Habs durchgemessen. Es ist immer nur das aktuelle Bit durchgeschalten
>(die nicht benötigten Datenbits sind anscheinend auch immer high).

Die sollten aber low sein.

> Es liegen jedoch bei high nur 4,68V an.

Das ist ok.

von holger (Gast)


Lesenswert?

>>(die nicht benötigten Datenbits sind anscheinend auch immer high).
>
>Die sollten aber low sein.

Upps. Meinst du die nicht angeschlossenen Datenleitungen?
Die können High sein. Interne Pullups vom LCD.

von Ronald E. (ronald_1)


Lesenswert?

hmm.. was kann man da machen?

von holger (Gast)


Lesenswert?

Was ist eigentlich mit dem R/W Pin vom LCD?
Wie ist der angeschlossen?

von Ronald E. (ronald_1)


Lesenswert?

Der ist gar nich belegt.

von holger (Gast)


Lesenswert?

>Der ist gar nich belegt.

Der muss auf GND.

von Ronald E. (ronald_1)


Lesenswert?

jetzt gehts

von Ronald E. (ronald_1)


Lesenswert?

ich narr! holger, darf ich dir ein bier spendieren....

von holger (Gast)


Lesenswert?

>jetzt gehts

Ach was;)

von Ronald E. (ronald_1)


Lesenswert?

wie konnte ich das die ganze Zeit übersehen...tztztz

von holger (Gast)


Lesenswert?

>ich narr! holger, darf ich dir ein bier spendieren....

Ist schon in Arbeit, ich schick dir die Rechnung;)

von Ronald E. (ronald_1)


Lesenswert?

wenn du auf meinen namen klickst, kannst du mir eine persönliche 
nachricht schicken. am besten iban und bic
danke nochmals!!!!

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.