Displaycontroller ST7066U mit PIC16f1518

Gast #3928867
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
Gast #3930136
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.
#3930167
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.

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