Hallo zusammen,
ich möchte bei einem EA-DOGM128 die Pixel "pixelweise" setzen können. Da
man den Display-RAM nicht auslesen kann habe ich einen "Buffer" dafür im
PIC-RAM definiert.
Leider habe ich diverse Probleme mit der Ausgabe des Buffers. Es werden
zwar auch die richtigen Pixel gesetzt - jedoch wiederholt sich die
Ausgabe entweder in x- oder y-Richtung (je nachdem was ich für routinen
benutze).
Es ist bestimmt nur ein Denkfehler meinerseits.
Hier die Routine zum setzen der Pixel im PIC-RAM:
1 | void display_setpixel(unsigned char x, unsigned char y, unsigned char color) {
|
2 | if (x < 128 && y < 64)
|
3 | if (color != 0)
|
4 | disp_ram[(y >> 3) + (x << 3)] |= (1 << (y & 0x07));
|
5 | else
|
6 | disp_ram[(y >> 3) + (x << 3)] &= ~(1 << (y & 0x07));
|
7 |
|
8 | }
|
und hier die Routine zum Ausgeben:
1 | void display_flush()
|
2 | {
|
3 | unsigned char page, column;
|
4 | for (page = 0; page < 8; page++)
|
5 | {
|
6 | display_write(0xB0 + page, CMD); //Set page address to <page>
|
7 | display_write(0x10, CMD);
|
8 | display_write(0x00, CMD);
|
9 |
|
10 | for (column = 0; column < 128; column++) {
|
11 | display_write(disp_ram[((page) + (column << 3))],DATA);
|
12 | }
|
13 | }
|
14 | }
|
definiert ist "disp_ram" wie folgt:
Bin für jeden Hinweis dankbar. Ich habe nun so ziemlich alle Variationen
zur Errechnung der Adresse und zur Ausgabe ausprobiert ;-)
Gruß,
Tobias