iforce2d Chris / Mbed 2 deprecated ubxDistanceMeter

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers u8g_dev_pcf8812_96x65.c Source File

u8g_dev_pcf8812_96x65.c

00001 /*
00002 
00003   u8g_dev_pcf8812_96x65.c
00004   
00005   Display: Nokia 96x65
00006 
00007   Universal 8bit Graphics Library
00008   
00009   Copyright (c) 2011, olikraus@gmail.com
00010   All rights reserved.
00011 
00012   Redistribution and use in source and binary forms, with or without modification, 
00013   are permitted provided that the following conditions are met:
00014 
00015   * Redistributions of source code must retain the above copyright notice, this list 
00016     of conditions and the following disclaimer.
00017     
00018   * Redistributions in binary form must reproduce the above copyright notice, this 
00019     list of conditions and the following disclaimer in the documentation and/or other 
00020     materials provided with the distribution.
00021 
00022   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
00023   CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
00024   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
00025   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
00026   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
00027   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
00028   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
00029   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
00030   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
00031   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
00032   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
00033   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
00034   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
00035   
00036 
00037   
00038   om6206        comaptible to pcf8812 ?
00039   
00040   Status: Tested 
00041 
00042 
00043   Display                                               Controller              Seen in
00044   LPH7366 (9 pins, 84x48)                       PCD8544                Nokia 5110 / 5120 / 5130 / 5160 / 6110 / 6150 
00045   LPH7677 (8 pins, 84x48)                       PCD8544                         Nokia 3210
00046   LPH7779 (8 pins, 84x48)                       PCD8544                         Nokia 3310 / 3315 / 3330 / 3110, also 3410?
00047   ???                                                          PCD8544                          Nokia 5110 / 6110
00048   LPH7690 ?  (96x65)                                 PCF8455/OM6202          Nokia 3410
00049   LPH7690 ? (96x65?)                               SED1565/S1D15605        Nokia 7110 / 3510?
00050   LPH7690                                                     ???                                     Nokia 6210
00051 
00052 
00053   
00054 */
00055 
00056 #include "u8g.h"
00057 
00058 #define WIDTH 96
00059 #define HEIGHT 65
00060 #define PAGE_HEIGHT 8
00061 
00062 
00063 static const uint8_t u8g_dev_pcf8812_init_seq[] PROGMEM = {
00064   U8G_ESC_CS(0),             /* disable chip */
00065   U8G_ESC_ADR(0),           /* instruction mode */
00066   U8G_ESC_RST(1),           /* do reset low pulse with (1*16)+2 milliseconds */
00067   U8G_ESC_CS(1),             /* enable chip */
00068   0x021,                        /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */
00069   0x006,                        /* temp. control: b10 = 2 */
00070   0x013,                        /* bias system 1:48 */
00071   0x080 | 0x040,        /* medium Vop */
00072   0x020,                        /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
00073   0x00c,                        /* display on, normal operation */
00074   U8G_ESC_DLY(100),       /* delay 100 ms */
00075   0x020,                        /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
00076   0x00d,                        /* display on, invert */
00077   U8G_ESC_DLY(100),       /* delay 100 ms */
00078   U8G_ESC_DLY(100),       /* delay 100 ms */
00079   0x020,                        /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
00080   0x00c,                        /* display on, normal */
00081   U8G_ESC_DLY(100),       /* delay 100 ms */
00082   U8G_ESC_CS(0),             /* disable chip */
00083   U8G_ESC_END                /* end of sequence */
00084 };
00085 
00086 uint8_t u8g_dev_pcf8812_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
00087 {
00088   switch(msg)
00089   {
00090     case U8G_DEV_MSG_INIT:
00091       u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
00092       u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcf8812_init_seq);
00093       break;
00094     case U8G_DEV_MSG_STOP:
00095       break;
00096     case U8G_DEV_MSG_PAGE_NEXT:
00097       {
00098         u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
00099         u8g_SetAddress(u8g, dev, 0);           /* command mode */
00100         u8g_SetChipSelect(u8g, dev, 1);
00101         u8g_WriteByte(u8g, dev, 0x020 );        /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
00102         u8g_WriteByte(u8g, dev, 0x080 );                        /* set X address */
00103         u8g_WriteByte(u8g, dev, 0x040 | pb->p.page); /* set Y address */
00104         u8g_SetAddress(u8g, dev, 1);           /* data mode */
00105         if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
00106           return 0;
00107         u8g_SetChipSelect(u8g, dev, 0);
00108       }
00109       break;
00110     case U8G_DEV_MSG_CONTRAST:
00111       /* the contrast adjustment does not work, needs to be analysed */
00112       u8g_SetAddress(u8g, dev, 0);          /* instruction mode */
00113       u8g_SetChipSelect(u8g, dev, 1);
00114       u8g_WriteByte(u8g, dev, 0x021);        /* command mode, extended function set */
00115       u8g_WriteByte(u8g, dev, 0x080 | ( (*(uint8_t *)arg) >> 1 ) );
00116       u8g_SetChipSelect(u8g, dev, 0);
00117       return 1;
00118   }
00119   return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
00120 }
00121 
00122 /* u8g_com_arduino_sw_spi_fn does not work, too fast??? */
00123 U8G_PB_DEV(u8g_dev_pcf8812_96x65_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcf8812_fn, U8G_COM_SW_SPI);
00124 U8G_PB_DEV(u8g_dev_pcf8812_96x65_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcf8812_fn, U8G_COM_HW_SPI);
00125