mirror of
https://github.com/Matiasus/SSD1306.git
synced 2024-10-03 18:18:46 -04:00
Version v3.0.0
This commit is contained in:
parent
fa8496ce6a
commit
9d5ed3f0af
39
README.md
39
README.md
@ -6,29 +6,28 @@ Detailed information are described in [Datasheet SSD1306](https://cdn-shop.adafr
|
||||
## Library
|
||||
C library is aimed for driving [0.96" OLED display with SSD1306 driver](#demonstration) 128x64 or 128x32 version through TWI's (I2C). Settings for particular versions:
|
||||
- 128x64 version
|
||||
- command argument **SSD1306_SET_MUX_RATIO** set to *63* (ssd1306.c)
|
||||
- command argument **SSD1306_SET_MUX_RATIO** set to *0x3F* (ssd1306.c)
|
||||
- command argument **SSD1306_COM_PIN_CONF** set to *0x12* (ssd1306.c)
|
||||
- **END_PAGE_ADDR** set to 7 (ssd1306.h)
|
||||
- 128x32 version
|
||||
- command argument **SSD1306_SET_MUX_RATIO** set to *31* (ssd1306.c)
|
||||
- command argument **SSD1306_SET_MUX_RATIO** set to *0x1F* (ssd1306.c)
|
||||
- command argument **SSD1306_COM_PIN_CONF** set to *0x02* (ssd1306.c)
|
||||
- **END_PAGE_ADDR** set to 3 (ssd1306.h)
|
||||
|
||||
### Versions
|
||||
- 1.0 - basic functions. The first publication.
|
||||
- 2.0 - more changes:
|
||||
- rebuild to cacheMemLcd array. It means that every request is stored in cache array and then is depicted on the display by function [SSD1306_UpdateScreen (uint8_t)](#ssd1306_updatescreen).
|
||||
- Added new function -> [SSD1306_DrawLine (uint8_t, uint8_t, uint8_t, uint8_t)](#ssd1306_drawline). Possible depicted any line (horizontal, vertical, with slope).
|
||||
- Possible to use for more than 1 display (not tested, cause displays that I have avialable had the same addresses).
|
||||
- 1.0.0 - basic functions. The first publication.
|
||||
- [2.0.0](https://github.com/Matiasus/SSD1306/tree/v2.0.0) - more changes:
|
||||
- rebuild to 'cacheMemLcd' array approach. It means that every request is stored in 'cacheMemLcd' array (RAM) and by the [SSD1306_UpdateScreen (uint8_t)](#ssd1306_updatescreen) function is printed on the display.
|
||||
- added new function -> [SSD1306_DrawLine (uint8_t, uint8_t, uint8_t, uint8_t)](#ssd1306_drawline). Possible depicted any line (horizontal, vertical, with slope).
|
||||
- possible to use for more than 1 display (not tested).
|
||||
- **!!!** ~1kB RAM memory consumption.
|
||||
- 3.0 - simplified alphanumeric version
|
||||
- used for displaying alphanumeric characters
|
||||
- **one display** applicable
|
||||
- [3.0.0](https://github.com/Matiasus/SSD1306/tree/v3.0.0) - simplified alphanumeric version
|
||||
- displaying alphanumeric characters
|
||||
- for **one display** applicable
|
||||
- **only few RAM bytes** consumption
|
||||
- **!!!** no graphic functions
|
||||
- **!!!** no graphic functions like drawLine
|
||||
|
||||
## Dependencies
|
||||
- [font.c](https://github.com/Matiasus/SSD1306/blob/readme-edits/lib/font.c)
|
||||
- [font.h](https://github.com/Matiasus/SSD1306/blob/readme-edits/lib/font.h)
|
||||
- [twi.c](https://github.com/Matiasus/SSD1306/blob/readme-edits/lib/twi.c)
|
||||
- [twi.h](https://github.com/Matiasus/SSD1306/blob/readme-edits/lib/twi.h)
|
||||
@ -125,17 +124,13 @@ Init sequence OLED display was defined according to page 64 (next to last page)
|
||||
// | 0xAF |
|
||||
// +---------------------------+
|
||||
```
|
||||
## Functions
|
||||
- [SSD1306_Init (void)](#ssd1306_init) - Init display
|
||||
- [SSD1306_ClearScreen (void)](#ssd1306_clearscreen) - Clear screen
|
||||
- [SSD1306_NormalScreen (void)](#ssd1306_normalscreen) - Normal screen
|
||||
- [SSD1306_InverseScreen (void)](#ssd1306_inversescreen) - Inverse screen
|
||||
- [SSD1306_SetWindow (uint8_t, uint8_t, uint8_t, uint8_t)](#ssd1306_setwindow) - Set window
|
||||
- [SSD1306_SetPosition (uint8_t, uint8_t)](#ssd1306_setposition) - Set position
|
||||
- [SSD1306_DrawChar (char, enum E_Font)](#ssd1306_drawchar) - Draw specific character (bold | underline | normal)
|
||||
- [SSD1306_DrawString (char*, enum E_Font)](#ssd1306_drawstring) - Draw specific string (bold | underline | normal)
|
||||
## Demonstration version v1.0.0
|
||||
<img src="img/ssd1306_v100.jpg" />
|
||||
|
||||
## Demonstration
|
||||
## Demonstration version v2.0.0
|
||||
<img src="img/ssd1306_v200.jpg" />
|
||||
|
||||
## Demonstration version v3.0.0
|
||||
<img src="img/ssd1306_v300.jpg" />
|
||||
|
||||
## Acknowledgement
|
||||
|
Before Width: | Height: | Size: 276 KiB After Width: | Height: | Size: 276 KiB |
@ -7,16 +7,16 @@
|
||||
*
|
||||
* @author Marian Hrinko
|
||||
* @date 06.10.2020
|
||||
* @update 06.12.2022
|
||||
* @update 15.12.2022
|
||||
* @file ssd1306.c
|
||||
* @version 3.0
|
||||
* @version 3.0.0
|
||||
* @tested AVR Atmega328p
|
||||
*
|
||||
* @depend font.h, twi.h
|
||||
* @depend ssd1306.h
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* @descr Version 1.0 -> applicable for 1 display
|
||||
* Version 2.0 -> rebuild to 'cacheMemLcd' array
|
||||
* Version 3.0 -> simplified alphanumeric version
|
||||
* @descr Version 1.0.0 -> applicable for 1 display
|
||||
* Version 2.0.0 -> rebuild to 'cacheMemLcd' array
|
||||
* Version 3.0.0 -> simplified alphanumeric version for 1 display
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* @usage Basic Setup for OLED Display
|
||||
*/
|
||||
|
@ -7,16 +7,16 @@
|
||||
*
|
||||
* @author Marian Hrinko
|
||||
* @date 06.10.2020
|
||||
* @update 21.11.2022
|
||||
* @update 15.12.2022
|
||||
* @file ssd1306.h
|
||||
* @version 3.0
|
||||
* @version 3.0.0
|
||||
* @tested AVR Atmega328p
|
||||
*
|
||||
* @depend font.h, twi.h
|
||||
* -------------------------------------------------------------------------------------+
|
||||
* @descr Version 1.0 -> applicable for 1 display
|
||||
* Version 2.0 -> rebuild to 'cacheMemLcd' array
|
||||
* Version 3.0 -> simplified alphanumeric version
|
||||
* @descr Version 1.0.0 -> applicable for 1 display
|
||||
* Version 2.0.0 -> rebuild to 'cacheMemLcd' array
|
||||
* Version 3.0.0 -> simplified alphanumeric version for 1 display
|
||||
* -------------------------------------------------------------------------------------+
|
||||
* @usage Basic Setup for OLED Display
|
||||
*/
|
||||
|
25
lib/twi.c
25
lib/twi.c
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* ---------------------------------------------------------------+
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* @desc Two Wire Interface / I2C Communication
|
||||
* ---------------------------------------------------------------+
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* Copyright (C) 2020 Marian Hrinko.
|
||||
* Written by Marian Hrinko (mato.hrinko@gmail.com)
|
||||
*
|
||||
@ -10,13 +10,12 @@
|
||||
* @file twi.c
|
||||
* @tested AVR Atmega16, ATmega8, Atmega328
|
||||
*
|
||||
* @depend
|
||||
* ---------------------------------------------------------------+
|
||||
* @depend twi.h
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* @usage Master Transmit Operation
|
||||
*/
|
||||
|
||||
// include libraries
|
||||
#include <avr/io.h>
|
||||
#include "twi.h"
|
||||
|
||||
/**
|
||||
@ -28,16 +27,16 @@
|
||||
*/
|
||||
void TWI_Init (void)
|
||||
{
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// Calculation fclk:
|
||||
//
|
||||
// fclk = (fcpu)/(16+2*TWBR*4^Prescaler) m16
|
||||
// fclk = (fcpu)/(16+2*TWBR*Prescaler) m328p
|
||||
// ---------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Calculation TWBR:
|
||||
//
|
||||
// TWBR = {(fcpu/fclk) - 16 } / (2*4^Prescaler)
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// @param1 value of TWBR (m16)
|
||||
// fclk = 400kHz; TWBR = 3
|
||||
// fclk = 100kHz; TWBR = 20
|
||||
@ -59,7 +58,7 @@ char TWI_MT_Start (void)
|
||||
// null status flag
|
||||
TWI_TWSR &= ~0xA8;
|
||||
// START
|
||||
// ----------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
// request for bus
|
||||
TWI_START();
|
||||
// wait till flag set
|
||||
@ -83,7 +82,7 @@ char TWI_MT_Start (void)
|
||||
char TWI_MT_Send_SLAW (char address)
|
||||
{
|
||||
// SLA+W
|
||||
// ----------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
TWI_TWDR = (address << 1);
|
||||
// enable
|
||||
TWI_ENABLE();
|
||||
@ -109,7 +108,7 @@ char TWI_MT_Send_SLAW (char address)
|
||||
char TWI_MT_Send_Data (char data)
|
||||
{
|
||||
// DATA
|
||||
// ----------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
TWI_TWDR = data;
|
||||
// enable
|
||||
TWI_ENABLE();
|
||||
@ -135,7 +134,7 @@ char TWI_MT_Send_Data (char data)
|
||||
char TWI_MR_Send_SLAR (char address)
|
||||
{
|
||||
// SLA+R
|
||||
// ----------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
TWI_TWDR = (address << 1) | 0x01;
|
||||
// enable
|
||||
TWI_ENABLE();
|
||||
@ -161,7 +160,7 @@ char TWI_MR_Send_SLAR (char address)
|
||||
void TWI_Stop (void)
|
||||
{
|
||||
// End TWI
|
||||
// -------------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
// send stop sequence
|
||||
TWI_STOP ();
|
||||
// wait for TWINT flag is set
|
||||
|
33
lib/twi.h
33
lib/twi.h
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* ---------------------------------------------------------------+
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* @desc Two Wire Interface / I2C Communication
|
||||
* ---------------------------------------------------------------+
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* Copyright (C) 2020 Marian Hrinko.
|
||||
* Written by Marian Hrinko (mato.hrinko@gmail.com)
|
||||
*
|
||||
@ -10,16 +10,19 @@
|
||||
* @file twi.h
|
||||
* @tested AVR Atmega16, ATmega8, Atmega328
|
||||
*
|
||||
* @depend
|
||||
* ---------------------------------------------------------------+
|
||||
* @depend avr/io.h
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* @usage Basic Master Transmit Operation
|
||||
*/
|
||||
|
||||
#ifndef __TWI_H__
|
||||
#define __TWI_H__
|
||||
|
||||
// @includes
|
||||
#include <avr/io.h>
|
||||
|
||||
// define register for TWI communication
|
||||
// -------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
#if defined(__AVR_ATmega16__) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega328P__)
|
||||
|
||||
#define TWI_TWAR TWAR // TWI (Slave) Address Register
|
||||
@ -31,22 +34,22 @@
|
||||
#endif
|
||||
|
||||
// Success
|
||||
// -------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
#ifndef SUCCESS
|
||||
#define SUCCESS 0
|
||||
#endif
|
||||
|
||||
// Error
|
||||
// -------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
#ifndef ERROR
|
||||
#define ERROR 1
|
||||
#endif
|
||||
|
||||
// ++++++++++++++++++++++++++++++++++++++++++
|
||||
// -------------------------------------------------------------------------------------
|
||||
//
|
||||
// M A S T E R M O D E
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Master Mode - Transmitter / Receiver
|
||||
#define TWI_START_ACK 0x08 // A START condition has been transmitted
|
||||
#define TWI_REP_START_ACK 0x10 // A repeated START condition has been transmitted
|
||||
@ -62,11 +65,11 @@
|
||||
#define TWI_MR_DATA_ACK 0x50 // Data byte has been received; ACK has been received
|
||||
#define TWI_MR_DATA_NACK 0x58 // Data byte has been received; NOT ACK has been received
|
||||
|
||||
// ++++++++++++++++++++++++++++++++++++++++++
|
||||
// -------------------------------------------------------------------------------------
|
||||
//
|
||||
// S L A V E M O D E
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++
|
||||
// -------------------------------------------------------------------------------------
|
||||
// Slave Receiver Mode
|
||||
#define TWI_SR_SLAW_ACK 0x60 // Own Slave address has been received; ACK returned
|
||||
#define TWI_SR_ALMOA_ACK 0x68 // Arbitration Lost in SLA+R/W as Master; Own Slave address has been received; ACK returned
|
||||
@ -85,7 +88,7 @@
|
||||
#define TWI_ST_DATA_LOST_ACK 0xC8 // Last data byte in TWDR has been transmitted (TWEA = '0'); ACK has been received
|
||||
|
||||
// TWI CLK frequency
|
||||
// -------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
// @param TWBR
|
||||
// @param Prescaler
|
||||
// TWPS1 TWPS0 - PRESCALER
|
||||
@ -96,21 +99,21 @@
|
||||
#define TWI_FREQ(BIT_RATE, PRESCALER) { TWI_TWBR = BIT_RATE; TWI_TWSR |= (TWI_TWSR & 0x03) | PRESCALER; }
|
||||
|
||||
// TWI start condition
|
||||
// -------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
// (1 << TWEN) - TWI Enable
|
||||
// (1 << TWINT) - TWI Interrupt Flag - must be cleared by set
|
||||
// (1 << TWSTA) - TWI Start
|
||||
#define TWI_START() { TWI_TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWSTA); }
|
||||
|
||||
// TWI stop condition
|
||||
// -------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
// (1 << TWEN) - TWI Enable
|
||||
// (1 << TWINT) - TWI Interrupt Flag - must be cleared by set
|
||||
// (1 << TWSTO) - TWI Stop
|
||||
#define TWI_STOP() { TWI_TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWSTO); }
|
||||
|
||||
// TWI enable
|
||||
// -------------------------------------------
|
||||
// -------------------------------------------------------------------------------------
|
||||
// (1 << TWEN) - TWI Enable
|
||||
// (1 << TWINT) - TWI Interrupt Flag - must be cleared by set
|
||||
#define TWI_ENABLE() { TWI_TWCR = (1 << TWEN) | (1 << TWINT); }
|
||||
|
8
main.c
8
main.c
@ -9,14 +9,14 @@
|
||||
* @date 06.10.2020
|
||||
* @update 19.07.2021
|
||||
* @file main.c
|
||||
* @version 3.0
|
||||
* @version 3.0.0
|
||||
* @tested AVR Atmega328p
|
||||
*
|
||||
* @depend lib/ssd1306.h
|
||||
* --------------------------------------------------------------------------------------+
|
||||
* @descr Version 1.0 -> applicable for 1 display
|
||||
* Version 2.0 -> rebuild to 'cacheMemLcd' array
|
||||
* Version 3.0 -> simplified alphanumeric version
|
||||
* @descr Version 1.0.0 -> applicable for 1 display
|
||||
* Version 2.0.0 -> rebuild to 'cacheMemLcd' array
|
||||
* Version 3.0.0 -> simplified alphanumeric version for 1 display
|
||||
* --------------------------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user