Atmel Studio 6 Library für Displaymodul-Familien XV-TFT2428T, XV-TFT50D und XV-TFT60D

Atmel Studio 6 Library für Displaymodul-Familien XV-TFT2428T, XV-TFT50D und XV-TFT60D

Logo_XVDisplay_Library_AtmelStudio.jpg



Für die Displaymodul-Familien XV-TFT2428T, XV-TFT50D und XV-TFT60D von XV-Display.de habe ich eine Atmel Studio 6 Library (C) geschrieben. Mit der Library könnt ihr einfach und schnell ein Displaymodul aus einer der drei Familien in euer Arduino-Projekt einbinden. Die Library mit Beispiel-Programm (Demonstration der Library Funktionen) könnt ihr am Ende des Beitrages herunterladen.

Die Schnittstelle aller Displaymodule ist übrigens kompatibel, auch der Befehlssatz ist bei allen Modulen gleich. Ihr könnt also einfach Displays gegeneinander austauschen. Beachten müsst ihr lediglich eine ggf. unterschiedliche Auflösung und bei größeren Displays eine höhere Stromaufnahme.

Entwicklungsumgebung

A. Software

avr_praxis_de_atmel_studio32px.jpg

Atmel Studio 6


B. Hardware
Ich habe das Nano Developmentboard mit einem ATmega32A genutzt, da man die Displaymodule einfach an das Board anschließen kann. Zudem liefert das Nano Board auch für die größeren Displays ausreichend Strom (viele andere Boards nutzen einen Linearregler, je nach Eingangsspannung ist dies oft nur für kleine Ströme ausreichend). Da die Displaymodule durch die SPI-Schnittstelle wenig Anforderung an die Hardware des Applikations-Mikrocontrollers stellen, könnt ihr natürlich auch ein einfaches Minimalsystem verwenden (Mikrocontrollermodul oder Aufbau auf Breadboard oder Lochraster). Hierfür empfehle ich den ZIF-Adapter FPC-ADAP10-TC zum Anschluß der Display-Flachbandleitung. (In Verbindung mit dem Nano Board benötigt ihr diesen nicht, da ein ZIF-Stecker bereits auf dem Board vorhanden ist.)

Die Programmierung des Mikrocontrollers erfolgt mit dem ISP-Programmer des Nano Boards, die eigene Programmiersoftware ist unabhängig vom Compiler und kann somit mit Atmel Studio, BascomAVR, Arduino usw. eingesetzt werden.

avr_praxis_de_nano_xvdisplay01.jpg


Library verwenden
Ihr fügt einfach in eurem Atmel Studio Projekt folgende Dateien hinzu:

  • Config.h
  • Display.c
  • Display.h
  • Display_Interface_AVR8.h (benötigt, wenn AVR Mikrocontroller eingesetzt wird)
  • Display_Interface_XMEGA.h (benötigt, wenn Xmega Mikrocontroller eingesetzt wird)


xv_display_atmel_studio_projectfiles.png



In eurem Main-C-File bindet ihr die Lib dann durch #include "Display.h" ein. Danach könnt ihr die Display-Funktionen folgendermaßen aufrufen:

Display_DisplayText_F(0, 0, PSTR("Beispieltext"));

Die Initialisierung in eurem Programm erfolgt zum Beispiel so ...


CodeBox C
int main (void)
{
  // ...
  Display_Init();
 
  // wait 300ms or poll BUSY flag. After power up, display module
  // initializes.
  _delay_ms(300);
  while (DISPLAY_IS_BUSY) {  }
  // Display module is now ready to receive commands.

  // set backlight to a specific level
  Display_SetBacklightIntensity(255);  // highest brightness

  // ...

}



Konfiguration

Ihr nehmt lediglich wenige grundsätzliche Einstellungen vor. Wichtig sind hier die Angaben für Architektur (AVR oder Xmega), Touchpanel und Schnittstelle. Die Library-Funktionen können sowohl mit SoftwareSPI, wie auch mit HardwareSPI umgehen.

Die Einstellungen findet ihr in Config.h.

