Lektion 16: I2C OLED Display

I detta enkla lektion använder vi oss av följande produkter:
ATMega328P R3 (kompatibelt med Arduino®) som finns i vårt kit.
OLED 128×64 med I2C anslutning

Förutom detta krävs lödning av stiftlist/hylslist på displayen samt kablage.

I detta exempel använder Arduino® IDE version 1.8.5 samt det populära u8g2 LIBet för grafiska displayer, detta LIB måste installeras först, detta gör man via menyn: Sketch -> Include Library -> Manage Libraries…

När “Library Manager” fönstret är uppe, sök efter “u8g2”, välj sedan “U8g2 by oliver” och “install”. Man kan behöva starta om Arduino® IDE efter detta. I detta exempel har vi installerat version 2.21.8.

U8g2 har sin github här och där finns alla funktioner förklarade, vi kommer inte gå in på hur de fungerar utan i detta exempel kommer vi bara skriva ut 2 textrader för att verifiera att inkopplingen fungerar.

OLED displayen kan drivas med 5V eller 3.3V (vi kör med 5VDC i vårt exempel) och endast 4 anslutningar krävs. Anslut OLED displayen till matningen och jord (5VDC/VCC samt GND) och sedan I2C bussens 2 anslutningar, SCL på OLED till SCL på utvecklingskortet samt SDA på OLED till SDA på utvecklingskortet. I2C bussen finns även på A4 och A6 på utvecklingskortet, men kan finnas på andra ställen på andra kort.

Ladda ner källkoden till testprojektet och öppna det i Arduino® IDE, ställ in det kort du använder (i vårt fall Arduino®/Genuino Uno) samt den port (i vårt fall COM38) som utvecklingskortet är anslutit till. Välj därefter “Upload” och om allt funkar som det skall skall texten komma upp som bilden ovan.

Det finns många exempel som man kan testa, ni finner dem under File -> Examples -> U8g2. När ni väl öppnat ett exempel så finns det otroligt många displayer som stödjs (samt varianter av samma typ som den vi har), men för att få vår att fungera så skriv in raden som finns nedan (ni ser var den skall ligga i vårt exempel):

U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

Det kan vara så att inställningen ovan inte fungerar med andra displayer ni köpt på annat håll eller ibland fungerar det inte med den vi har heller, det beror på att det finns så många varianter av samma display och man vet aldrig vilken man får när man köper hem dessa från Kina, de kan även se fysiskt lite olika ut med komponentval på baksidan. Men vi testar 1-2st från varje batch vi får hem för att säkerställa att de fungerar.

Notera att man kan inte göra allt för komplicerade projekt med ett enkelt kort baserat på ATMega328P (kanske alla exempel inte fungerar eller är avsett för en annan displaystorlek), då libbet kräver en hel del Flash och Ram, men då kan man använda sig av en SAMD21 Cortex M0+ baserat kort såsom dessa för att få plats med mer kod, dessutom är den snabbare och har mer RAM minne. Detta demoprogram använder cirka 8Kb av 32Kb Flash (sen tar bootloadern lite till) och 1,5Kb av 2K RAM på en ATMega328P att jämföra med en SAMD21G18 som har 256K Flash samt 32K RAM!

SAMD21 körs med 3.3V, men denna OLED fungerar fint med den spänningen med.

Föregående Sida    –    Nästa Sida