Arduino und Grafikdisplay

Hi,

ich bins wieder :wink:

habe meinen Display wiedergefunden, wollte diesen nun mit dem Arduino betreiben.
Es ist ein Grafikdisplay (Kein Farb, sondern Dot Matrix) mit Touchscreen einheit vom Pollin.

Das Board ist von Samsung, der Chip ist ein SEC KS0086, 20 Pins.

Das Datasheet sagt folgendes:

PIN NO.      SYMBOL      LEVEL      FUNCTION
1               Vss                           Ground
2               Vdd                          Power Supply for Logic Circuit
3               V0                            Power Supply for LCD
4               RS              H/L         H-> Instruction L-> Data
5               R/W           H/L         H: Data Read, L: Data Write
6               E               H/L         Enable
7~14          DB0-DB7      H/L         Data Bus Line
15             CS              L             Chip Enable Active "L"
16             Res             L            Reset Active "L"
17             Ree                          Negative Voltage Output (-10V)
18             Dis off         H           
19             + LED                        Hintergrund
20             - LED                        Hintergrundbeleuchtung


ABSOLUTELY MAXIMUM RATINGS

ITEM                                SYMBOL       STANDARD VALUE                  UNIT
                                                       MIN     TYP     Max.
Supply Voltage for logic       Vdd-Vss       0        --        7.0                   V
Supply Voltage for LCD dri.  Vdd-Vee      0        --        19.0                 V
Input Voltage                     VI             Vss      --         Vdd                 V

ELECTRICAL CHARACTERISTICS

ITEM                                   SYMBOL        CONDITION        SPEC                   UNIT
Logic circuit Power supply        Vdd               --                 4,75->5.5               V
Voltage                                 V0                 --                -5.0->20.0              V
EL Drive Voltage                     Vel               fEL=500HZ      90-> 110                V
Hight Level Output Voltage        VIH            Vdd=5+-0.25V   (0.7->1.0)x VDD      V
Low Level Output Voltage         VIL             Vdd=5+-0.25V   (0->0.3) x VDD        V
Hight Level Output Voltage       VOH            VDD=5+-0.25V  2.4-> VDD               V
Low Level Output Voltage         IOL             VDD=5+-0.25V  0->0.4                    V
Current Consumption               IDD             VDD=5V           15.0MAX               mA
                                           IEE              VEE=--10V        4.0MAX               mA
                                           IEL              VEL=110V         20.0(AC) MAX       mA
                                                             fEL=500HZ

Nun habe ich aber auf dem Arduino ein Script für einen kleinen Buchstaben LCD drauf. Klar geht das nicht.
Jetzt hab ich aber im Internet ein Script gefunden für den KS0108 oder Ähnlichen chip (müsste also gehen).

Link: Arduino Playground - GLCDks0108

Allerdings ist der Pinout für den alten Arduino Mega und nicht für den Uno.

Wisst ihr nun wie ich den Anschließen kann? und wird das Script funktionieren?

MfG :wink:

Ich bezweifle stark daß der KS0086 und der KS0108 kompatibel sind.
Grüße Uwe

hmm das ist natürlich sehr blöd... Gibt es denn eine lib für meuinen KS0086?

Moin,

ich hoffe dass es nicht schlimm ist dass ich hier einen Doppelpost mache:

Ichh abe nun einen Nokia 3310 Display angeschlossen.

Ich habe folgendes problem:

Der Code von Kuk (siehe hier) http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1200398529/15 funktioniert (größtenteils).

Man sieht Buchstaben, aber der Display spinnt ein wenig. Irgendwann sieht man nurnoch schwarze streifen über den Bildschirm.

Ich habe mir die 5510 Library runtergeladen (der 5510 Display ist gleich wie der 3310). Angeschlossen wie im beispielscript!
Allerdings kommt beim Compilen immer folgender fehler:

SCRIPT:

// LCD5110_ViewFont (C)2011 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program is a demo of the included full font.
//
// This program requires a Nokia 5110 LCD module.
//
// It is assumed that the LCD module is connected to
// the following pins using a levelshifter to get the
// correct voltage to the module.
//      SCK  - Pin 8
//      MOSI - Pin 9
//      DC   - Pin 10
//      RST  - Pin 11
//      CS   - Pin 12
//

#include <LCD5110_Basic.h>