Features der Library

  • unterstützt AVR und AVR XMEGA Mikrocontroller
  • Touchpanel-Funktionen deaktivierbar, so spart man sich etwas Flash-Memory
  • es wird sowohl SoftwareSPI wie auch HardwareSPI unterstützt

SoftwareSPI:
Alle Signale sind beliebigen freien IO-Pins zuordenbar.

HardwareSPI:
Die Signale MISO, MOSI und SCK sind den IO-Pins des Hardware-Moduls zugeordnet, alle anderen Signale sind freien IO-Pins zuordenbar.
Bei HardwareSPI kann der Prescaler eingestellt werden (prescaler allowed values 2, 4, 8, 16, 32, 64, 128). Die Übertragungsrate sollte 2MHz nicht überschreiten.


Hinweise zum Demo-Projekt
Im Download ist ebenfalls ein Demo-Projekt enthalten (XVDisplayExampleProject.c), welches alle Funktionen der Library nutzt. Das Projekt ist für ein Display mit der Auflösung 240x320 und mit Touchpanel optimiert und zeigt euch die Anwendung der Funktionen. Am Ende des Beitrages findet ihr ein Video, welches den Ablauf des Programms zeigt.

Einige Funktionen nutzen das UserFlashMemory (Fonts + Bilder) und die MicroSDCard (Bilder). Damit auch diese Funktionen demonstriert werden können, müsst ihr zunächst UserFlashMemory programmieren und Bilddateien auf eine MicroSDCard kopieren. So geht ihr vor:

  1. UserFlashMemory programmieren: Kopiert die im Download enthaltene Resourcen-Datei flash.xvc auf die MicroSDCard (FAT32). Die MicroSDCard legt ihr in den Kartenhalter des Displays ein und aktiviert die Betriebsspannung. Das Display programmiert nun das UserFlashMemory. Nach erfolgreicher Programmierung, deaktiviert ihr die Betriebsspannung und entnehmt die MicroSDCard. (wichtig: flash.xvc von der MicroSDCard löschen, wenn ihr diese für Bilder verwendet).
  2. Im Download sind auch einige Beispielbilder (Windows Bitmap 24bit) enthalten. Diese kopiert ihr auf die MicroSDCard (FAT32). Die MicroSDCard legt ihr bei deaktivierter Betriebsspannung in den Kartenhalter des Displaymoduls ein.
Beispielbilder und flash.xvc befinden sich im Verzeichnis Resources des Downloads.

Schnittstelle
Beispielkonfiguration: Nano Board mit AVR ATmega32A, SoftwareSPI und HardwareSPI (siehe Config.h)


CodeBox C
  /***
  Display SPI Signal assignment
  ***/

  #define DISPLAY_SPI_PORT  PORTB
  #define DISPLAY_SPI_DATADIR  DDRB
  #define DISPLAY_SPI_INPORT  PINB
  #define DISPLAY_SPI_MISO  PB6
  #define DISPLAY_SPI_MOSI  PB5
  #define DISPLAY_SPI_SCK  PB7

  #define DISPLAY_SPI_SPEED_FCPU_DIV 2 // allowed values: 2, 4, 8, 16, 32, 64, 128 (for spi module only)


  /***
  Display Control Signal assignment   
  ***/

  #define DISPLAY_CONTROL_PORT  PORTB
  #define DISPLAY_CONTROL_DATADIR  DDRB
  #define DISPLAY_CONTROL_INPORT  PINB
  #define DISPLAY_SIGNAL_BUSY  PB3
  #define DISPLAY_SIGNAL_CS  PB4
  #define DISPLAY_SIGNAL_TINT  PB2




Übersicht der Funktionen

Eine Zusammenstellung aller Prototypen findet ihr auch in der Datei Display.h.

Display Mode


CodeBox C
uint8_t SetDisplayMode(uint8_t mode);
//parameter: dmPortrait (display always starts in this mode)
//  dmLandscape


Set Color


