ADAFRUIT GP9002 VFD Driver supporting grayscale display, requires GFX-Library Note no "invert" function, also fixed timing issue in "begin"
Dependencies: bitreversetable256
Fork of Adafruit-GP9002-Graphic-VFD-Library by
Diff: Adafruit_GP9002.cpp
- Revision:
- 2:ecf13e85f0fa
- Parent:
- 1:09dc95ba8711
- Child:
- 3:0a38cff87d2e
--- a/Adafruit_GP9002.cpp Sun May 08 13:47:58 2016 +0000 +++ b/Adafruit_GP9002.cpp Sun May 08 15:30:51 2016 +0000 @@ -102,6 +102,8 @@ // hold the address so we can read and then write command(GP9002_ADDRHELD); + addrcache=0; //known because we just set the address + bytecache=0; //known because display cleared } @@ -132,6 +134,7 @@ addr += y/4; // Serial.println(addr, HEX); ///debug line ? + addrcache=-1; //invalidate the cache command(GP9002_ADDRINCR); command(GP9002_ADDRL); dataWrite(addr & 0xFF); @@ -162,31 +165,34 @@ if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) return; - uint8_t p; + //uint8_t p; // calculate addr uint16_t addr = 0; addr = x*16; // y = 63 - y; //why addr += y/4; - - command(GP9002_ADDRHELD); - command(GP9002_ADDRL); - dataWrite(addr & 0xFF); - command(GP9002_ADDRH); - dataWrite(addr >> 8); - command(GP9002_DATAREAD); - dataRead(); - p = dataRead(); + if (addr != addrcache) + { + addrcache=addr; + command(GP9002_ADDRHELD); + command(GP9002_ADDRL); + dataWrite(addr & 0xFF); + command(GP9002_ADDRH); + dataWrite(addr >> 8); + command(GP9002_DATAREAD); + dataRead(); + bytecache = dataRead(); + } y=0xc0>>((y & 3) <<1); color*=0b01010101; //Serial.println(p, HEX); - p &= ~y; + bytecache &= ~y; - p |= color&y; + bytecache |= color&y; command(GP9002_DATAWRITE); - dataWrite(p); + dataWrite(bytecache); }