LCD5110 myGLCD(8,9,10,11,12);

extern uint8_t SmallFont[];

void setup()
{
  myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
}

void loop()
{
  myGLCD.clrScr();
  myGLCD.print("Upper case:", LEFT, 0);
  myGLCD.print("ABCDEFGHIJKLM", CENTER, 16);
  myGLCD.print("NOPQRSTUVWXYZ", CENTER, 24);
  delay (5000);
  
  myGLCD.clrScr();
  myGLCD.print("Lower case:", LEFT, 0);
  myGLCD.print("abcdefghijklm", CENTER, 16);
  myGLCD.print("nopqrstuvwxyz", CENTER, 24);
  delay (5000);
  
  myGLCD.clrScr();
  myGLCD.print("Numbers:", LEFT, 0);
  myGLCD.print("0123456789", CENTER, 16);
  delay (5000);
  
  myGLCD.clrScr();
  myGLCD.print("Special:", LEFT, 0);
  myGLCD.print("!\"#$%&'()*+,-.", CENTER, 16);
  myGLCD.print("/:;<=>?@[\\]^_`", CENTER, 24);
  myGLCD.print("{|}~", CENTER, 32);
  delay (5000);
}

"No matching function for a call to "LCD5510::setFont(uint8_t[])

In file included from LCD5110_ViewFont.cpp:18:
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:41:22: error: WProgram.h: No such file or directory
In file included from LCD5110_ViewFont.cpp:18:
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:45: error: ISO C++ forbids declaration of 'uint8_t' with no type
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:45: error: expected ';' before '*' token
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:46: error: 'uint8_t' does not name a type
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:47: error: 'uint8_t' does not name a type
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:48: error: 'uint8_t' does not name a type
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:49: error: 'uint8_t' does not name a type
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:50: error: 'uint8_t' does not name a type
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:64: error: 'byte' has not been declared
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:65: error: 'uint8_t' has not been declared
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:66: error: 'uint8_t' has not been declared
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:69: error: ISO C++ forbids declaration of 'uint8_t' with no type
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:69: error: expected ';' before '*' token
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:70: error: 'uint8_t' does not name a type
LCD5110_ViewFont.cpp: In function 'void setup()':
LCD5110_ViewFont.pde:-1: error: no matching function for call to 'LCD5110::setFont(uint8_t [])'
C:\Users\Basti\Desktop\arduino-1.0\libraries\LCD5110_Basic/LCD5110_Basic.h:65: note: candidates are: void LCD5110::setFont(int*)

hat jemand eine idee?

Wäre sehr toll, dann könnte ich endlich mal den Display nutzen.

MfG!

Hi

Ich bin gerade dabei eine etwas allgemeinere Arduino Lib für Displays zusammenzustellen. Dein Nokia Display müsste von einen PCD8544 Controller angesteuert sein. Allerdings ist die Lib noch sehr beta. Vor allem fehlt noch die Doku...

Download hier: Google Code Archive - Long-term storage for Google Code Project Hosting.
Wenn das HelloWorld läuft, wäre das ja schon ein guter Anfang...

Oliver

Hey,

benutzt du schon die Arduino IDE 1.0?
Wenn ja versuchs mal mit der 022er, bei der 1.0 wurde doch einiges umgekrempelt, sodass alte Sketches manchmal nicht mehr laufen.

Hi,

geniale sache @ olikraus! ich werds mal probieren. Ja, der LCD wird von einem PCD8544 gesteuert. Ich kann ja wenn du magst als Versuchskaninchen dienen und dir daten durchgeben. Ich werd es mal testen ob das HelloWorld! Script läuft.

@kduin:
Danke, ich versuch mal 22. Ich habe mir schon am anfang gedacht dass es warhscheinlich an 1.0 Liegt.

Vielen dank :slight_smile:

Edit: ... :slight_smile:

Gibt gute fortschritte!

Ein bild sagt mehr als 1000 Worte:

Sagen 2 Bilder dann mehr als 2000 Worte?

An Olikraus: Du siehst, deine lib funktioniert jetzt schon sehr gut.