CodeBox C
uint8_t SetPenColor(uint8_t r, uint8_t g, uint8_t b);
uint8_t SetBrushColor(uint8_t r, uint8_t g, uint8_t b);
uint8_t SetPenColor_Index(uint32_t color);  // 00 bb gg rr
uint8_t SetBrushColor_Index(uint32_t color); // 00 bb gg rr   


Graphic Fill Screen


CodeBox C
   
uint8_t FillScreen_BrushColor(void);
uint8_t FillScreen_PenColor(void);
uint8_t FillScreen_RGBColor(uint8_t r, uint8_t g, uint8_t b);


Graphic Draw Rectangle


CodeBox C
   
uint8_t DrawRect_PenColor(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
uint8_t DrawRect_PenColorFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
uint8_t DrawRect_BrushColor(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
uint8_t DrawRect_BrushColorFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
uint8_t DrawRect_RGBColor(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t r, uint8_t g, uint8_t b);
uint8_t DrawRect_RGBColorFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t r, uint8_t g, uint8_t b);


Graphic Draw Line


CodeBox C
uint8_t MoveTo(uint16_t x, uint16_t y);
uint8_t LineTo_PenColor(uint16_t x, uint16_t y);
uint8_t LineTo_BrushColor(uint16_t x, uint16_t y);
uint8_t LineTo_RGBColor(uint16_t x, uint16_t y, uint8_t r, uint8_t g, uint8_t b);


Graphic Draw Pixel


CodeBox C
uint8_t DrawPixel_PenColor(uint16_t x, uint16_t y);
uint8_t DrawPixel_BrushColor(uint16_t x, uint16_t y);
uint8_t DrawPixel_RGBColor(uint16_t x, uint16_t y, uint8_t r, uint8_t g, uint8_t b);


Graphic Draw Circle


CodeBox C
uint8_t DrawCircle_PenColor(uint16_t x, uint16_t y, uint8_t radius);
uint8_t DrawCircle_BrushColor(uint16_t x, uint16_t y, uint8_t radius);
uint8_t DrawCircle_RGBColor(uint16_t x, uint16_t y, uint8_t radius, uint8_t r, uint8_t g, uint8_t b);


Display Text


CodeBox C
uint8_t DisplayText(uint16_t x, uint16_t y, unsigned char *s);
uint8_t DisplayText_F(uint16_t x, uint16_t y, const char *s);


Display Numbers


CodeBox C
uint8_t DisplayDecimal8(uint16_t x, uint16_t y, uint8_t value);
uint8_t DisplayDecimal16(uint16_t x, uint16_t y, uint16_t value);
uint8_t DisplayDecimal32(uint16_t x, uint16_t y, uint32_t value);
uint8_t DisplayDecimalSigned8(uint16_t x, uint16_t y, uint8_t value);
uint8_t DisplayDecimalSigned16(uint16_t x, uint16_t y, uint16_t value);
uint8_t DisplayDecimalSigned32(uint16_t x, uint16_t y, uint32_t value);
uint8_t DisplayHex8(uint16_t x, uint16_t y, uint8_t value);
uint8_t DisplayHex16(uint16_t x, uint16_t y, uint16_t value);
uint8_t DisplayHex32(uint16_t x, uint16_t y, uint32_t value);
uint8_t DisplayHex64(uint16_t x, uint16_t y, uint64_t value);
uint8_t DisplayBinary8(uint16_t x, uint16_t y, uint8_t value);
uint8_t DisplayBinary16(uint16_t x, uint16_t y, uint16_t value);
 
uint8_t NumericalConfig(uint8_t config);
//parameter config (bit mask):
//NCONF_NoPlus  : display no plus (DisplayDecimalSigned)
//NCONF_NoZero  : display no leading zero (DisplayDecimal, DisplayDecimalSigned)
//NCONF_LeftAdjust  : display left adjust (DisplayDecimal, DisplayDecimalSigned)


User Flash Memory


CodeBox C
   
uint8_t DisplayImagePackageImage(uint16_t x, uint16_t y, uint8_t packageindex, uint16_t itemindex);
// parameter: x, y, packageindex (0..63), itemindex (0..65535)   


MicroSDCard


CodeBox C
   
uint8_t DisplaySDCardImage(uint16_t x, uint16_t y, unsigned char *filename);
//parameter: x, y, *filename (points to string in sram)
uint8_t DisplaySDCardImage_F(uint16_t x, uint16_t y, const char *filename);
//parameter: x, y, *filename (points to string in flash memory)  


Draw Image Data


CodeBox C
  
uint8_t DrawImage_Begin(uint16_t x, uint16_t y, uint16_t width, uint16_t height);
void DrawImage_WritePixel(uint8_t r, uint8_t g, uint8_t b);
void DrawImage_Stop(void);


Touchpanel


CodeBox C
  
uint8_t TouchPanel_SetConfig(uint8_t config)
//parameter: TOUCH_EVENT_CONT | TOUCH_EVENT_DOWN | TOUCH_EVENT_UP
//return: dsSuccess, dsTimeout, dsBusy (display status)
   
uint8_t TouchPanel_ReadEvent(void)
//return: dsSuccess, dsTimeout, dsBusy (display status)  
//  Display.Events  
   
uint8_t TouchPanel_ReadCont(void)
//return: dsSuccess, dsTimeout, dsBusy (display status)
//  Display.TouchX, Display.TouchY
   
uint8_t TouchPanel_ReadDown(void)
//return: dsSuccess, dsTimeout, dsBusy (display status)
//  Display.TouchDownX, Display.TouchDownY
   
uint8_t TouchPanel_ReadUp(void)
//return: dsSuccess, dsTimeout, dsBusy (display status)
//  Display.TouchUpX, Display.TouchUpY




Download



[URL="http://www.avr-praxis.de/media/AVR-PRAXiS-de_XVDisplay_AtmelStudio_C.zip"]AVR-PRAXiS-de_XVDisplay_AtmelStudio.zip

Atmel Studio C Library for the display module families TFT2428T, TFT50D and TFT60D from XV-Display.de.

Author: Dirk
BSD License

Revision 1



Links


XV-Display im Onlineshop www.mikrocontroller-praxis.de
Nano Developmentboard im Onlineshop www.mikrocontroller-praxis.de

Atmel Studio 6 (www.atmel.com)
Forum: Arduino Library für XV-Display Displaymodule
Forum: BascomAVR Library für XV-Display Displaymodule

Forum: Mikrocontroller-Praxis.de Online-Shop
Neu: Erweiterung der Displaymodul-Familie XV-TFT60D von XV-Display
Neu im Onlineshop: Intelligentes TFT Displaymodul XV-TFT60D 5,0 inch 800x480 Pixel
Neu: Displaymodul-Familie XV-TFT60D von XV-Display
Ankündigung: Developmentboard für AVR im DIP Gehäuse



Video

Das folgende Video zeigt den Ablauf der Demosoftware (XVDisplayExampleProject.c)


  • Set intensity of backlight
  • Set display mode portrait / landscape
  • Set pen and brush color
  • Graphic fill screen
  • Graphic draw rectangle
  • Graphic draw line / line to
  • Graphic draw pixel
  • Graphic draw circle
  • Display text
  • Display numbers
  • Display some images stored in user flash memory
  • Display some images stored on micro sd card
  • Make use of embedded font
  • Make use of font stored in user flash memory
  • Using touchpanel functions
  • Display raw rgb data


Ein Hinweis zu den Fonts: Im Video seht ihr auch einge sehr große Fonts, diese wurden von mir mit der zugehörigen Windowssoftware konvertiert und in das Display über die MicroSD-Karte programmiert.

Falls der FPC-ADAP10-TC verwendet wird, hier die Anschlußbelegung:

Als Adapter vom ZIF-Kabel der Displayseite auf das Rastermaß 2,54mm Stiftleisten eignet sich zum Beispiel
FPC-ADAP10-TC aus dem mikrocontroller-praxis.de Shop.


[/URL]
Autor
Dirk
Aufrufe
1.089
Erstellt am
Letzte Bearbeitung
Bewertung
0,00 Stern(e) 0 Bewertung(en)

Weitere Ressourcen von Dirk

Ü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)