This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest
Dependencies: GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem
Fork of mbed-os-example-mbed5-blinky by
UniGraphic/Inits/UC1608.cpp@12:9a20164dcc47, 2017-01-11 (annotated)
- Committer:
- vipinranka
- Date:
- Wed Jan 11 11:41:30 2017 +0000
- Revision:
- 12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vipinranka | 12:9a20164dcc47 | 1 | /* mbed UniGraphic library - Device specific class |
vipinranka | 12:9a20164dcc47 | 2 | * Copyright (c) 2015 Giuliano Dianda |
vipinranka | 12:9a20164dcc47 | 3 | * Released under the MIT License: http://mbed.org/license/mit |
vipinranka | 12:9a20164dcc47 | 4 | */ |
vipinranka | 12:9a20164dcc47 | 5 | #include "Protocols.h" |
vipinranka | 12:9a20164dcc47 | 6 | #include "UC1608.h" |
vipinranka | 12:9a20164dcc47 | 7 | |
vipinranka | 12:9a20164dcc47 | 8 | ////////////////////////////////////////////////////////////////////////////////// |
vipinranka | 12:9a20164dcc47 | 9 | // display settings /////////////////////////////////////////////////////// |
vipinranka | 12:9a20164dcc47 | 10 | ///////////////////////////////////////////////////////////////////////// |
vipinranka | 12:9a20164dcc47 | 11 | #define IC_X_SEGS 240 // UC1608 SEG has range 0-239 (239-0 if MX=1), check your datasheet, important for the orientation |
vipinranka | 12:9a20164dcc47 | 12 | #define IC_Y_COMS 128 // UC1608 COM has range 0-127 (127-0 if MY=1), check your datasheet, important for the orientation |
vipinranka | 12:9a20164dcc47 | 13 | //#define LCDSIZE_X 240 // display X pixels |
vipinranka | 12:9a20164dcc47 | 14 | //#define LCDSIZE_Y 120 // display Y pixels, UC1608 is advertised as 240x128 but display size could be smaller |
vipinranka | 12:9a20164dcc47 | 15 | |
vipinranka | 12:9a20164dcc47 | 16 | |
vipinranka | 12:9a20164dcc47 | 17 | |
vipinranka | 12:9a20164dcc47 | 18 | UC1608::UC1608(proto_t displayproto, PortName port, PinName CS, PinName reset, PinName DC, PinName WR, PinName RD, const char *name , unsigned int LCDSIZE_X, unsigned int LCDSIZE_Y) |
vipinranka | 12:9a20164dcc47 | 19 | : LCD(displayproto, port, CS, reset, DC, WR, RD, LCDSIZE_X, LCDSIZE_Y, IC_X_SEGS, IC_Y_COMS, name) |
vipinranka | 12:9a20164dcc47 | 20 | { |
vipinranka | 12:9a20164dcc47 | 21 | hw_reset(); |
vipinranka | 12:9a20164dcc47 | 22 | BusEnable(true); |
vipinranka | 12:9a20164dcc47 | 23 | init(); |
vipinranka | 12:9a20164dcc47 | 24 | cls(); |
vipinranka | 12:9a20164dcc47 | 25 | set_orientation(1); |
vipinranka | 12:9a20164dcc47 | 26 | locate(0,0); |
vipinranka | 12:9a20164dcc47 | 27 | } |
vipinranka | 12:9a20164dcc47 | 28 | UC1608::UC1608(proto_t displayproto, int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC, const char *name, unsigned int LCDSIZE_X, unsigned int LCDSIZE_Y) |
vipinranka | 12:9a20164dcc47 | 29 | : LCD(displayproto, Hz, mosi, miso, sclk, CS, reset, DC, LCDSIZE_X, LCDSIZE_Y, IC_X_SEGS, IC_Y_COMS, name) |
vipinranka | 12:9a20164dcc47 | 30 | { |
vipinranka | 12:9a20164dcc47 | 31 | hw_reset(); |
vipinranka | 12:9a20164dcc47 | 32 | BusEnable(true); |
vipinranka | 12:9a20164dcc47 | 33 | init(); |
vipinranka | 12:9a20164dcc47 | 34 | cls(); |
vipinranka | 12:9a20164dcc47 | 35 | set_orientation(1); |
vipinranka | 12:9a20164dcc47 | 36 | locate(0,0); |
vipinranka | 12:9a20164dcc47 | 37 | } |
vipinranka | 12:9a20164dcc47 | 38 | // reset and init the lcd controller |
vipinranka | 12:9a20164dcc47 | 39 | void UC1608::init() |
vipinranka | 12:9a20164dcc47 | 40 | { |
vipinranka | 12:9a20164dcc47 | 41 | /* Start Initial Sequence ----------------------------------------------------*/ |
vipinranka | 12:9a20164dcc47 | 42 | |
vipinranka | 12:9a20164dcc47 | 43 | // wr_cmd8(0xE2); // sw reset |
vipinranka | 12:9a20164dcc47 | 44 | wait_ms(15); |
vipinranka | 12:9a20164dcc47 | 45 | |
vipinranka | 12:9a20164dcc47 | 46 | wr_cmd8(0x27); // Multiplex rate :128 set temperature consenpation 0% |
vipinranka | 12:9a20164dcc47 | 47 | wr_cmd8(0xEA); //set bias:1/12bias |
vipinranka | 12:9a20164dcc47 | 48 | |
vipinranka | 12:9a20164dcc47 | 49 | wr_cmd8(0xC4); // set mirror MX=1,MY=0 (controller->display SEGs wiring inverted) |
vipinranka | 12:9a20164dcc47 | 50 | // wr_cmd8(0xA0); // ADC select seg0-seg223 |
vipinranka | 12:9a20164dcc47 | 51 | //wr_cmd8(0xA1); // ADC select seg223-seg0 |
vipinranka | 12:9a20164dcc47 | 52 | // wr_cmd8(0xC8); // SHL select com63-com0 |
vipinranka | 12:9a20164dcc47 | 53 | //wr_cmd8(0xC0); // SHL select com0-com63 |
vipinranka | 12:9a20164dcc47 | 54 | |
vipinranka | 12:9a20164dcc47 | 55 | wr_cmd8(0x2F); // //Power Control:internal, LCD capacitance 60nf-90nf |
vipinranka | 12:9a20164dcc47 | 56 | wait_ms(10); |
vipinranka | 12:9a20164dcc47 | 57 | |
vipinranka | 12:9a20164dcc47 | 58 | // wr_cmd8(0x81);//Set Gain and Potentiometer |
vipinranka | 12:9a20164dcc47 | 59 | // wr_cmd8(0x40|26);//Set Gain and Potentiometer xx xxxxxx |
vipinranka | 12:9a20164dcc47 | 60 | set_contrast(26); |
vipinranka | 12:9a20164dcc47 | 61 | |
vipinranka | 12:9a20164dcc47 | 62 | wr_cmd8(0x88); //disable colum/page address wraparound |
vipinranka | 12:9a20164dcc47 | 63 | wr_cmd8(0xA4); // LCD display ram (EntireDisplayOn disable) |
vipinranka | 12:9a20164dcc47 | 64 | wr_cmd8(0x40); // start line = 0 |
vipinranka | 12:9a20164dcc47 | 65 | wr_cmd8(0xA6); // display normal (1 = illuminated) |
vipinranka | 12:9a20164dcc47 | 66 | wr_cmd8(0xAF); // display ON |
vipinranka | 12:9a20164dcc47 | 67 | |
vipinranka | 12:9a20164dcc47 | 68 | } |
vipinranka | 12:9a20164dcc47 | 69 | //////////////////////////////////////////////////////////////////// |
vipinranka | 12:9a20164dcc47 | 70 | // functions that overrides the standard ones implemented in LCD.cpp |
vipinranka | 12:9a20164dcc47 | 71 | //////////////////////////////////////////////////////////////////// |
vipinranka | 12:9a20164dcc47 | 72 | void UC1608::mirrorXY(mirror_t mode) |
vipinranka | 12:9a20164dcc47 | 73 | { |
vipinranka | 12:9a20164dcc47 | 74 | switch (mode) |
vipinranka | 12:9a20164dcc47 | 75 | { |
vipinranka | 12:9a20164dcc47 | 76 | case(NONE): |
vipinranka | 12:9a20164dcc47 | 77 | wr_cmd8(0xC4); // this is in real X mirror command, but my display have SEGs wired inverted, so assume this is the default no-x-mirror |
vipinranka | 12:9a20164dcc47 | 78 | break; |
vipinranka | 12:9a20164dcc47 | 79 | case(X): |
vipinranka | 12:9a20164dcc47 | 80 | wr_cmd8(0xC0); |
vipinranka | 12:9a20164dcc47 | 81 | break; |
vipinranka | 12:9a20164dcc47 | 82 | case(Y): |
vipinranka | 12:9a20164dcc47 | 83 | wr_cmd8(0xCC); |
vipinranka | 12:9a20164dcc47 | 84 | break; |
vipinranka | 12:9a20164dcc47 | 85 | case(XY): |
vipinranka | 12:9a20164dcc47 | 86 | wr_cmd8(0xC8); |
vipinranka | 12:9a20164dcc47 | 87 | break; |
vipinranka | 12:9a20164dcc47 | 88 | } |
vipinranka | 12:9a20164dcc47 | 89 | } |
vipinranka | 12:9a20164dcc47 | 90 | void UC1608::set_contrast(int o) |
vipinranka | 12:9a20164dcc47 | 91 | { |
vipinranka | 12:9a20164dcc47 | 92 | contrast = o; |
vipinranka | 12:9a20164dcc47 | 93 | // wr_cmd8(0x81); // set volume |
vipinranka | 12:9a20164dcc47 | 94 | // wr_cmd8(0x40|(o&0x3F)); |
vipinranka | 12:9a20164dcc47 | 95 | wr_cmd16(0x8140|(o&0x3F)); |
vipinranka | 12:9a20164dcc47 | 96 | } |
vipinranka | 12:9a20164dcc47 | 97 | void UC1608::BusEnable(bool enable) |
vipinranka | 12:9a20164dcc47 | 98 | { |
vipinranka | 12:9a20164dcc47 | 99 | LCD::BusEnable(!enable); // crap IC has CS not inverted (active HIGH) |
vipinranka | 12:9a20164dcc47 | 100 | } |