Allerdings hat sie ein paar gravierende Nachteile:

  • Das Compilen dauert fast eine Minute

  • Ich weiß nicht ob es an meiner Hardware/an mir oder an der Lib liegt:

  • Jede halbe oder ganze Sekunde leuchtet die LED auf dem Arduino (pin 13) und das Bild pulsiert somit

  • Ich habe eine art Fadein fadeout effekt, konnte dies aber mithilfe des Elkos beheben - Größtenteils

  • Ich musste zudem dein Hello World ändern. Man hat das Ende des buchstaben d von World sowie das Ausrufezeichen nicht mehr gesehen. (Koordinaten waren 0, 20)

Sonst - TOP! Danke für die Hilfe Halte mic hauf dem Laufenden, wie ich sagte, ich spiele gern dein Versuchskaninchen :wink:

MfG

Hi

Na, das ist ja mal nicht schlecht, wenn U8GLIB bei Dir funktioniert.

Langes compilieren: Ja das liegt an den mitgelieferten fonts. Es sind ca. 200 fonts dabei, die auch schon dokumentiert sind:
http://code.google.com/p/u8glib/wiki/fontgroup

Gesetzt wird der font mit

u8g.setFont(u8g_font_unifont);

Ersetze beispielsweise "u8g_font_unifont" mit "u8g_font_tpss" (Google Code Archive - Long-term storage for Google Code Project Hosting.).

Wenn Du in das Verzeichnis "U8glib/utility/" gehst, dann könntest Du dort alle "u8g_font_*.c" dateien löschen, die Du nicht benötigst. Dann wäre das compilieren schneller. Ich arbeite aber noch an einer anderen Lösung...

  • Ich musste zudem dein Hello World ändern. Man hat das Ende des buchstaben d von World sowie das Ausrufezeichen nicht mehr gesehen. (Koordinaten waren 0, 20)

Klar, der Text war zu breit für Dein Display (ist mir beim Testen auch aufgefallen). Mit einem schmaleren/kleineren Font könnte das klappen.

  • Jede halbe oder ganze Sekunde leuchtet die LED auf dem Arduino (pin 13) und das Bild pulsiert somit

Die LED leuchtet, weil alle Sekunde das Bild neu aufgebaut wird (siehe Beispielcode):

void loop(void) {
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  delay(1000);
}

Abhilfe: Pin 13 nicht benutzen und entsprechend, die SCK Leitung auf einen anderen Pin legen (z.B. 5):

U8GLIB_PCD8544 u8g(5, 11, 10, 9, 8);   // SPI communication: SCK = 5, MOSI = 11, CS = 10, A0 = 9, Reset = 8

Sonst - TOP! Danke für die Hilfe Halte mic hauf dem Laufenden, wie ich sagte, ich spiele gern dein Versuchskaninchen

Immer gerne. Am besten Fehler und Verbesserungsideen im U8GLIB Issue Tracker eingeben:
http://code.google.com/p/u8glib/issues/list
Gerne auch auf Deutsch.

Die lib ist eigentlich soweit schon fertig programmiert, es fehlt halt die Doku. Alle Graphik-Befehle stehen in U8glib.h, beispielsweise:

    void drawPixel(u8g_uint_t x, u8g_uint_t y)
    void drawHLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w)
    void drawVLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t h)     
    void drawFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
    void drawBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)

Oliver

Wundervoll! Nun fang ich an mein Projekt zu finalisieren.

Eine sache noch - Kann ich mit deiner library auch "zeichnen"? Ich würde gerne eine art Bild malen. Ist das überhaupt möglich? wenn ja, wie ? Muss ich Pixel für Pixel ins script schreiben?

MfG

Hi

Anbei der Code zum Zeichnen einer Bitmap (kleiner Turm):

const uint8_t rook_bitmap[] PROGMEM = {
  0x00,         // 00000000 
  0x55,         // 01010101
  0x7f,          // 01111111
  0x3e,         // 00111110
  0x3e,         // 00111110 
  0x3e,         // 00111110
  0x3e,         // 00111110 
  0x7f           // 01111111
};

void draw(void) {
  // graphic commands to redraw the complete screen should be placed here  
  u8g.drawBitmapP( 0, 0, 1, 8, rook_bitmap);
}

void setup(void) {
}

void loop(void) {
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  delay(1000);
}

Die Bitmap wird im Flash abgelegt und belegt damit keinen RAM.

Ich hab' auch schon mal mit der API-Referenz angefangen:
http://code.google.com/p/u8glib/wiki/userreference

Oliver