#include "lcd_spi.h" #include #include #define SPI_DDR DDRB #define SPI_MOSI DDB3 #define SPI_MISO DDB4 #define SPI_SCK DDB5 #define LCD_CS DDB2 #define LCD_RESET DDB1 #define LCD_CS_1 PORTB |= (1 << LCD_CS); #define LCD_CS_0 PORTB &= ~(1 << LCD_CS); #define LCD_RESET_1 PORTB |= (1 << LCD_RESET); #define LCD_RESET_0 PORTB &= ~(1 << LCD_RESET); void lcd_init(void) { LCD_CS_1; _delay_ms(1); LCD_CS_0; spi_masterInit(); LCD_CS_1; //Reset - Achtung: Reset-Leitung wird durch Schaltung invertiert LCD_CS_0; _delay_ms(1); LCD_RESET_0 _delay_ms(1); //_delay_us(200); LCD_RESET_1 _delay_ms(1); LCD_RESET_0 _delay_ms(1); LCD_CS_1; _delay_ms(1); spi_sendCommand(0x3A); //8 bit data length extension Bit RE=1; REV=0 //_delay_ms(100); spi_sendCommand(0x09); //4 line display //_delay_ms(50); spi_sendCommand(0x06); //bottom view //_delay_ms(50); spi_sendCommand(0x1E); //BS1=1 //_delay_ms(50); spi_sendCommand(0x39); //8 bit data length extension Bit RE=0; IS=1 //_delay_ms(50); spi_sendCommand(0x1B); //BS0=1 -> Bias=1/6 //_delay_ms(50); spi_sendCommand(0x6E); //Devider on and set value //_delay_ms(50); spi_sendCommand(0x56); //Booster on and set contrast (DB1=C5, DB0=C4) //_delay_ms(50); spi_sendCommand(0x7A); //Set contrast (DB3-DB0=C3-C0) //spi_masterTransmit(0x74); //Set contrast (DB3-DB0=C3-C0) //_delay_ms(50); spi_sendCommand(0x38); //8 bit data length extension Bit RE=0; IS=0 //_delay_ms(50); spi_sendCommand(0x0F); //Display on, cursor on, blink on //_delay_ms(50); _delay_ms(20); // wait spi_sendCommand(0x02); //Home spi_sendCommand(0x80); // spi_sendData(0x30); //0 anzeigen } void spi_masterInit(void) { //Output PINS SPI_DDR |= (1< 2MHz/16 ~ 125kHz | (1<> 4) & 0x0F); LCD_CS_1; } void spi_sendCommand(uint8_t data) { LCD_CS_0; spi_put(0x1F); spi_put(data & 0x0F); spi_put((data >> 4) & 0x0F); LCD_CS_1; } void spi_slaveInit(void) { SPI_DDR |= (1<