Aansturing 128x64 Monochroom LCD

blackdog

Golden Member

Hi,

Ik heb wat beeldschermpjes laten meekomen met een andere bestelling omdat ze mij wel leuk leken.
Het gaat om drie 128x64 schermpjes die een verschillende kleur hebben maar verder gelijk zijn.

Het type wat achterop staat is dit: GMG12864-06D

Het 128x64 scherm in drie kleuren.
https://www.bramcam.nl/Diversen/128x64-LCD-02.png

.
De achterzijde van de schermen.
https://www.bramcam.nl/Diversen/128x64-LCD-03.png

.
Hier gaat het om, de aansluitingen in het rode kader welke ik op een Teensy of Nano zou willen aansluiten met b.v. de U8g2 Library (maar welke driver lijn van die library?)
https://www.bramcam.nl/Diversen/128x64-LCD-01.png

.
De data die ik heb kunnen achterhalen zegt dat dit scherm een ST7565R of en ST7920 driver IC heeft.
Hier heb ik echter geen zekerheid over en de eerste Library die ik zou proberen zou de van U8g2 worden.

Maar ook de pin namen zijn natuurlijk weer en rotzooitje, ik weet niet wat die Chinesen roken maar een beetje eenheid is in dat land ver te zoeken.
De pinnen aan U1 op de print kunnen wat mij betreft genegeert worden, die bevatten volgens de door mij gevonden data de Chinese caracterset en worden ook door SPI aangstuurd.

A+K is de achtergrond verlichting welke bij alle drie de displays werkt.
VSS en VDD is mij ook duidelijk.

Maar de rest van de aansluitingen samen met het driver typen geven heel veel variabelen.
Heeft iemand al ervaring met dit display die mij een goede kan opschoppen, zodat ik niet nog meer grijze haren krijg?
Als ik "Hello World" op het scherm kan krijgen, vind ik meestal de rest zelf wel uit.

Om te testen heb ik diverse Arduino's beschikbaar maar de grootste kans maakt een Teensy LC die zeer goed compatible is net de Nano maar op 3.3V werkt wat denk ik ook de voering voor dit display is.

Dank vast!

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
PE9SMS

Golden Member

Volgens klik een ST7565R. Daar staat ook de datasheet van dat controller IC. Daar zullen ook wel hints in staan over hoe te interfacen met een mcu.

This signature is intentionally left blank.
buckfast_beekeeper

Golden Member

CS chip select laag indien geselecteerd.
RSE reset
RS
SI Serial input

Met filmpje

Nog wat

Van Lambiek wordt goede geuze gemaakt.
benleentje

Golden Member

Maar ook de pin namen zijn natuurlijk weer en rotzooitje,

Valt op zich een klein beetje mee niet alle afkortingen zijn duidelijk maar ik begin dan met wat wel duidelijk is.

Als er CS staat is dat zeer waarschijnlijk chipselect en dat hoort bij een SPI bus.

SPi heeft dan
kloksignaal
Data out
data in
Chipselect

en daarnaast soms nog extra stuur signalen die niet direct tot spi horen zoals een reset.

SPI gebruikt niet alt DI en DO. Een display hoeft niets terug te sturen en dan is enkel data in nodig wat ze hier SI serial in genoemd hebben.

De spi signalen zijn dan
SCL voor serial clock
CS voor chipselect
SI voor serial in.

De andere 2 signalen horen niet direct tot de spi bus.

Maar we zijn er nog niet we zijn pas op de helft ;).

Onderop staan ook 4 signalen. Deze horen bij het touchscreen. Touchsreen is eigenlijk enkel 2 laagjes kunstsof die een weerstand deler vormen die ze weer bovenop he display plakken. Zo kan je eigenlijk van elk display een touchscreen maken als je de juiste maat kan vinden.

Deze heeft 4 signalen en is ook een spi bus.
IC-SCL is de klok
IC-CS chipselct
IC-SO serial out
IC-SI serial in

In principe kan je beide SPI interfaces aan elkaar knopen en enkel de CS signalen gebruiken voor het display of de CS voor het touchscreen. Maar het zit apart weet niet of dat een specifiek reden heeft.

Volgens mij heeft dit display geen touchscreen want ik mis het bandkabeltje wat normaal vanaf de voorkant naar achter gaat. Of het heeft een geïntegreerde touchscreen.

buckfast_beekeeper

Golden Member

Toch zit er een IC in de touch aansluiting. In de regel wordt dat ook niet gemonteerd als er geen touch is.

Van Lambiek wordt goede geuze gemaakt.
blackdog

Golden Member

Hi,

Dank weer voor alle antwoorden, ik ga ze morgen doorneemen en testen.

Ik had al aangegeven dat de extra chip een Chinese karakterchip is en er is geen "touch" aanwezig op deze display die ik heb.

Ik ga kijken of ik morgen iets op het display kan toveren.

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
benleentje

Golden Member

Ik had al aangegeven dat de extra chip een Chinese karakterchip is en er is geen "touch" aanwezig op deze display die ik heb.

Sorry overheen gelezen, maar goed nu weet je ook waar die wel voor zijn ;).

