Forum: Mikrocontroller und Digitale Elektronik Ansteuerung von LCD


von Stefan weber (Gast)


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
}

von Der verrückte Professor (Gast)


Lesenswert?

Mach mal mehr delay...

von Stefan weber (Gast)


Lesenswert?

Hi  danke
ich hae zwar mehrere delay hinter einander geschachtelt,  aber es klppt 
immer nicht

von Christian K (Gast)


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

von Stefan weber (Gast)


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

von holger (Gast)


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.

von Marcus S. (mirt)


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.

von eh (Gast)


Lesenswert?

Nach dem LCD4B_Init brauchts einen delay.

von Stefan weber (Gast)


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?

von Stefan weber (Gast)


Lesenswert?

Liebe Mikrocontroler ,
 es klappt ncht bei mir

von Bernd (Gast)


Lesenswert?

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 ?

von Stefan weber (Gast)


Angehängte Dateien:

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

von Stefan weber (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>  LCD4B_Write(0x02,0);    // 4-Bit-Bus nun Aktivieren

  LCD4B_Write(0x20,0);    // 4-Bit-Bus nun Aktivieren

von Bernd (Gast)


Lesenswert?

>> Übrigens die anderen Pins die nicht benutzt sind hängen in der Luft.

Da gehören sie nicht hin.

von Stefan weber (Gast)


Lesenswert?

vielen , dank , ich wusste   es war nicht so weit .

es hat noch ein kleines Makel ,aber  ich kümmere mich darum .

von holger (Gast)


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.

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
Noch kein Account? Hier anmelden.