OLED#

Algemene informatie#

De functies zijn geschreven voor een OLED schermpje met de SDD1306 controller. Het schermpje bestaat uit 8 rijen (ook wel pages) met 128 kolommen. De 8 rijen bevatten 8 pixels, elke kolom slechts 1 pixel.

../_images/oled.png

Er is een standaard font meegeleverd waarbij je een grote of kleine versie kunt gebruiken.

Voorbeelden#

Om gewoon te kunnen schrijven naar het schermpje kun je het volgende doen

//i2c initialiseren
i2cInitialize(MASTER);
//OLED initaliseren
oledInitialize();

oledSetOrientation(FLIPPED); //of NORMAL
oledClearScreen(); //Maak scherm leeg
oledPrint(20,1, "Temp: ", small); //print "Temp: " naar rij 1 en kolom 20 (van de 128)

Je kunt natuurlijk ook je eigen dingen schrijven om bijvoorbeeld figuren te tekenen. Het nadeel is dat je een hele rij moet beschrijven.

//de helft van de kollomen
//alleen rij 1
//data is 0b10101010 voor elke kolom.
oledFillBox(0, 64, 1, 1, 0xAA);

Gezien het minimale geheugen van de msp430 is er de mogelijkheid een 2x128 buffer te maken. Dit is dan te gebruiken met de framebufferfuncties zoals in het main.c voorbeeld is te zien.

uint8_t pageBuffer[2][128] = {0};

const uint8_t sine[] =
{
0x7,0x8,0xa,0xb,0xc,0xd,0xd,0xe,
0xe,0xe,0xd,0xd,0xc,0xb,0xa,0x8,
0x7,0x6,0x4,0x3,0x2,0x1,0x1,0x0,
0x0,0x0,0x1,0x1,0x2,0x3,0x4,0x6,
};

//intialiseren hoef je maar 1 keer te doen
oledInitialize();
oledSetOrientation(FLIPPED); //of NORMAL

//scherm leegmaken
oledClearScreen();

n++;
n=n%32;

for(kolom=0; kolom<128;kolom++)
{
   //nu kunnen we per pixel aangeven wat we willen
   oledSetBufferPixel(pageBuffer, kolom,sine[(kolom+n+1)%32]);
   oledClearBufferPixel(pageBuffer, kolom,sine[(kolom+n)%32]);
}

//dan hele buffer in 1 keer schrijven naar 3e rij, beide pages
oledWriteBuffer(pageBuffer, 3, 2);

Functies#

Functions

void oledInitialize(void)#

Dit initialiseert P1.6 en P1.7 naar I2C en bereidt het display voor.

void oledSetOrientation(Rotation orientation)#

Hiermee kun je het display draaien. Handig voor een breadboard.

Let op dat het bestaande display niet wordt omgedraaid. Het heeft slechts invloed op toekomstige tekenopdrachten.

Parameters:

orientation – Flipped of Normal

void oledSetArea(uint8_t startKolom, uint8_t startPage, uint8_t stopKolom, uint8_t stopPage)#

Dit stelt een rechthoek in waarbinnen de pixels worden aangepast.

Als je bijvoorbeeld een rechthoek van (0,0) tot (2,10) selecteert, dan kun je hierna 2*10 bytes sturen om de 8*2*10 pixels op te vullen. Volgorde is vanaf de bovenste page, eerst de page opvullen van links naar rechts vervolgens een volgende page van links naar rechts.

int rij,kolom;
oledSetArea(0,0,2,10);
i2cStart();
i2cSendByte(OLED_CONTROL_BYTE_DATA_STREAM);
for(rij=0; rij<2; rij++)
{
     for(kolom=0; kolom<10; kolom++)
     {
         i2cSendByte(...);
     }
}
i2cStop();

Parameters:
  • startPage – Bovenste page om mee te beginnen

  • stopPage – Onderste page om bij te stoppen

  • startKolom – Linker kolom

  • stopKolom – Rechter kolom

void oledFillBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t waarde)#

Vul een box met dezelfde waarde voor elke kolom.

Let hierbij op dat het LSB->MSB van boven->beneden gaat.

