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)
>> 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
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
>Kontrastspannung ist super (Man sieht die Balken)
Wirklich DIE Balken? Es dürfte nur einer sein.
Dreh mal den Kontrast runter.
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
Danke dir holgar, doch das funktioniert leider auch nicht :( MfG Ronald
>Danke dir holgar, doch das funktioniert leider auch nicht :(
Dann such den Fehler in der Schaltung.
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.
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.
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.
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)?
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
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
Ich seh gerade das ich für PORTD statt PORTB kompiliert habe;) Entschuldigung! Probier das noch mal.
Hallo, sry dass es ein bisschen gedauert hat. Leider funktionierts nicht (irgendwie hab ich dass Gefühl es wird niemehr laufen). MfG
>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.
Scheint alles in Ordnung zu sein (optisch, und auch mit dem Messinstroment).
>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.
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.
>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.
>>(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.
Was ist eigentlich mit dem R/W Pin vom LCD? Wie ist der angeschlossen?
>ich narr! holger, darf ich dir ein bier spendieren....
Ist schon in Arbeit, ich schick dir die Rechnung;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.