This is an digital video camera program using NKK\'s oLED swtich and 4D Systems\' uCam serial camera. It takes image from the uCam and displays on the IS-C15 switch. Some image processing demos are included. This program uses FatFileSytem, SDFileSystem, and TextLCD library. See http://www.youtube.com/watch?v=fqHTaCRHyQs for how it works. CQ出版社の「mbed/ARM活用事例」第10章シリアル接続カメラと有機ELディスプレイ内蔵スイッチで作るmbedディジタル・カメラの作例です。動作の様子は http://www.youtube.com/watch?v=fqHTaCRHyQs で見れます。

Dependencies:   TextLCD mbed SDFileSystem

Revision:
0:07d02a20d1cc
diff -r 000000000000 -r 07d02a20d1cc isc15.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/isc15.cpp	Thu Oct 06 00:54:08 2011 +0000
@@ -0,0 +1,227 @@
+/* mbed NKK IS-C15/C01 oLED switch library
+ * Copyright (c) 2011, Noriaki Mitsunaga
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include "isc15.h"
+
+////////////////////////////////////////////////////////////////////////////////////////
+// Some constants
+////////////////////////////////////////////////////////////////////////////////////////
+const int DAT = 1;
+const int CMD = 0;
+
+////////////////////////////////////////////////////////////////////////////////////////
+//    OLED's initial setup commands (IS15)
+////////////////////////////////////////////////////////////////////////////////////////
+const    unsigned char    SetupColumnAddress[]        =    {    0x03,    0x15,    0x10,    0x4f    };
+const    unsigned char    SetupRowaddress[]            =    {    0x03,    0x75,    0x00,    0x2f    };
+const    unsigned char    SetContrastColorA[]         =    {    0x02,    0x81,    0x19    };
+const    unsigned char    SetContrastColorB[]         =    {    0x02,    0x82,    0x14    };
+const    unsigned char    SetContrastColorC[]         =    {    0x02,    0x83,    0x24    };
+const    unsigned char    MasterCurrentControl[]        =    {    0x02,    0x87,    0x0f    };
+const    unsigned char    RemapColorDepth[]            =    {    0x02,    0xa0,    0x70    };
+const    unsigned char    SetDisplayStartLine[]        =    {    0x02,    0xa1,    0x00    };
+const    unsigned char    SetDisplayOffset[]            =    {    0x02,    0xa2,    0x10    };
+const    unsigned char    SetDisplayMode[]            =    {    0x01,    0xa4    };
+const    unsigned char    SetMultiplexRatio[]            =    {    0x02,    0xa8,    0x2f    };
+const    unsigned char    DimModeSetting[]            =    {    0x05,    0xab,    0x12,    0x0c,    0x14,    0x12    };
+const    unsigned char    SetDisplayDim[]                =    {    0x01,    0xac    };
+const    unsigned char    SetDisplayOff[]                =    {    0x01,    0xae    };
+const    unsigned char    SetDisplayNormal[]            =    {    0x01,    0xaf    };
+const    unsigned char    SetMasterConfiguration[]    =    {    0x02,    0xad,    0x8e    };
+const    unsigned char    PhasePeriodAdjustment[]        =    {    0x02,    0xb1,    0x44    };
+const    unsigned char    DisplayClockDivider[]        =    {    0x02,    0xb3,    0xa0    };
+const    unsigned char    EnableLinearGrayScale[]        =    {    0x01,    0xb9    };
+const    unsigned char    SetPrechargeLevel[]            =    {    0x02,    0xbb,    0x12    };
+const    unsigned char    SetVcomh[]                    =    {    0x03,    0xbe,    0x28    };
+
+const    unsigned char    ColorDepth64k[]                =    {    0x02,    0xa0,    0x70    };
+const    unsigned char    ColorDepth256[]                =    {    0x02,    0xa0,    0x30    };
+
+//    OLED's initial setup commands (for display only type (IS01) )
+const    unsigned char    SetupColumnAddress_d[]        =    {    0x03,    0x15,    0x16,    0x49    }; //display
+const    unsigned char    SetupRowaddress_d[]            =    {    0x03,    0x75,    0x00,    0x23    }; //display
+const    unsigned char    SetContrastColorA_d[]         =    {    0x02,    0x81,    0x0f    }; //display
+const    unsigned char    SetContrastColorB_d[]         =    {    0x02,    0x82,    0x0e    }; //display
+const    unsigned char    SetContrastColorC_d[]         =    {    0x02,    0x83,    0x1b    }; //display
+const    unsigned char    SetDisplayOffset_d[]            =    {    0x02,    0xa2,    0x1c    }; //display
+const    unsigned char    SetMultiplexRatio_d[]            =    {    0x02,    0xa8,    0x23    }; //display
+const    unsigned char    DimModeSetting_d[]            =    {    0x05,    0xab,    0x0b,    0x08,    0x0f,    0x12    }; //display
+const    unsigned char    DisplayClockDivider_d[]        =    {    0x02,    0xb3,    0x30    }; //display
+const    unsigned char    SetVcomh_d[]                    =    {    0x03,    0xbe,    0x21    }; //display
+
+//
+//        Change OLED's address setting
+//
+void    ISC15::AdrInit( int DevType )    {
+    if (spi == NULL)
+        return;
+
+    if (DevType == ISC15_DEVICE_ISC15) {
+        SendCommand( SetupColumnAddress );
+        SendCommand( SetupRowaddress );
+    } else {
+        SendCommand( SetupColumnAddress_d );
+        SendCommand( SetupRowaddress_d );
+    }
+}
+
+
+//
+//        Display data on OLED
+//
+void    ISC15::Disp( int Mode, const unsigned char *dat )    {
+    if (spi == NULL)
+        return;
+
+    AdrInit(DevType);
+    DspMode(Mode);
+    if (Mode == ISC15_DSPMODE_64K)
+        SendData(dat, ISC15_WIDTH*ISC15_HEIGHT*2);
+    else
+        SendData(dat, ISC15_WIDTH*ISC15_HEIGHT);
+}
+
+//
+//        Change OLED's color depth setting (64K or 256 colors)
+//
+void    ISC15::DspMode( int DspMode )    {
+    if (spi == NULL)
+        return;
+
+    if ( DspMode == ISC15_DSPMODE_64K )    {
+        SendCommand( ColorDepth64k );
+    } else    {
+        SendCommand( ColorDepth256 );
+    }
+}
+
+//
+//        Fill out display
+//
+void    ISC15::Fill(unsigned char c)    {
+    if (spi == NULL)
+        return;
+
+    AdrInit(DevType);
+    DspMode(0);
+
+    is_dc = DAT;
+    for (int i = ISC15_WIDTH*ISC15_HEIGHT; i>0; i --) {
+        is_cs = 0;
+        spi->write(c);
+        is_cs = 1;
+    }
+}
+
+//
+//        initial settings of OLED
+//
+void    ISC15::Init( int DeviceType, SPI *s )    {
+    volatile unsigned char    delay = 0x20;
+
+    DevType = DeviceType;
+    spi = s;
+
+    //    reset OLED
+    is_vcc = 0;
+    is_reset = 0;
+    wait_us(3);
+    is_reset = 1;
+    is_vcc = 1;
+
+    //    initial settings
+    AdrInit(DevType);
+
+    if (DevType == ISC15_DEVICE_ISC15) {
+        SendCommand( SetContrastColorA );
+        SendCommand( SetContrastColorB );
+        SendCommand( SetContrastColorC );
+        SendCommand( MasterCurrentControl );
+        SendCommand( SetDisplayStartLine );
+        SendCommand( SetDisplayOffset );
+        SendCommand( SetDisplayMode );
+        SendCommand( SetMultiplexRatio );
+        SendCommand( DimModeSetting );
+        SendCommand( SetMasterConfiguration );
+        SendCommand( PhasePeriodAdjustment );
+        SendCommand( DisplayClockDivider );
+        SendCommand( EnableLinearGrayScale );
+        SendCommand( SetPrechargeLevel );
+        SendCommand( SetVcomh );
+    } else {
+        SendCommand( SetContrastColorA_d );
+        SendCommand( SetContrastColorB_d );
+        SendCommand( SetContrastColorC_d );
+        SendCommand( MasterCurrentControl );
+        SendCommand( SetDisplayStartLine );
+        SendCommand( SetDisplayOffset_d );
+        SendCommand( SetDisplayMode );
+        SendCommand( SetMultiplexRatio_d );
+        SendCommand( DimModeSetting_d );
+        SendCommand( SetMasterConfiguration );
+        SendCommand( PhasePeriodAdjustment );
+        SendCommand( DisplayClockDivider_d );
+        SendCommand( EnableLinearGrayScale );
+        SendCommand( SetPrechargeLevel );
+        SendCommand( SetVcomh_d );
+    }
+
+    //    display mode settings
+    DspMode( ISC15_DSPMODE_64K);
+
+    SendCommand( SetDisplayNormal );
+}
+
+//
+//      Send a command / data to OLED via SPI
+//
+void    ISC15::Send( const unsigned char *p, int len )    {
+    if (spi == NULL)
+        return;
+
+    for (; len>0; len --, p ++) {
+        is_cs = 0;
+        spi->write(*p);
+        is_cs = 1;
+    }
+}
+
+//
+//        Send a command to OLED
+//
+void    ISC15::SendCommand( const unsigned char *com )    {
+    if (spi == NULL)
+        return;
+
+    is_dc = CMD;
+    Send(com+1, *com);
+}
+
+//
+//        Send data to OLED
+//
+void    ISC15::SendData( const unsigned char *dat, int len )    {
+    if (spi == NULL)
+        return;
+
+    is_dc = DAT;
+    Send(dat, len);
+}