oledFillBox(0,0,127,7, 0xAA); //allemaal lijnen!

void oledClearBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)#

Maakt de hele box zwart.

Zie ook

oledFillBox

void oledClearScreen()#

Maakt het scherm zwart.

Zie ook

oledClearBox

uint8_t oledDrawFontChar(uint8_t page, uint8_t column, char c, Font grootte)#

Dit tekent een karakter met een bepaalde grootte.

Parameters:
  • page – Op welke page komt het karakter

  • column – Op welke kolom begint het karakter

  • c – Het te printen karakter

  • grootte – De gekozen font-size

Returns:

Geeft de laatst gebruikte kolom terug.

uint8_t oledPrint(uint8_t column, uint8_t page, char *c, Font grootte)#

Dit tekent een string met een bepaalde grootte.

Let op dat deze functie slechts een string print. Je kunt niet zomaar een variabele printen. Bekijk temperatuur.c om te zien hoe een getal geprint kan worden.

Gezien elk karakter een variabele breedte heeft, is niet van ten voren bekend hoeveel pixels een string breed is. De returnwaarde geeft daarom bij welk x-coordinaat het printen is gestopt. Een volgende string zou dus hierachter verder kunnen gaan.

Parameters:
  • page – Op welke page komt de string

  • column – Op welke kolom begint de string

  • c – De zin om te printen

  • grootte – De gekozen font-size

Returns:

Geeft de laatst gebruikte kolom terug.

void oledWriteBuffer(uint8_t buffer[2][128], uint8_t page, uint8_t npages)#

Schrijf de pageBuffer naar een bepaalde page.

Parameters:
  • page – Op welke page wordt de buffer geplaatst

  • npages – Hoeveel pages gaat het om, 1 of 2?

void oledSetBufferPixel(uint8_t buffer[2][128], uint8_t x, uint8_t y)#

Zet een pixel aan op de x,y locatie.

Let op, is anders georienteerd dan het display zelf Coordinaat (0,0) is links onder, (15,127) is rechtsboven

Zie ook

Gebruik oledWriteBuffer om het buffer ook te schrijven naar het OLED display.

Parameters:
  • x – x-coordinaat van 0 tot 127

  • y – y-coordinaat van 0 tot 15

void oledClearBufferPixel(uint8_t buffer[2][128], uint8_t x, uint8_t y)#

Zet een pixel uit op de x,y locatie.

Variables

const uint8_t smallfont[]#
const uint8_t bigfont[]#
const uint16_t homespunTTBRK_7ptDescriptors[97][2]#
const uint16_t homespunTTBRK_16ptDescriptors[133][2]#
const uint8_t oledInitialisation[] = {OLED_CONTROL_BYTE_CMD_SINGLE, OLED_CMD_DISPLAY_OFF, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_DISPLAY_CLK_DIV, 0x80, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_MUX_RATIO, 0x3F, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_DISPLAY_OFFSET, 0x00, OLED_CONTROL_BYTE_CMD_SINGLE, OLED_CMD_SET_DISPLAY_START_LINE, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_CHARGE_PUMP, 0x14, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_MEMORY_ADDR_MODE, 0x00, OLED_CONTROL_BYTE_CMD_SINGLE, OLED_CMD_SET_SEGMENT_REMAP, OLED_CONTROL_BYTE_CMD_SINGLE, OLED_CMD_SET_COM_SCAN_MODE, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_COM_PIN_MAP, 0x12, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_CONTRAST, 0xFF, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_PRECHARGE, 0xF1, OLED_CONTROL_BYTE_CMD_STREAM, OLED_CMD_SET_VCOMH_DESELCT, 0x40, OLED_CONTROL_BYTE_CMD_SINGLE, OLED_CMD_DISPLAY_RAM, OLED_CONTROL_BYTE_CMD_SINGLE, OLED_CMD_DISPLAY_NORMAL, OLED_CONTROL_BYTE_CMD_SINGLE, OLED_CMD_DISPLAY_ON}#

Enum#

enum Rotation#

Mogelijke rotaties van het scherm.

Values:

enumerator NORMAL#
enumerator FLIPPED#