Hallo Leute, mein LCD-Display(4x20,HD44780)funktioniert bei Verwendung des internen 1MHz-Takt am ATMega16 korrekt. Nach Umstellen auf externen Quarz(16MHz) zeigt das Display nur noch Hieroglyphen an, selbst wenn der F_CPU-Wert in der lcd.h-Datei auf 1000000 geändert wird, genauso ist es bei anderen Werten, z.B. 8000000. Nach Rückstellen auf den internen Controllertakt funktioniert alles wieder korrekt. Was kann die Ursache sein?? Vielen Dank für die Hilfe im Voraus!! Walter
Du betireibst das Display im Write-Only (Fire-and-forget)-Mode also ohne Abfrage des Busy-Flags vor jeder Ausgabe? Dann mußt Du alle Deine Wartezeiten anpassen, denn offensichtlich überfährst Du das Display mit 16 Mhz vom Timing her. Je nachdem, welche Routinen Du verwendest sind die nicht zwingend von F_CPU abhängig gemacht... Gruß, Thosch
Hallo Thosch, vielen Dank für den Tipp. Ich habe dann den F_CPU-Wert auf 16000000 gestellt und alle LCD-Ausführungszeiten (10 Stück)in der lcd-routines.h auf den 16 fachen Wert erhöht(Tabelle zeigt Ursprungswerte). Es ändert jedoch nichts an den Hieroglyphen. //////////////////////////////////////////////////////////////////////// //////// // LCD Ausführungszeiten (MS=Millisekunden, US=Mikrosekunden) #define LCD_BOOTUP_MS 15 #define LCD_ENABLE_US 20 #define LCD_WRITEDATA_US 46 #define LCD_COMMAND_US 42 #define LCD_SOFT_RESET_MS1 5 #define LCD_SOFT_RESET_MS2 1 #define LCD_SOFT_RESET_MS3 1 #define LCD_SET_4BITMODE_MS 5 #define LCD_CLEAR_DISPLAY_MS 2 #define LCD_CURSOR_HOME_MS 2 //////////////////////////////////////////////////////////////////////// //////// Was kann noch die Ursache sein?? Danke im Voraus!! Walter
Walter Klevenz schrieb: > Was kann noch die Ursache sein?? Das ist so ganz ohne Quellen schwer nachzuvollziehen... Maine Glaskugel ist grade defekt ;-) Ich würde aber darauf tippen, daß mit dem schnelleren Takt die Setup- und Hold- Zeiten des Interface-Timings verletzt werden. Gerade bei der Erzeugung des E-Signals ist es wichtig, das Timing gemäß Datenblatt einzuhalten! Wenn das Timing des E-Signals nicht paßt, kannst Du nach oder vor dem Zugriff beliebig lange Wartezeiten einbauen ohne daß es hilft. Gruß, Thosch
@ Walter Klevenz #define F_CPU 16000000UL vor #include <avr/delay.h> einfügen sonst wird 1MHz eigestellt für Delay. Wie du den Controllertakt einstellst scheinst du ja zu wissen. Also auf 16MHz.
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.