[gelöst] oled display 128x64, verzerrte Darstellung seit Updates

Hallo zusammen,

ich hatte vor Monaten angefangen mit einem Arduino Uno und auch Due einen 0.96’’ OLED an zu steuern.
Mit:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Die Besonderheit meines OLED ist, dass ich
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
verwenden muss, kein Problem ging ja alles. Hatte schon einiges grafisch programmiert.

Nun hatte ich keine Zeit, erst Monate später, legte mir noch schnell einen Teensy 3.2 zu und wollte wieder loslegen.

Jetzt wird alles verzerrt dargestellt, als ob je eine leere Zeile zwischen den Bildpunkten liegt, d.h. der Kreis sieht aus wie ein Oval. Dachte, das es vielleicht am neuen Teensy liegt, Nein, auch mein Due und mein Uno machen das Gleiche.

Was vorher in das Display passte, passt nicht mehr.

Hat sich an den LIBs (Adafruit_GFX.h und Adafruit_SSD1306.h) etwas verändert, weiss jemand Rat? Stehe ich irgendwie auf dem Schlauch.
Zumindest gab es einige Updates, als ich die Arduino-Soft nach so einer langen Pause wieder gestartet habe.

Versionen:
Win 7 Pro 64 Bit
Arduino 1.6.12
Adafruit SSD1306 1.1.2
Adafruit GFX 1.1.5

Leider kann ich nicht mehr nachvollziehen, welches Update das Problem brachte, geschweige denn, welche Versionen vorher am laufen waren :frowning:

Auf dem Bild ist mit dieser Zeile ein Kreis gezeichnet:
display.clearDisplay();
display.drawCircle(20, 10, 10, WHITE);
display.display();

bild_teensy_oled.jpg

Die Displays gibts als 32- und 64-Pixel-Vertikalgrösse. Ich vermute, dass die alte Version der Bibliothek nur eine Grösse unterstützte und nun die neue kam, bei welcher man die Grösse per Define (Zeile 73 bis 75 in Adafruit_SSD1306.h) eingestellt werden muss. Wenn Du das korrekt definierst und einen neu kompilierten Sketch lädst, dürfte der Kreis wieder ein Kreis sein.

erstmal danke für deine antwort.

habe das natürlich schon getestet:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//
#define OLED_RESET 4
#define SSD1306_LCDHEIGHT 64
Adafruit_SSD1306 display(OLED_RESET);
//
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

bin mir nicht sicher aber ich denke das liegt an dieser zeile:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

adafruit verwendet für seine 32px OLEDs 0x3C und für 64px OLEDs 0x3D
ich muss von den Vorgaben meines OLED-Herstellers aber 0x3C verwenden, alles andere geht nicht. Vermute das in irgendwelchen Updates nun verändert wurde.

Werde aber weiter recherchieren, vielleicht finde ich was, ansonsten freue ich mich über Tipps, dachte das einer so etwas selber hatte.

Ich spreche von SSD1306_128_32 bzw. SSD1306_128_64. Das musst Du im Adafruit-Header-File ändern, sonst geht es nicht.

Die Angabe von 0x3C bzw. 0x3D ist die I2C-Adresse, die hat sicher wegen des Bibliotheks-Updates nicht geändert. Dafür müsstest Du die Beschaltung verändert haben.

oh oh, bin gerade vom Schlauch runter getreten. Hatte im falschen Ordner die Datei ‘Adafruit_SSD1306.h’.
Habe im Ordner: D: / Arduino / hardware / teensy / avr / libraries / Adafruit_SSD1306 , das ist falsch!!! Sondern
unter F: /Arduino/libraries/Adafruit1306

Danke, manchmal braucht man einen Schubser, damit man nochmal nachdenkt.

Es geht!! -Spitze!