Problem mit SEEED 96x96 Pixel Screen und I2C-Steuerung: Pixelanzeige chaotisch

Hallo zusammen,
ich habe einen 96x96 OLED Screen (SSD1327) von der Marke SEEED bei Reichelt Elektronik gekauft (GRV OLED 1.12: Arduino - Display 1,12", Grove OLED-Display, SSD1327 bei reichelt elektronik). Ich möchte diesen mit dem I2C Protokoll und einem Arduino R4 WiFi ansteuern.
Ich bin Selbst Student im Fach Systems Engineering und möchte gerne eigene Erfahrungen mit Dem Umgang mit Microcontrollern und diverser Peripherie sammeln.

Ich habe die offizielle Bibliothek passend zu dem Bildschirm verwendet und auch die U8G2 Bibliothek ausprobiert, doch die Anzeige bleibt in jedem Fall die gleiche.
Auf dem Bildschirm werden scheinbar zufällige Pixel angezeigt, wobei sich ein vertikaler Streifen auf dem Bildschirm vom Rest abhebt.

/*

  HelloWorld.ino

  Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)

  Copyright (c) 2016, olikraus@gmail.com
  All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, 
  are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
  * Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  

*/

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

/*
  U8g2lib Example Overview:
    Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
    Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
    U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
    
*/

// Please UNCOMMENT one of the contructor lines below
// U8g2 Contructor List (Frame Buffer)
// The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
// Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected

U8G2_SSD1327_SEEED_96X96_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);	// Seeedstudio Grove OLED 96x96

//U8G2_SSD1327_SEEED_96X96_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);	// Seeedstudio Grove OLED 96x96

//U8G2_SSD1327_EA_W128128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_EA_W128128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_EA_W128128_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 4, /* reset=*/ U8X8_PIN_NONE);

//U8G2_SSD1327_EA_W128128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */

//U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_MIDAS_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */

//U8G2_SSD1327_ZJY_128X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_ZJY_128X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_ZJY_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */

//U8G2_SSD1327_WS_128X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_WS_128X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_VISIONOX_128X96_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

//U8G2_SSD1327_VISIONOX_128X96_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();					// clear the internal memory
  u8g2.setFont(u8g2_font_ncenB08_tr);	// choose a suitable font
  u8g2.drawStr(0,10,"Hello World!");	// write something to the internal memory
  u8g2.sendBuffer();					// transfer internal memory to the 
  display
  delay(1000);  
}

Das ist der Code aus der U8G2 Bibliothek um ein Hello World Programm abzuspielen. Ich habe den unkommentierten constructor zuletzt ohne Erfolg getestet.


So habe ich das Display und den Arduino Verschaltet. Ich habe die Verbindungen und Kabel durchgemessen und hier eigentlich keinen Fehler gefunden.

Ich würde mich über jede Hilfe freuen!
Mike Bachelier

Wieviel V braucht das Display? Hast du Pullups an den I2C Leitungen?

Ich habe keine Pullups verwendet, da ich davon ausgegangen bin, dass im Arduino-Bord bereits solche Widerstände verbaut sind. Im Datenblatt habe ich folgende Information gefunden. Das habe ich zuvor wohl überlesen.

Muss ich also eine Versorgungsspannung von mindestens 8 Volt zum Betrieb verwenden?

Vcc ist der äußere Pin anschluss der im Moment mit dem 5 Volt pin des Arduino verbunden ist.

Einfach mal den Schaltplan des Boards ansehen.

ja.

Und du brauchst einen Levelshifter wegen max. 3.5V Interface Spannung

Also einen Levelshifter für die I2C Steuerleitungen? Vielen Dank für den Hinweis. Ich muss mich zu diesem Thema nochmal genauer einlesen, weil ich auf Anhieb jetzt nicht genau weiß wie ich einen solchen Widerstand dimensionieren muss oder in welche Leitung dieser geschaltet werden muss.

Kein Widerstand, eine aktive Schaltung ist das.

Google mal nach " i2c level shifter 3.3v 5v"

Brauchst gar nix zu tun das Display ist für 3,3/ 5V Systeme, Grove normalerweise arbeitet mit 5V. steht auch in einer der Detenblätter. Und bei Reichelt ist klar und deutlich.

 Graphik-Display-Adapter für Seeeduino oder Arduino mit dem "Stem"-Board von Grove
• Display-Adapter für jeden Mikrocontroller mit 5 oder 3,3 V, der die I²C-Schnittstelle unterstützt
• kann mit einem Mbed-Mikrocontroller verwendet werden

Grove macht ein Universal Stecksystem für alles was die Verkaufen.

Hier durchlesen ist für dein Display

Mach den nicht verückt

1 Like

Noch was du hast SW ausgewählt arbeitest HW ,

//U8G2_SSD1327_SEEED_96X96_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);	// Seeedstudio Grove OLED 96x96

Und wen schon dann sollte SCL und SDA Deklariert werden dein Uno ist ein UNO R4 wie ich sehe, ob die U8G2 den unterstützt ist auch so eine Frage
Auch wenn Arduino Schreibt Kompatibel Mit UNO, ist er das nicht, hat ganz andere MCU, und vom UNO R4 sind sogar zwei modele was zu einander nicht passen wen es geht um Bibliotheken.
Mit dem Uno R4 hat sich Arduino selber ein Kuckuck Ei gelegt :wink:

Ich habe mich nur an dem Datenblatt orientiert, das er gezeigt hat.

das "display" ist falsch, dazu noch fehlt abschließendes ;, nimm das raus.

Wo aber @wwerner recht haben könnte, die fehlende Pull Up weis nich ob der R4 welsche hat. Grove packt die auf den Schild, was ist vorgesehen für alle Sachen was die verkaufen.

Nimm mal die Bibliothek

Unterstützt die Bibliothek den R4?

Gute Frage :wink:
Ich wurde sagen falsches Display + nicht geeignete Platine.
Für den SSD1327 gibt es nur u8g2 und nachgebaute von Seeeduino libraries.

Vielen Dank für die Antworten. Ich werde es morgen mal mit der vorgeschlagenen Bibliothek ausprobieren und eine geeignete Spannungsversorgung verwenden. Ich werde mich dann wieder melden wenn ich das getestet habe.

Nächstes Mal dann am besten direkt ein kompatibles Display verwenden. Danke für den Hinweis.

Vielicht einen kompatiblen Arduino??

1 Like

Habs jetzt einfach mit einem Arduino Uno nochmal mit der vorgeschlagenen Bibliothek ausprobiert. Hat dann auch funktioniert. Aber die Versorgungsspannung von 5 Volt war doch richtig. Das hat in dem Datenblatt des Display gestanden.

Auf jeden Fall nochmal danke für die vielen Antworten. Das Thema wäre für mich dann geklärt.

Gruß
Mike

Danke für Rückmeldung, schön das es geklappt hat :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.