C-Library für Grafik-Displaymodul 128x64

C-Library für Grafik-Displaymodul 128x64 1.0

Für die Displaymodule XV-GDM128X64 und XV-GDM128X64-RGB (mit RGB LED-Backlight)
habe ich eine C-Library für Atmel Studio 6 geschrieben.

Diese möchte ich euch nun zur Verfügung stellen.



Beide Displays habe ich euch bereits im Forum Mikrocontroller-Praxis.de Onlineshop vorgestellt.

Links zu den Themen im Forum:
XV-GDM128X64 (ohne Backlight)
XV-GDM128X64-RGB (mit Backlight)


Features der Library:
  • einfach in Atmel Studio Projekt einbinden
  • für AVR und AVR Xmega Mikrocontroller (einfach in Config.h die Architektur auswählen)
  • unterstützt SoftwareSPI und HardwareSPI
  • Display-Modi:
    • Landscape (Breite 128px, Höhe 64px) und
    • Portrait (Breite 64px, Höhe 128px)
  • Signale der Schnittstelle (A0, RESET\, CS\, MOSI und SCK):
    • bei SoftwareSPI beliebigen IO-Pins zuzuordnen,
    • bei HarwareSPI steht MOSI und SCK fest
  • sind mehrere SPI-Module vorhanden (Xmega), kann ein beliebiges SPI-Modul ausgewählt werden (HardwareSPI)
  • aktuell sind zwei Fonts (FONT_1 und FONT_2) integriert. Der größere FONT_2 kann "abgeschaltet" werden, so dass man Flash-Momory einspart
  • des Display-Memory befindet sich im Applikations-Mikrocontroller. Die Funktionen der Lib haben somit schnellen Zugriff auf den Speicher (belegt wird 1.024Byte SRAM), dadurch...
  • jeder Pixel kann adressiert werden (Adressierungsmodi sind: Pixel setzen, Pixel löschen, Pixel mit EXOR-Funktion)
  • grafische Grundfunktionen sind implementiert: Draw_Pixel, Draw_Line, Draw_Rect, Draw_Circle.
  • Textausgabe: Display_Text und Display_Text_F (Text im Flash Memory)
  • Zahlen: 8bit und 16bit dezimal ausgeben (weiteres werde ich vielleicht noch einbauen oder kann auch von der eigenen Software über die Display_Text Funktionen ausgegeben werden).
  • Text-Modi: normal/invers, Hintergrund vorhanden oder "durchsichtig"
  • Funtion zur Kontrasteinstellung: SetContrast
  • Grafiken ausgeben, die sich im Flash Memory befinden (Display_Image)
  • RGB-LED-Backlight kann von der Library gesteuert werden. Signale können invertiert werden (alles einstellbar in Config.h, PWM habe ich nicht realisiert)

Interface der Displaymodule (SPI):

Insgesamt werden 5 Signale benötigt. Ist SoftwareSPI gewählt, können diese an beliebige freie IO-Pins gelegt werden. Ist HardwareSPI gewählt, liegt MOSI und SCK an den IO-Pins des SPI-Moduls, die anderen bleiben frei.
  • MOSI (DATA)
  • SCK
  • CS\
  • A0
  • RESET\
Durch die Routine Display_Update() wird der gesamte Grafikspeicher des Displaymoduls aktualisiert. Die Framerate ist natürlich direkt von der SPI-Übertragungsrate abhängig.

Gemessen mit System ATmega32A @ 16MHz

SoftwareSPI
110Hz (9ms Aktualisierungszeit)

HardwareSPI
fsck = 8MHz* (Prescaler 2)
258Hz (3,5ms Aktualisierungszeit)


* testweise habe ich hier die Übertragungsrate sehr hoch gewählt. Die Übertragungsrate sollte 5MHz nicht überschreiten, also bei HardwareSPI den Prescaler entsprechend auswählen (siehe Config.h).



Dateien
  • GraphicDisplayModule128X64.c
  • Config.h
  • Display.c
  • Display.h
  • Display_Interface_AVR8.h
  • Display_Interface_XMEGA.h
  • Font.h
  • Image.h


Prototypen der Funktionen

System


CodeBox C und C++
void Display_Init(void);
void Display_Update(void);

void Display_SetContrast(uint8_t i);
Parameter: i = 0..40, center is 20


Display graphic


CodeBox C und C++
void Display_Clear(void);
void Display_Fill(void);
void Display_DrawPixel(int16_t x, int16_t y);
void Display_DrawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1);
void Display_DrawRect(int16_t x, int16_t y, int16_t w, int16_t h);
void Display_DrawRect_Fill(int16_t x, int16_t y, int16_t w, int16_t h);
void Display_DrawCircle(int16_t x0, int16_t y0, int16_t radius);

SetPenMode(mode)
Parameter: mode = pmSET, pmCLEAR, pmEXOR
pmSet     : set pixel
pmCLEAR    : clear pixel
pmEXOR    : exor pixel

void Display_DrawImage(int16_t x1, int16_t y1, const uint8_t *image)



Display text


CodeBox C und C++
void Display_Text(uint8_t x, uint8_t y, char *string);
void Display_Text_F(uint8_t x, uint8_t y, const char *string);

SetFont(index)
Parameter: index = FONT_1 or FONT_2
Font 1: width: 6px, height: 8px
Font 2: width:10px, height 16px, memory usage about 5326 Byte
(Font 2 available if EMBED_FONT2 = true, see Config.h)

SetTextMode(mode)
Parameter: mode = (tmNormal or tmInverse) and (tmBrushSolid or tmBrushClear)
tmNormal    : display text normal
tmInverse    : display text inverse
tmBrushSolid: backround of text is solid (inversed to pen color)
tmBrushClear: background of text is not visible
tmInit        : normal and solid brush


Decimal numbers


CodeBox C und C++
void Display_Decimal8(int16_t x, int16_t y, uint8_t d);
void Display_Decimal16(int16_t x, int16_t y, uint16_t d);


Backlight


CodeBox C und C++
   
void Display_SetBacklight_By_Color(uint8_t color);
Parameter color: blOFF, blRED, blGREEN, blYELLOW, blBLUE, blPURPLE, blCYAN, blWHITE

Available if backlight controlled by lib (DISPLAY_BACKLIGHT_CONTROL = true), see Config.h.






Datenblatt:
XV-GDM128X64 Datasheet.pdf
XV-GDM128X64-RGB Datasheet.pdf

Links in den Onlineshop:
XV-GDM128X64
XV-GDM128X64-RGB


Mein Bilderalbum im Forum
Die Bilder im Album zeigen das Displaymodul am Nano Board mit ATmega32A (16MHz, VCC5V).
(Leider stimmt die Reihenfolge der Bilder nicht mit der Abfolge des Demoprogramms überein.)

Nutzen könnt ihr die Lib unter
BSD Licence


Das folgende Video zeigt den Ablauf des Demoprogramms
Autor
Dirk
Downloads
56
Aufrufe
98
Erstellt am
Letzte Bearbeitung
Bewertung
5,00 Stern(e) 3 Bewertungen

Weitere Ressourcen von Dirk

Diese Ressource weiterempfehlen

Aktuellste Rezensionen

Super! Dankeschön :-)
Super! Das Displayprojekt hat mir als Basis für mein Projekt sehr geholfen :-)
Schöner, übersichtlicher und verständlicher Code. Prima!

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)