Steve van de Grens schrieb:
Mache mal einen Gegentest mit
http://stefanfrings.de/arduino_oled/index.html
Wenn es damit geht, ist die Hardware wohl in Ordnung. Ich denke, diese
Erkenntnis wäre hilfreich, auch wenn du weiterhin die Adafruit
Bibliothek nutzen willst.
Abgesehen davon, daß es bei der jüngsten Version zeilenweise einen Versatz gibt, so daß es kein bündiges Bild ergibt, konnte ich eine ältere Version von OLED.zip finden, die ich früher mal gespeichert hatte. Da mußte ich noch in der ::display() Methode die 0x00 in 0x02 ändern und dann ergab sich ein vernünftiges Bild. In der Demo wird allerdings bei der Demonstration des horizontalen Scrollings der unterstrichene "Hello" Text ein paar Pixel zu hoch abgeschnitten und es scrollt dann noch ein bißchen "Müll" mit, aber im Prinzip kann ich das evtl. sogar nutzen oder ich muß den Code in C überführen.
Die nachfolgende Version von ::display benutze ich jetzt:
1 |
void OLED::display()
|
2 |
{
|
3 |
size_t index = 0;
|
4 |
for (uint_fast8_t page = 0; page < pages; page++)
|
5 |
{
|
6 |
// Set memory address to fill
|
7 |
i2c.beginTransmission(i2c_address);
|
8 |
i2c.write(0x00); // command
|
9 |
if (isSH1106)
|
10 |
{
|
11 |
i2c.write(0xB0 + page); // set page
|
12 |
i2c.write(0x02); // lower columns address =0 << hier 02 statt 00
|
13 |
i2c.write(0x10); // upper columns address =0
|
14 |
}
|
15 |
else
|
16 |
{
|
17 |
i2c.write(0xB0 + page); // set page
|
18 |
i2c.write(0x21); // column address
|
19 |
i2c.write(0x00); // first column =0
|
20 |
i2c.write(width - 1); // last column
|
21 |
}
|
22 |
i2c.endTransmission();
|
23 |
|
24 |
// send one page of buffer to the display
|
25 |
i2c.beginTransmission(i2c_address);
|
26 |
i2c.write(0x40); // data
|
27 |
for (uint_fast8_t column = 0; column < width; column++)
|
28 |
{
|
29 |
// Split the transaction into chunks of 32 bytes because that is a limitation of Arduino
|
30 |
if (column>0 && (column % 31 == 0) )
|
31 |
{
|
32 |
i2c.endTransmission();
|
33 |
i2c.beginTransmission(i2c_address);
|
34 |
i2c.write(0x40); // data
|
35 |
}
|
36 |
|
37 |
i2c.write(buffer[index++]);
|
38 |
}
|
39 |
i2c.endTransmission();
|
40 |
yield(); // to avoid that the watchdog triggers
|
41 |
}
|
42 |
}
|