After doing a bit more research into homemade smart watches, I came across this brilliant forum article (http://goo.gl/7mI1Dm). This guys watch is utterly amazing and uses a memory LCD. These LCD’s are quite out of my price range at ~£14 each! So after another eBay search, I found a total 1.44″ gem (http://goo.gl/3Tfg7e Link will likely expire as its eBay), 128×128 pixels with up to 18bit colour for a mere £2.59 with P+P included! Having considered writing a library for this display, it turns out that the seller I bought my display off has already written one. All I had to do was adjust this library (most of it not surprisingly in Chinese) to work on my STM32 platform. Using my trusty STM32F0 discovery for breadboarding (as usual), I created a couple of SPI functions with help from the seller made library and have got the LCD working! I’ve clocked power consumption in at 1.21mA at 2.97v. While this is a bit high, Its currently running at the full 48MHz with a maximum SPI speed. This also excludes the backlight. With the display being static, this falls to 1.03mA which is slightly better though it seems that this LCD is quite the battery drain! According to the data sheet, this LCD supports a clock rate of 15MHz though it seems to work fine clocked at the 24Mhz from the STM32 (maximum achievable SPI speed).
I’d normally like to have a framebuffer that is manipulated in the microcontroller RAM then sent to the screen as a full frame, as I’ve done with my PCD8544 and SSD1306 library but that would consume an absolute ton of RAM! For this display with 16bit colour, that would be equal to 128x128x2 bytes, or in easier terms, 32kb. This is more RAM than the STM32F0 discovery has available so I have to stick to writing directly to the graphics ram inside of the LCD itself. This seems to work fine so its not a massive deal.
As colours also take up a fair bit of space, I’ve got an 8bit colour system and use a function (which merely does a couple of AND’s and shifts) to convert this 8bit (3red, 3green, 3blue) value into standard 16bit (5red, 6green, 5blue). For the first time in my programming, I’ve used an ‘enum’ too. This makes programming colours as constants really easy. I feel happier sending a function a colour as opposed to the raw RGB values though I might make some functions compatible with the RGB values depending on how I feel!
The main advantage to this LCD is the small size, the LCD and border measuring in at a mere 38x32x2.5mm. This is smaller than the PCD8544 Nokia display which is good as it means I can make the watch even smaller if I get round to implementing it.
I’d like to rewrite the library at some point to understand the initialization of such a complex LCD, its just an absolute ton to read, just to set the current memory address takes 11 SPI writes and initialization takes 71 lines (majority of these being SPI writes too).
It works for now and thats all that really matters to me.