KAMAMI ZL31ARM: OLED w SmartSwitch’u i STM32F103
Jedna linia SW przycisku jest dołączona do napięcia zasilania (pin +3,3V złącza Con2 płytki ZL31ARM) druga linia SW jest dołączona do linii PA3 mikrokontrolera (pin PA3 złącza Con2). Naciśnięcie przycisku obsługiwane jest przez przerwanie EXTI konfigurowane w funkcji ConfigEXTI, nie się zagłębiał w temat obsługi przerwań mikrokontrolera STM32 ponieważ jest mnóstwo materiałów na ten temat.
Linie interfejsu SPI przycisku są dołączone do interfejsu SPI1 mikrokontrolera, dodatkowo linia PA1 mikrokontrolera dołączona jest do wejścia D/C kontrolera wyświetlacza przycisku, w zależności od jej stanu dane przesyłane interfejsem SPI są traktowane jako: instrukcje dla kontrolera (dla D/C = 0) lub dane do wyświetlenia (dla D/C = 1). Przebieg czasowy ramki danych SPI przestawiono na rysunku 3.
Rys. 3. Ramka danych wysyłanych do kontrolera wyświetlacza ISC15ANP4
Przed użyciem przycisku należy skonfigurować sterownik wyświetlacza, zadanie to wykonywane jest w funkcji ISC15ANP4_Init. Dokumentacja nie opisuje funkcji poszczególnych instrukcji, zawiera tylko dwa zestawy instrukcji konfiguracyjnych, z czego jedna zapewnia wyższą jasność obrazu i 15000 godzin działania, druga – niższą jasność i 30000 godzin działania, ja wykorzystałem tę pierwszą:
DC_Low(); SS_Low(); SPI_Transmit(0x81); SPI_Transmit(0x19); // Contras for color A SS_High(); SS_Low(); SPI_Transmit(0x82); SPI_Transmit(0x14); // Contras for color B SS_High(); SS_Low(); SPI_Transmit(0x83); SPI_Transmit(0x24); // Contras for color C SS_High(); SS_Low(); SPI_Transmit(0x87); SPI_Transmit(0x0F); // Master current control SS_High(); SS_Low(); SPI_Transmit(0xA0); SPI_Transmit(0x70); // Remap & color depth setting SS_High(); SS_Low(); SPI_Transmit(0xA1); SPI_Transmit(0x00); // Set display start line SS_High(); SS_Low(); SPI_Transmit(0xA2); SPI_Transmit(0x10); // Set display offset SS_High(); SS_Low(); SPI_Transmit(0xA4); // Normal display SS_High(); SS_Low(); SPI_Transmit(0xA8); SPI_Transmit(0x2F); // Multiplex ratio SS_High(); SS_Low(); SPI_Transmit(0xAB); SPI_Transmit(0x00); SPI_Transmit(0x12); SPI_Transmit(0x0C); SPI_Transmit(0x14); SPI_Transmit(0x12); //Dim mode setting for color A, B &C SS_High(); SS_Low(); SPI_Transmit(0xAD); SPI_Transmit(0x8E); // Master configuration SS_High(); SS_Low(); SPI_Transmit(0xB0); SPI_Transmit(0x0B); // Power save mode SS_High(); SS_Low(); SPI_Transmit(0xB1); SPI_Transmit(0x44); // Phase 1 and 2 period adjustment SS_High(); SS_Low(); SPI_Transmit(0xB3); SPI_Transmit(0xA0); // Display clock divider/ oscillator frequency SS_High(); SS_Low(); SPI_Transmit(0xB9); // Enable linear gray scale SS_High(); SS_Low(); SPI_Transmit(0xBB); SPI_Transmit(0x12); // Pre charge level SS_High(); SS_Low(); SPI_Transmit(0xBE); SPI_Transmit(0x28); // Set Vcomh SS_High(); SS_Low(); SPI_Transmit(0xAF); // Display on in normal mode SS_High(); DC_High();