C-Library für Displaymodule XV-GDM128X64 und XV-GDM128X64-RGB (Atmel Studio 6)
Achtung:
Diesen Beitrag werde ich durch weitere Erklärungen, Bilder und Video erweitern !
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:
XV-GDM128X64
XV-GDM128X64-RGB
Weitere Erklärungen folgen noch in diesem Beitrag!
Features der Library:
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.
Durch die Routine Display_Update() wird der gesamte Grafikspeicher des Displaymoduls aktualisiert. Die Framerate ist natürlich direkt von der SPI-Übertragungsrate abhängig.
* 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
Prototypen der Funktionen
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.)
Eine Lösung für Arduino (C++) und auch für BascomAVR (Basic) werde ich noch erstellen, naja zumindest habe ich es geplant
Das folgende Video zeigt den Ablauf des Demoprogramms
[video=youtube;Dm7iPxb4uJA]http://www.youtube.com/watch?v=Dm7iPxb4uJA[/video]
Achtung:
Diesen Beitrag werde ich durch weitere Erklärungen, Bilder und Video erweitern !
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:
XV-GDM128X64
XV-GDM128X64-RGB
Weitere Erklärungen folgen noch in diesem Beitrag!
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.
SPI | System | Frame rate |
SoftwareSPI | ATmega32A @ 16MHz | 110Hz (9ms Aktualisierungszeit) |
HardwareSPI | ATmega32A @ 16MHz 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
Code:
[B]System[/B]
void Display_Init(void);
void Display_Update(void);
void Display_SetContrast(uint8_t i);
Parameter: i = 0..40, center is 20
[B]Display graphic[/B]
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)
[B]Display text[/B]
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
[B]Decimal numbers[/B]
void Display_Decimal8(int16_t x, int16_t y, uint8_t d);
void Display_Decimal16(int16_t x, int16_t y, uint16_t d);
[B]Backlight[/B]
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.)
Eine Lösung für Arduino (C++) und auch für BascomAVR (Basic) werde ich noch erstellen, naja zumindest habe ich es geplant
Library_XV-GDM128x64_AtmelStudio.zip Atmel Studio C Library for the display modules XV-GDM128X64 and XV-GDM128X64-RGB (www.xv-display.de). Author: Dirk BSD License Revision 1 |
Das folgende Video zeigt den Ablauf des Demoprogramms
[video=youtube;Dm7iPxb4uJA]http://www.youtube.com/watch?v=Dm7iPxb4uJA[/video]