mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuerung von LCD


Autor: Stefan weber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
}

Autor: Der verrückte Professor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal mehr delay...

Autor: Stefan weber (Gast)
Datum:

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

Autor: Christian K (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan weber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marcus S. (mirt)
Datum:

Bewertung
0 lesenswert
nicht 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).
   The macro F_CPU is supposed to be defined to a
   constant defining the CPU clock frequency (in Hertz).

   The maximal possible delay is 262.14 ms / F_CPU in MHz.

   When the user request delay which exceed the maximum possible one,
   _delay_ms() provides a decreased resolution functionality. In this
   mode _delay_ms() will work with a resolution of 1/10 ms, providing
   delays up to 6.5535 seconds (independent from CPU frequency).  The
   user will not be informed about decreased resolution.

Wie man lesen kann, sollte es eigentlich trotzdem funktionieren aber ich 
hatte damit auch schon Schwierigkeiten.

Autor: eh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach dem LCD4B_Init brauchts einen delay.

Autor: Stefan weber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan weber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Mikrocontroler ,
 es klappt ncht bei mir

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Stefan weber (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan weber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

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

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

Autor: Bernd (Gast)
Datum:

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

Da gehören sie nicht hin.

Autor: Stefan weber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen , dank , ich wusste   es war nicht so weit .

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.