#include #define _XTAL_FREQ 4000000 void init() { #pragma config CONFIG1 = 0b01100111101000; #pragma config CONFIG2 = 0b11011101111111; #pragma config CONFIG3 = 0b00111110100111; #pragma config CONFIG4 = 0b01111111111000; //IOs festlegen TRISA = 0x00; //RA7-0 Output TRISB = 0b00000010; //RB1 muss Eingang sein für Schalterabfrage TRISC = 0b00000010; // TRISD = 0x00; TRISE = 0b00001010; //Input RE1 für BUSY, RE3 für MCLR ANSELC = 0b00000011; PMD0 = 0b00000000; //FOSC freischalten //ANSELC = 0b00001111; //RC0-1 als analog Eingang für Quarz //ANSELB = 0b00000000; //RB1 muss als Digitalinput definiert sein //TX1STA = 0b00100100; //Einstellungen für RS232 Kommunikation } void spi_init() { PPSLOCK = 0x55; PPSLOCK = 0xAA; PPSLOCK = 0x00; SSP1STAT = 0b01000000; SSP1CON1 = 0b00100000; // Kein Overflow detect;serial port enable;clock idle low;Master mode clock Fosc/4 RC2PPS = 0x14; //RC2 als Ausgang für SPO RC3PPS = 0x13; //RC3 als Ausgang für SCK WPUE = 0b00000010; //Pull-Up für RE1 } void EPD_SendCommand(unsigned char Reg) { LATEbits.LATE0 = 0; //senden eines Kommandos LATAbits.LATA3 = 0; //MCU-Kommunikation freischalten SSP1BUF = Reg; //daten über SPI Schnittstelle senden __delay_us(2); LATAbits.LATA3 = 1; //MCU-Kommunikation sperren } void EPD_SendData(unsigned char data) { LATEbits.LATE0 = 1; //senden von Daten LATAbits.LATA3 = 0; //MCU-Kommunikation freischalten SSP1BUF = data; //daten über SPI Schnittstelle senden __delay_us(2); LATAbits.LATA3 = 1; //MCU-Kommunikation sperren } void e_paper_init() { //*************Reset e_paper*************************************** LATAbits.LATA2 = 1; __delay_ms(200); LATAbits.LATA2 = 0; __delay_ms(200); LATAbits.LATA2 =1; __delay_ms(200); //***********Power settings***************************************** EPD_SendCommand(0x01); EPD_SendData(0x37); EPD_SendData(0x00); //************Panel settings***************************************** EPD_SendCommand(0x00); EPD_SendData(0x2F); EPD_SendData(0x00); //*****************soft start***************************************** EPD_SendCommand(0x06); EPD_SendData(0xc7); EPD_SendData(0xcc); EPD_SendData(0x28); //*****************power on******************************************* EPD_SendCommand(0x04); __delay_ms(5); //****************PLL control**************************************** EPD_SendCommand(0x30); EPD_SendData(0x3c); //****************Temperaturkalibrierung EPD_SendCommand(0x41); EPD_SendData(0x00); //*****************VCOM und DATA interval Setting********************* EPD_SendCommand(0x50); EPD_SendData(0x77); //******************TCON settings************************************* EPD_SendCommand(0x60); EPD_SendData(0x22); //*****************TCON resolution*********************************** EPD_SendCommand(0x61); unsigned char low = 0b10000000; unsigned char high = 0b00000010; EPD_SendData(low); //source 640 EPD_SendData(high); high = 0b00000001; low = 0b10000000; EPD_SendData(low); //gate 384 EPD_SendData(high); //*****************VCM_DC_Settings************************************* EPD_SendCommand(0x82); EPD_SendData(0x1E); //decide by LUT file //******************flash mode**************************************** EPD_SendCommand(0xe5); //FLASH MODE EPD_SendData(0x03); } void bottomside() { for(int i=0; i<192 ; i++) { for(int j=0;j<320;j++) { //Daten an Display schicken "weiß" EPD_SendData(0x33); } } for(int i = 192;i<384;i++) { for(int j= 0 ; j<320;j++) { //Daten an Displays schicekn "schwarz" EPD_SendData(0x00); } } EPD_SendCommand(0x11); __delay_ms(5000); } void topside () { for(int i=0; i<192 ; i++) { for(int j=0;j<320;j++) { //Daten an Display schicken "schwarz" EPD_SendData(0x00); } } for(int i = 192;i<384;i++) { for(int j= 0 ; j<320;j++) { //Daten an Displays schicekn "weiß" EPD_SendData(0x33); } } EPD_SendCommand(0x11); __delay_ms(5000); } void Clear() { //EPD_SendCommand(0x22); __delay_us(5); //************All Pixel white****************** EPD_SendCommand(0x10); //Start data transmission for(int i = 0;i<384;i++) { for(int j= 0 ; j<320;j++) { //Daten an Displays schicken "weiß" EPD_SendData(0x33); } } EPD_SendCommand(0x11); //Stop data transmission __delay_ms(1000); EPD_SendCommand(0x12); //Refresh display __delay_ms(1000); } void main(void) { int zustand=0; init(); spi_init(); e_paper_init(); while (1) { Clear(); __delay_ms(5000); } }