Test code attempting to drive a Ebay SSD1306 128X65 LCD from STM F303K8. The chip responds my I2C address scanner but the LCD never turns on or displays anything.

Dependencies:   SSD1308_128x64_I2C mbed Adafruit_GFX

Fork of Nucleo-F303K8-ADC-TEST by Joseph Ellsworth

Update of sample using Adafruit library to drive a generic Ebay SSD1306 OLED display. On Nucleo-F303K8 it will display reading of first two ADC lines once every couple seconds. Should work with other CPU boards.

main.cpp

Committer:
joeata2wh
Date:
2016-03-21
Revision:
1:90d213185462
Parent:
0:fa185766e039
Child:
2:dc3e84d595c3

File content as of revision 1:90d213185462:

/* Example of Reading all the ADC pins PIN and display ot OLED display using
 Nucleo_F303K8 by Joseph Ellsworth CTO A2WH -  Free for all but no warranty, no promises 
 Attempt to drive:  
   ebay part http://www.ebay.com/itm/152000005331?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
  0-96-I2C-IIC-SPI-Serial-White-OLED-LCD-LED-Display-Module-128X64
  The Datasheet.  https://www.adafruit.com/datasheets/SSD1306.pdf
  
  Unfortunately this part never turns on using the SSD1308 library.
  Not sure why and don't have time to finish tracking it down at this 
  time. 
  
  Using my I2C address scanner I found that it responds on Added 120 (x78) ,121 (x79)
  and when the part was unsoldered nothing responded on 120 or 121. According to 
  to the page #19 (8.1.5) of the data sheet the I2C address should be 011110
  which seems to map correctly to dec=120 hex=79 so I think the chip is responsive
  and the library must be sending incorrect commands.
  
 */

#include "mbed.h"
#include "SSD1308.h"

//#include "mbed_logo.h"
 
 //Pin Defines for I2C Bus
 #define D_SDA                  PB_7 // specific for Nucleo-F303K8
 #define D_SCL                  PB_6 // specific for Nucleo-F303K8
 I2C i2c(D_SDA, D_SCL);
 
 // Host PC Communication channels
 Serial pc(USBTX, USBRX); // tx, rx
 
 // Instantiate OLED
 //SSD1308 oled = SSD1308(i2c, SSD1308_SA0);
 SSD1308 oled = SSD1308(i2c, SSD1308_SA1);
 //SSD1308 oled = SSD1308(i2c, 120);
 
AnalogIn   pa0(PA_0); 
 
DigitalOut myled(LED1);
const float voltMeterARef = 3.3;

char buff[100];
float readPrint(AnalogIn ain, char *label) {
  float tval = ain.read();
  float volts = tval * voltMeterARef;
  float perc = tval * 100.0;  
  unsigned short  tvalu16 = ain.read_u16 ();

  printf("adc %s R=%3.3f V=%3.3f%% U16=%u\r\n",label, tval, volts, tvalu16);
  sprintf(buff, "V=%3.3f%",volts);
  oled.printf(buff);
  return tval;
}
    

int main() {
    pc.printf("OLED test start\r");  
    oled.writeString(0, 0, "Hello World !");
    oled.printf("Hello World !");
  
    oled.fillDisplay(0xAA);
    oled.setDisplayOff();
    wait(1);   
    oled.setDisplayOn();
    oled.clearDisplay();
    oled.setDisplayInverse();
    wait(0.5);
    oled.setDisplayNormal();                                         
    //oled.writeBitmap((uint8_t*) mbed_logo);
    pc.printf("OLED test done\r\n");  
  


    while(1) {
        myled = !myled; // toggle led 
        readPrint(pa0, "PA_0");                
        wait(7.0);        
    }
}