Hallo Leute ich habe ein kleines Problem, aber viellleicht aus erfahrung könnt ihr schon eine Lösung parat haben. Ich steuere eine 2x16 LCD mit dem Atmega8515. es läuft soweit gut. aber beim Einschalten von dem Board, oder Versorgung der STK500 mit dem strom erscheint zuerst nur dunkle Kästschen auf dem Display. Erst wenn ich den Reset-Knopf drücke, werden Texte auf dem Display angezeigt. und so jedes Mal. Ich möchte aber dass der Text gleich nach dem Einschalten angezeigt wird. Was kann dabei falsch sein ??? Dankbar für jede hilfe Stefan PS: main code #include <avr/io.h> #include <util/delay.h> #include "LCD4B.h" int main (void) { _delay_ms(500); LCD4B_Init(); //LCD Initialisieren //LCD4B_Clear(); //Display löschen //Quellcode LCD4B_Cur_pos (1,1); LCD4B_Writestring ("Hallo Welt"); //Text ausgeben LCD4B_Cur_pos (2,1); //2. Zeile , 1.Spalte LCD4B_Writestring ("Programmtest IO!"); //Text ausgeben }
Hi danke ich hae zwar mehrere delay hinter einander geschachtelt, aber es klppt immer nicht
Hi! Hast du wirklich die Richtige Initialisierungs-Routine? Liegt dem Display eine Anleitung bei? Da könne die korrekte Initialisierung angegeben sein. Sonst überprüf noch einmal die Anschlüsse auf ihre Durchgängigkeit. Das Timing der einzelnen Befehle ist sehr wichtig. Benutzt du den internen Takt oder einen externen? Als letztes hätte ich noch den Kontrast für dich. Hast du den korrekt eingestellt. Bei mir war das mal so, dass das Display korrekt lief, ich konnte aber wegen dem Kontrast nichts erkennen (zu hell). Alles das mal bitte überprüfen. LG
Hi die Routine ist soweit in Ordnung sonst würde es auch nicht nach dem Drücken auf dem Resetknopf funktionieren. es gab keine Datenbaltt dafür. aber hinter dem Display ist sowas gekelbt mit dem bezeichnungen : Sc1602AS*B-XA-GC-G01. wenn ich google finde ich datenblätter von SC1602A. Aber da ist keine Angaben von Initialisierungstiming. Ich benutze der Interne Takt von dem Atmega8515. >>Als letztes hätte ich noch den Kontrast für dich. Hast du den korrekt >>eingestellt. Bei mir war das mal so, dass das Display korrekt lief, ich >>konnte aber wegen dem Kontrast nichts erkennen (zu hell). was der Kontrast angeht, ich denke es nicht als Problem zu betrachten, ansonsten hätte es auch nach reset nicht geklappt. Danke für jede Hilfe
>die Routine ist soweit in Ordnung sonst würde es auch nicht nach dem >Drücken auf dem Resetknopf funktionieren. Umgekehrt argumentiert: Wenn sie in Ordnung ist müsste es auch beim einschalten schon gehen. >wenn ich google finde ich datenblätter von SC1602A. Aber da ist keine >Angaben von Initialisierungstiming. Such nach ks0066. Da findest du die Init-Sequenz.
Probier mal kleinere delays als Argument für _delay_ms. Die geht nur gescheit für Zeiten bis 262.14 ms / F_CPU in MHz (siehe Auszug aus dem header file unten).
1 | The macro F_CPU is supposed to be defined to a |
2 | constant defining the CPU clock frequency (in Hertz). |
3 | |
4 | The maximal possible delay is 262.14 ms / F_CPU in MHz. |
5 | |
6 | When the user request delay which exceed the maximum possible one, |
7 | _delay_ms() provides a decreased resolution functionality. In this |
8 | mode _delay_ms() will work with a resolution of 1/10 ms, providing |
9 | delays up to 6.5535 seconds (independent from CPU frequency). The |
10 | user will not be informed about decreased resolution. |
Wie man lesen kann, sollte es eigentlich trotzdem funktionieren aber ich hatte damit auch schon Schwierigkeiten.
hi,
danke für erste Anregungen,
>>The maximal possible delay is 262.14 ms / F_CPU in MHz.
ich versteht nicht ganz bedeutet es , dass für 1 Mhz maxi 262.14ms als
parameter in der Funktion einzutragen ist ??? und entsprechend bei 2MHz
2*262.14ms ???.
was mach mann dann mit diesem Diplays ohne mitgelieferte Datenblätter?
Zeig mal den ganzen code her sonst kann man nichts sagen. Was ist mit den Pins die nicht angeschlossen sind ? du verwendest ja nur 4 BIT. Hängen die in der Luft ?
Hallo Leute hier habe ich den gesamt code angehängt. ich benutze ein Atmega328p ohne Prescaler bei der fuse . d.h. bei int OSC. 8MHz. möchte gern das es glich beim einschalten funktionier, aber es tut nur erst nach dem Reset. Danke für jede Hilfe
>>Was ist mit
den Pins die nicht angeschlossen sind ? du verwendest ja nur 4 BIT.
Hängen die in der Luft ?
Übrigens die anderen Pins die nicht benutzt sind hängen in der Luft.
> LCD4B_Write(0x02,0); // 4-Bit-Bus nun Aktivieren
LCD4B_Write(0x20,0); // 4-Bit-Bus nun Aktivieren
>> Übrigens die anderen Pins die nicht benutzt sind hängen in der Luft.
Da gehören sie nicht hin.
vielen , dank , ich wusste es war nicht so weit . es hat noch ein kleines Makel ,aber ich kümmere mich darum .
>> LCD4B_Write(0x02,0); // 4-Bit-Bus nun Aktivieren > > LCD4B_Write(0x20,0); // 4-Bit-Bus nun Aktivieren Ach, son Quatsch;) LCD4B_Write(0x30,0); // 4-Bit-Bus nun Aktivieren Schreibt zwei Nibbles. 3 und 0. Es darf aber nur ein Nibble sein. Die 3. 3 3 3 2 Ab hier darfst du dann LCD4B_Write benutzen.
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.