E-Paper Device (EPD) based MiniNote module, powered by mbed on LPC1114FBD48. Shared in public domain with enclosure in 3D step format, hardware interface compatible with microBUS interface. Anyone can contribute on this project.

Dependencies:   mbed _24LCXXX

E-Badge MiniNote Project on mbed/NXP LPC1114 platform

Revision:
0:33994cfad0c2
Child:
2:bb9f154ea2f4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SSD1606/ssd1606.cpp	Sun Jun 01 00:47:23 2014 +0000
@@ -0,0 +1,195 @@
+
+#include "mbed.h"
+#include "ssd1606.h"
+#include "image.h"
+
+#include <stdarg.h>
+
+const unsigned char init_data[]={
+0x82,0x00,0x00,0x00,0xAA,0x00,0x00,0x00,
+0xAA,0xAA,0x00,0x00,0xAA,0xAA,0xAA,0x00,
+0x55,0xAA,0xAA,0x00,0x55,0x55,0x55,0x55,
+0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55,
+0xAA,0xAA,0xAA,0xAA,0x15,0x15,0x15,0x15,
+0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x01,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x45,0xF1,0xFF,0x5F,0x55,0x01,0x00,
+0x00,0x00,};
+
+
+SSD1606::SSD1606(PinName cs, PinName rst, PinName dc, PinName clk, PinName busy, PinName data)
+    : _spi(data, NC, clk), 
+      _cs(cs), 
+      _reset(rst), 
+      _dc(dc),
+            _busy(busy),
+      _cursor_x(0),
+      _cursor_y(0)
+{
+}
+
+void SSD1606::reset()
+{
+    _reset = 1;
+    wait(0.01);
+    _reset = 0;
+    wait(0.01);
+    _reset = 1;
+    wait(0.01);
+}
+
+void SSD1606::initialize()
+{
+    reset();
+  _send_command(0x10);
+  _send_data(0x00);
+#ifdef MODE3
+  _send_command(0x11);
+  _send_data(0x03);
+  _send_command(0x44);
+  _send_data(0x00);
+  _send_data(0x11);
+  _send_command(0x45);
+  _send_data(0x00);
+  _send_data(0xAB);
+  _send_command(0x4E);
+  _send_data(0x00);
+  _send_command(0x4F);
+  _send_data(0x00);
+#endif
+#ifdef MODE2
+  _send_command(0x11);
+  _send_data(0x02);
+  _send_command(0x44);
+  _send_data(0x11);
+  _send_data(0x00);
+  _send_command(0x45);
+  _send_data(0x00);
+  _send_data(0xAB);
+  _send_command(0x4E);
+  _send_data(0x11);
+  _send_command(0x4F);
+  _send_data(0x00);
+#endif  
+#ifdef MODE1
+  _send_command(0x11);
+  _send_data(0x01);
+  _send_command(0x44);
+  _send_data(0x00);
+  _send_data(0x11);
+  _send_command(0x45);
+  _send_data(0xAB);
+  _send_data(0x00);
+  _send_command(0x4E);
+  _send_data(0x00);
+  _send_command(0x4F);
+  _send_data(0xAB);
+#endif
+#ifdef MODE0
+  _send_command(0x11);
+  _send_data(0x00);
+  _send_command(0x44);
+  _send_data(0x11);
+  _send_data(0x00);
+  _send_command(0x45);
+  _send_data(0xAB);
+  _send_data(0x00);
+  _send_command(0x4E);
+  _send_data(0x11);
+  _send_command(0x4F);
+  _send_data(0xAB);
+#endif
+  _send_command(0xF0);
+  _send_data(0x1F);
+  _send_command(0x21);
+  _send_data(0x03);
+  _send_command(0x2C);
+  _send_data(0xA0);
+  _send_command(0x3C);
+  _send_data(0x63);
+  _send_command(0x22);
+  _send_data(0xC4);
+    
+    set_lut();
+}
+
+unsigned char SSD1606::is_busy()
+{
+    return(0);
+}
+
+void SSD1606::rom_image(const unsigned char *bitmap)
+{
+    int i;
+    _send_command(0x24);
+    
+    for (i=0; i <3096; i++)
+        _send_data(bitmap[i]);
+    
+    _send_command(0x20);
+    wait(0.01);
+    
+}
+
+void SSD1606::update()
+{
+    for (int i=0; i<3096; i++)
+        _send_data(_screen[i]);
+}
+
+void SSD1606::off()
+{
+}
+
+void SSD1606::sleep()
+{
+    _send_command(0x10);
+    _send_data(0x01);
+}
+
+void SSD1606::set_command_between_images()
+{
+    _send_command(0x22);
+    _send_data(0xC7);
+    _send_command(0x21);
+    _send_data(0x03);
+}
+
+void SSD1606::clear()
+{
+    for (int i=0; i<3096; i++)
+        _send_data(0);
+    _cursor_x = 0;
+    _cursor_y = 0;
+}
+
+void SSD1606::_send_command(unsigned char code)
+{
+    _cs = 1;
+    _dc = 0;
+    _cs = 0;
+    _spi.write(code);
+    _cs = 1;
+}
+
+void SSD1606::_send_data(unsigned char value)
+{
+    _cs = 1;
+    _dc = 1;
+    _cs = 0;
+    _spi.write(value);
+    _cs = 1;    
+}
+
+void SSD1606::set_lut(void)
+{
+    unsigned char i;
+    _send_command(0x32);
+    for(i=0; i<90; i++)
+    {
+        _send_data(init_data[i]);
+    }
+}