Forum: Mikrocontroller und Digitale Elektronik Displaycontroller ST7066U mit PIC16f1518


von Michael (Gast)


Lesenswert?

Guten Tag Liebe Forumfreunde

Ich Schlage mich seit längerer Zeit mit einem LCD Display herum, bei 
welchem ich einfach keine Anzeige hinbekomme. Es Handelt sich um einen 
SYH-LY-CYR22 Punktmatrix Display, welchen ich bei Distrelec erworben 
habe. ( 
http://www.distrelec.ch/de/LCD-Punktmatrixdisplay-4-75-mm-4-x-16-Display-Elektronik-DEM-16481-SYH-LY-CYR22/p/17551456?q=661576&page=1&origPos=1&origPageSize=10&simi=99.41 
)

Dieser besitzt den Displaycontroller ST7066U-0T.
Kennt sich jemand mit diesem Display(Controller) aus oder sind diese 
Controller evtl. sogar genormt?
Bin um jede Hilfe froh.

Auf jeden Fall habe ich den Display mit meinem PIC16f1518 Verkabelt und 
nutze PORT A als Datenleitung und PORT B 0-2 Als Steuersignale. Eine 
Initzialisierung habe ich mir anhand einer Anleitung im Internet 
Zusammengebastelt.


void LCDstartup(void)
{
   char counter;
   char instructions[8] = {0x30, 0x30, 0x30, 0x38, 0x08, 0x01, 0x06, 
0x0C};
  // char delays[8] = {160, 5, 5, 5, 5, 100, 5, 5};

   for (counter = 0; counter <8 ; counter++)
   {
      RS = 0;
      RW = 0;
      ENABLE = 1;
      PORTA = instructions[counter];
      _delay(10);
      ENABLE = 0;
      _delay(10);
      PORTA = 0x00;
      RS = 1;
      RW = 1;
      _delay(160);
   }

}


Und ein Zeichen würde ich gerne mit dieser Funktion Schreiben:

 RS = 0;                 //Register select set to 0
        RW = 0;                 //Set to write
        ENABLE = 1;             //Enable writing
      PORTA = (lcd_zeile1[vergleicher])+0x80; //place DRAM Adress on 
8Bit bus
        _delay(10);
        ENABLE = 0;             //Disable writing
        _delay(10);
        PORTA = 0x00;
        RW = 0;                 //Register select set to 1
        RS = 1;                 // Set to reading
            //Data write into DRAM
        RW = 0;                 // Set to writing
        ENABLE = 1;             // Enable writing
        PORTA = write_zeile1[vergleicher];  //place data on 8Bit bus
        _delay(10);
        ENABLE = 0;             //Disable writing
        _delay(10);
        PORTA = 0;

In diesem CODE-Schnipsel ist die Variable lcd_zeile1 für die einzelnen 
DRAM Adressen je nach Position auf dem Display.

Die Variable write_zeile1 ist ein Array in welchem Buchstaben abgelegt 
sind, welche vorher als #define in den 8-Bit Wert definiert wurden, so 
wie es nachher auf die Datenleitungen des Display kommen sollte.


Ich hoffe Ihr könnt mir dabei helfen, wenigstens ein Zeichen auf den 
Display zu bringen.

Mit Freundlichen Grüssen
Michael

von Michael L. (todesser96)


Lesenswert?

Weiss wirklich niemand darüber Bescheid?

von Max H. (hartl192)


Lesenswert?

Wie hast du den Pin Vo angeschlossen?

von Michael L. (todesser96)


Lesenswert?

Der Pin V0 ist mit VDD verbunden welcher ein Spannungslvl. von +5 Volt 
hat.

von Max H. (hartl192)


Lesenswert?

Michael Lang schrieb:
> Der Pin V0 ist mit VDD verbunden welcher ein Spannungslvl. von +5
> Volt hat.
V0 schließt man normalerweise so an: 
http://www.sprut.de/electronic/lcd/speisung.gif
Laut Degenblatt sollte die Spannung bei Typ. Vdd - 4.5V liegen.

von Michael L. (todesser96)


Lesenswert?

Besten Dank für den Tipp.
Habe ich soeben umgesetzt, leider ist das Ergebnis noch gleich. Keine 
Anzeige

von wit (Gast)


Lesenswert?

Kannst nochmal zwischen Pin 1 und 2 nachmessen, ob 5V Versorgung 
anliegt. Dann die Kontrastspannung an Pin 3 mit dem Poti verändern, bis 
du schwarze Balken siehst, dann etwas zurück bis die Balken fast 
verschwinden. Dann sollte der Kontrast richtig sein.
Leider ist die Initialisierung im Datenblatt nicht näher beschrieben, 
aber so wie ich das kenne, sollte nach dem Einschalten die Startsequenz 
verzögert starten. Füge vor der for-Schleife ein _delay(50) ein.

von Michael L. (todesser96)


Lesenswert?

Jap Zwischen Pin0  und 1 Sind 5 Volt.
Wie sollte den der Kontrast aufgebaut sein? Bei hoher Spannung alle 
Balken schwarz oder bei tiefer? Denn das drehen am Potti hat überhaupt 
keine Wirkung.

Eine Wartesequenz für das Booten des LCD ist bereits am Anfang des 
Mains() eingebaut. Dachte ich poste übersichtshalber nur 
Programmausschnitte.

von wit (Gast)


Lesenswert?

Michael Lang schrieb:
> das drehen am Potti hat überhaupt keine Wirkung.
Du kannst auch ein 20k Poti ohne einen zus. Reihenwiderstand nehmen und 
die Kontrastspannung von 0 bis 5V verändern.

von Michael L. (todesser96)


Lesenswert?

Habe das Problem jetzt Endlich gefunden.
Der Kontrastregler des Displays war Kaputt.
Display gewechselt und gut wars.

Besten Dank für eure Hilfe

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.