Ik snap die hele chip niet eens. het heeft 6 pootjes. 4 voor de spi interface 2 voor de voeding. Dat is te weinig voor een touchscreen dan heb je met een spi bus minimaal 9 pootjes nodig.

Dan zal het wel een SPI geheugenchip zijn die de spi interface deelt met de lcd chip zelf en dat hij bij het opstarten de karakterset uitlees.
Maar als daar enkel Chinese karakters instaan dan heb je daar ook niets aan. Hopelijk hebben ze er al een europese karakterset ingezet

De onderste interface heb je enkel nodig als je die karakters moet vervanderen

Arco

Special Member

RS is Register Select (commando/data)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
paaltje73

Golden Member

De Galerij van je vriendje OliKraus
Staat hier welicht iets tussen?
Voor mij regelmatig zeer bruikbaar.

https://github.com/olikraus/u8g2/wiki/gallery#9-june-2018--step-by-ste…

mel

Golden Member

u=ir betekent niet :U bent ingenieur..

Op 8 september 2022 22:20:52 schreef benleentje:
SPi heeft dan
kloksignaal
Data out
data in
Chipselect

en daarnaast soms nog extra stuur signalen die niet direct tot spi horen zoals een reset.

De chips die displays aansturen hebben dan vaak ook nog een "register select". Soms ook "command/ -DATA " genoemd (of andersom: ik weet dat niet uit m'n hoofd).

De "data out" (MISO in SPI terminologie) wil wel eens niet aangesloten worden.

Ik ben nu bezig met een display chip waar een slordige 1300 pootjes aanzitten. Dus naast de "pin besparende mode" (SPI) heeft zo'n chip ook nog een 8bit parallel bus (en/of 16, 18 of 24). Maar op zo'n "handige breakout" hoeft die niet altijd aangesloten te zijn.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
buckfast_beekeeper

Golden Member

De ILI9341 schermpjes (320px x 240px) zijn wel handige schermpjes. Gemakkelijk aan te sturen. Verkrijgbaar in verschillende groottes. Met en zonder touch en met en zonder geheugenkaart. Er zijn online ook vele voorbeelden van te vinden.

Veel info op de main page.

Voor een ESP32


#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

#define TFT_CS   22
#define TFT_RST  25
#define TFT_DC   14
//#define TFT_MOSI 23 // standaard poort
//#define TFT_CLK  18 // standaard poort
//#define TFT_MISO 19 // standaard poort

const uint8_t rotation = 1; //0 = header onderaan. 1 = header rechts, 2 = header bovenaan, 3 = header links

const uint16_t backColor = ILI9341_BLACK;
const uint16_t textColor = ILI9341_WHITE;


//Adafruit_ILI9341 ILI9341 = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);// is software SPI en meer dan 10x trager.
Adafruit_ILI9341 ILI9341 = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);


void setupDisplay() {
  ILI9341.begin();
  /*
    // read diagnostics (optional but can help debug problems)
    uint8_t x = ILI9341.readcommand8(ILI9341_RDMODE);
    Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
    x = ILI9341.readcommand8(ILI9341_RDMADCTL);
    Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
    x = ILI9341.readcommand8(ILI9341_RDPIXFMT);
    Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
    x = ILI9341.readcommand8(ILI9341_RDIMGFMT);
    Serial.print("Image Format: 0x"); Serial.println(x, HEX);
    x = ILI9341.readcommand8(ILI9341_RDSELFDIAG);
    Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX);
  */
  ILI9341.setRotation(rotation);
  ILI9341.fillScreen(backColor);
  ILI9341.setCursor(10, 20);
  ILI9341.setTextSize(2);
  ILI9341.setTextColor(textColor, backColor); // zorgt er voor dat bijvoorbeeld een wijzigend cijfer uiteindelijk geen wit vlak wordt
  //ILI9341.setTextColor(textColor); // Stuurt alleen de tekst pixels naar het display. Waardoor je uiteindelijk een wit vlak krijgt
}

Het backlight stuur ik aan met PWM (Mosfet) en een weerstand van 18Ω naar 5V.

Van Lambiek wordt goede geuze gemaakt.
blackdog

Golden Member

Hi,

Weer even wat feedback over deze GMG12864-06D display's.

Het is mij gelukt beeld te krijgen na het zoeken van ondermeer jullie links.

Hier het lijstje van de aansluitingen op een Arduino Nano/Uno voor deze displays


Display Pin       Nano/Uno Pin
1 = CS            10
2 = RSE           8
3 = RS            9
4 = SCL           13
5 = SI            11

6 = VDD (+)       5V voeding, 3.3V nog niet getest, er lijkt een Voedingsweerstand R4 te zijn, die gejumpert kan worden voor 3.3V
7 = VSS (-)       Massa

A = +LED via R, iK heb 120Ω gebruikt bij 5V voedingspanning, er valt dan 2,7V over de LED
K = -LED wordt aan massa verbonden bij mijn testen

Ik heb en mix gebruikt van wat voorbeelden, bij de eerste test kon ik net zien dat er tekst verscheen op het display, "Hello World"
Dus dat betekend dat het display een contrast commando nodig had om het goed te zetten, dit omdat deze displays geen potmeter achterop het scherm hebben voor de contrast instelling.

