From what I know several 1x1 white/black pixel graphical LCD use the same method to map ram to the LCD pixels through pages and columns.
I have been using the TG12864H3-03A which uses the ST7565P controller
http://www.mtech-bg.com/ST7565P.pdf
Since the supplied library did not work from adafruit on the Due. Rather than figuring out how to modify this existing library to be ported I decided to use the ATMEL libsam to completely write my own LCD library to control this LCD.
Everything has been working fine. Been able to initialize and display text through the pages. However, the one thing that is confusing me is the fact that setting the column and page address has not resulted in the pixels I expect to be displayed and through testing I have had to make some code adjustments to get certain things working properly.
Top of Screen
Page0
Page1
Page2
Page3
Page4
Page5
Page6
Page7
Bottom of Screen
Top of Screen
Page3
Page2
Page1
Page0
Page7
page6
Page5
Page4
Bottom of Screen
I am quite baffled why page0 starts out in the middle of the LCD. Looking through the data sheet there seems to be no command which allows you to change the page locations like this. I expected by revering the COM you might get Page0 -> Page7 or Page7 -> Page0, but not this offset. Could be because of the manufacturer who did the pinout for the LCD and controller, but I am more likely to think I am not understanding something.
Additionally, I expected the column addressing to work on a page by going from 0 to 127 from the left side of the screen to the right side. However, when I wrote data by explicating using column address 0x0, 0x1,0x2,0x3 the sections on the LCD corresponding to this were separated by several pixels at a regular interval rather than being right next to each other. I am confused on why this is happening.
Though the ST7565P increments columns automatically every write. If I assume this automatic and only ever set the column address once at say column 0 and do up to 127 datawrites the pixels update left to right of the LCD as I expect.
Finally, I have been unable to determine what the heck the "Display Start Line Address" command ever does for this controller. I expected it to possibly be an offset for all of the pages, but using say 0, 8, 16 address in the display did not have any noticeable effect.
Any clarification on this would be appreciated.