Ansteuerung von LCD

Gast #1433749
Lesenswert?

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
}
Gast #1433854
Lesenswert?

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
Gast #1435161
Lesenswert?

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
Gast #1435173
Lesenswert?

>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.
#1435185
Lesenswert?

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.
Gast #1435242
Lesenswert?

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?
Gast #1438295
Lesenswert?

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
Angehängte Dateien:
Gast #1438318
Lesenswert?

>>  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.

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