Na wat zoeken bij Olikraus zijn U8g2 informatie vond ik een test code die het contrast laat zien d.m.v. een variabele die in stapjes van vijf op of af loopt.
Dat was wat lastig inschatten de gebruikte timings waarde waren te kort, na wat aanpassingen om de variabel langer in tijd te maken kon ik het inschatten,
voor alle drie de displays's die ik heb ligt het optimum tussen de 60 en 70.
In de test code hieronder heb ik de contrastwaarde vastgezet zodat ik het netjes kon vastleggen op de foto hoe het display er uit ziet.

https://www.bramcam.nl/Diversen/128x64-LCD-04.png

.
Mijn voorkeur gaat uit naar de basis kleur, dat is zoals de foto het laat zien.
De andere is ondermeer zwarte achtergrond en "witte" letters en de laatste is een blauwe achtergrond en witte letters.
Ik had een Amber display ook moeten mee bestellen, maar dat heb ik jammer genoeg vergeten.

Kijk ook naar het kader deze geeft het 128x64 bereik aan en dat is aardig wat kleiner dan het glas van het display.

Voor de volledigheid laat ik ook de twee andere kleuren zien.

Dis is de gene met de blauwe achtergrond.
https://www.bramcam.nl/Diversen/128x64-LCD-05.png

.

Dis is de gene met de zwarte achtergrond.
https://www.bramcam.nl/Diversen/128x64-LCD-06.png

.
Code voor het testen, de pinnummers staan al in deze code goed gezet voor deze displays.
De meeste code die niet nodig is heb ik al verwijderd, zie dit stukje code hieronder maar als de eerste stap om iets zichtbaar op de diplays te krijgen met een Arduino Uno of Nano.


/*

  HelloWorld.ino

  Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)

  Copyright (c) 2016, olikraus@gmail.com
  All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, 
  are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
  * Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  

*/

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

/*
  U8g2lib Example Overview:
    Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
    Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
    U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
    
*/

U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // contrast improved version for ERC12864

// End of constructor list


void testContrast(uint8_t contrast)
{
  static char cstr[6];
  static char vstr[4];
  u8g2.setContrast(60);                     //    <= Even vast gezette contrast instelling voor vergelijking van de drie displays, vervang "60" door  "contrast" en de code werkt weer
  strcpy( cstr, u8x8_u8toa(contrast, 3));
  u8g2.firstPage();
  do {
    //u8g2.setFont(u8g2_font_ncenB14_tr);
    u8g2.setFont(u8g2_font_courB24_tn);
    u8g2.drawStr(0,28, cstr);
    u8g2.drawFrame (0, 0, 128, 64);

  } while ( u8g2.nextPage() );
}


void setup(void) {

  u8g2.begin();  
}



void loop(void) {
  uint8_t i;
  i = 255;
  do
  {
    testContrast(255-i);
    delay(200);
    i-=1;
  } while( i != 0 );
  i = 255;
  delay(100);
  do
  {
    testContrast(i);
    delay(200);
    i-=1;
  } while( i != 0 );
  delay(100);
}

De testcode voor het contrast staat hierboven dus uitgeschakeld maar in de opmerking kan je zien als je de waarde van "60" vervangt voor "contrast" dat de code weer werkt.

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
Henry S.

Moderator

Hi Bram, de foto moet nog gemaakt worden?

Deze post is niet door ChatGPT gegenereerd. De 2019 CO labvoeding.
blackdog

Golden Member

Hi Henry, :)

Nop gewoon vergeten.. van vemoeidheid op de bank in slaap gevallen.
Nu weer tijd om te sporten, daarna plaats ik hem even.

Dank voor het melden!

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
blackdog

Golden Member

Hi,

Ik heb de foto's geplaatst.

Bij de twee laatste foto's liep de teller, hierdoor is er wat ghosting zichtbaar bij de tweede en de derde foto.
De belichting is ook niet optimaal, maar ik ka nhier niet even snel een zonnetje toveren. :-)

Alleen bij het display met de "normale" kleuren heb je het zelfde effect als bij het bekende Nokia 5110 display,
ook zonder verlichting is het display goed zichtbaar, bij de twee andere heb je echt de achtergrond verlichting nodig.

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.
buckfast_beekeeper

Golden Member

Op 11 september 2022 19:43:53 schreef blackdog:
[...]

Alleen bij het display met de "normale" kleuren heb je het zelfde effect als bij het bekende Nokia 5110 display,
ook zonder verlichting is het display goed zichtbaar,

Dat is dan een Transflective.

Op 11 september 2022 19:43:53 schreef blackdog bij de twee andere heb je echt de achtergrond verlichting nodig.

Groet,
Bram

Dat is dan een Transmissive.

info.

Van Lambiek wordt goede geuze gemaakt.
blackdog

Golden Member

Hi buckfast_beekeeper

Dank je voor de link, dat is een duidelijke uitleg van het LCD type. :-)

Groet,
Bram

You have your way. I have my way. As for the right way, the correct way, and the only way, it does not exist.