//***************************************************************************** // ssd1803a_spi.h // // Treiber für EA DOGS104W-A (Controller: SSD1803A) über SPI (3-Draht, // Software-Chip-Select) an einem ATmega328P. // // F_CPU muss vor dem Include definiert sein (z.B. 16000000UL). // // Pinbelegung (frei anpassbar, siehe Defines unten): // * SCK -> PB5 (Hardware-SPI) -> Display DB0/SCLK // * MOSI -> PB3 (Hardware-SPI) -> Display DB1/SID // * MISO -> PB4 (Hardware-SPI) -> Display DB2/SOD (optional, hier ungenutzt) // * /CS -> PB2 (frei wählbar) -> Display /CS // * RESET -> PD4 (frei wählbar) -> Display RESET // * // * WICHTIG (Hardware): // * - DB3..DB7 des Controllers müssen im Serial-Modus fest auf GND liegen. // * - IM1 = H (VDDIO), IM2 = L (VSS) müssen für Serial-Mode gesetzt sein. // * Beim fertigen EA-DOG-Modul (DOGS104W-A) ist das i.d.R. bereits über // * Platinen-Bestückung/Strapping vorgegeben - bitte im Pinout-Diagramm // * des konkreten Moduls gegenprüfen. //***************************************************************************** #ifndef SSD1803A_SPI_H #define SSD1803A_SPI_H #include // ---------- Pin-Konfiguration ---------- #define LCD_CS_DDR DDRB #define LCD_CS_PORT PORTB #define LCD_CS_PIN PB2 #define LCD_RST_DDR DDRD #define LCD_RST_PORT PORTD #define LCD_RST_PIN PD4 #define SPI_DDR DDRB #define SPI_MOSI DDB3 #define SPI_MISO DDB4 #define SPI_SCK DDB5 // Display-Geometrie (EA DOGS104W-A: 2..4 Zeilen x 10 Zeichen) #define LCD_COLS 10 #define LCD_ROTATING #define TAB0 0x38 #define TAB1 0x3A #define TAB2 0x39 #define ROMSEL 0x72 //Fkt. des Displays, Cursorfkt. #define DISPLAY_CLEAR 0x01 #define DISPLAY_ON 0x0C #define DISPLAY_OFF 0x08 #define CURSOR_ON 0x0E #define CURSOR_OFF 0x0C #define CURSOR_BLINK 0x0F #define CURSOR_RETURN 0x02 #define CURSOR_HOME 0x02 //Rueckwaerts schreiben #define ENTRY_MODE 0x04 //Vorwaerts schreiben #define ENTRY_OFF 0x06 #define CURSOR_LEFT 0x10 #define CURSOR_RIGHT 0x14 //Schrift nach rechts schieben #define LINESHIFT_R 0x1C #define LINESHIFT_L 0x18 #define CGRAM 0x40 #define DDRAM 0x80 typedef enum { ZEICHENSATZ1 = 0x00, // R2=0, R1=0 ZEICHENSATZ2 = 0x04, // R2=0, R1=1 ZEICHENSATZ3 = 0x0C // R2=1, R1=1 <-- NICHT 0x08! } ZEICHENSATZ_t; // Initialisiert SPI-Hardware, Pins und den Controller (inkl. Reset). void lcd_init(void); void spi_init(void); // Sendet ein Kommando (RS=0) bzw. ein Datenbyte (RS=1). void lcd_command(uint8_t cmd); void lcd_data(uint8_t data); // Display löschen (löscht auch DDRAM und setzt Cursor auf 0,0). void lcd_clear(void); // Cursor auf Position (Zeile 1..LCD_ROWS,Spalte 1..LCD_COLS) setzen. void lcd_goto(uint8_t row, uint8_t col); // Zeichenkette (0-terminiert) an aktueller Cursorposition ausgeben. void lcd_write_str(uint8_t row, uint8_t col, const char *str); // Einzelnes Zeichen ausgeben. void lcd_write_char(char c); // Kontrast nachtraeglich einstellen (0..63, siehe SSD1803A-Datenblatt 9.14/9.16). void lcd_set_contrast(uint8_t contrast); void lcd_funktion(unsigned char uc_Fkt); void lcd_cursor(void); void lcd_backspace(void); void lcd_newline(void); void lcd_return(void); void lcd_lineclear(uint8_t uc_zeile); void lcd_Zeichensatz(ZEICHENSATZ_t Zeichensatz); void lcd_createchar(unsigned char uc_adr,char * pc_pattern); void lcd_Display_drehen(uint8_t x); #endif