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

C-Library Atmel Studio für Grafik-Displaymodul 128x64

  1. Dirk
    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.

    [​IMG]

    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

    [​IMG]

    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

Letzte Rezensionen

  1. sunny22
    sunny22
    5/5,
    Version: 1.0
    Super! Dankeschön :-)
  2. developerx
    developerx
    5/5,
    Version: 1.0
    Super! Das Displayprojekt hat mir als Basis für mein Projekt sehr geholfen :-)
  3. hdusel
    hdusel
    5/5,
    Version: 1.0
    Schöner, übersichtlicher und verständlicher Code. Prima!
  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden