LCD ANAG VISION Funktioniert nicht mehr

OP #2166498
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)
Angehängte Dateien:
Gast #2167181
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
OP #2167963
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
Gast #2168054
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
OP #2168225
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.
Gast #2168229
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.
OP #2170858
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
Gast #2171030
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.
Gast #2171102
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.
Gast #2171171
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.
Gast #2171176
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.

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