Grove - OLED-Display 0,96" (SSD1315) nicht mit HW-I2C unter Arduino Uno

Gast #7115113
Lesenswert?
• ▲
▼
Kennt einer den Grund, warum beim Arduino Uno (ATmega328P) nur die 
SW-I2C verwendet werden kann? Ich kommt nicht darauf.

Übersetzter Auszug aus dem Link unten:
Wenn Ihr Board ein ATmega328 ist, wie z. B. Seeeduino V4.2 und Arduino 
UNO, müssen Sie   bei Verwendung der U8G2-Bibliothek auf Soft-I2C 
wechseln . Dies ist nicht erforderlich, wenn Sie ein 
SAMD-Entwicklungsboard verwenden.

https://www.seeedstudio.com/Grove-OLED-Display-0-96-SSD1315-p-4294.html
Gast #7115153
Lesenswert?
• ▲
▼
BlaBla schrieb:
> Kennt einer den Grund, warum beim Arduino Uno (ATmega328P) nur die
> SW-I2C verwendet werden kann? Ich kommt nicht darauf.

Dann (wenn dich das so sehr interessiert) befasse dich mal mit dem 
I2C-Core im verwendeten Controller.

Meine Erfahrung ist, daß in recht vielen Controllern die I2C-Hardware 
eine ziemliche Kröte ist. Das reicht von solchen Cores, die für jeden 
Zustandswechsel einen oder mehrere Interrupts erzeugen und damit die 
Menge an zu schreibendem Quellcode erheblich in die Höhe treiben bis zu 
Cores, die da meinen, alles selber zu erledigen, aber zuvor verlangen, 
daß man genau angeben muß, wieviele Bytes man zu transferieren wünscht.

Normalerweise muß man gerade beim I2C ohnehin die ganze Zeit warten, 
weil man am Schluß jedes Bytetransfers das ACK bzw. NAK auswerten muß 
und ein Soft-I2C als Master braucht recht wenig Code. Also liegt es 
durchaus nahe, das Ganze rein softwaremäßig zu machen.

W.S.
#7115481
Lesenswert?
• ▲
▼
Man kann das genannte Display ohne Probleme mit der Hardware 
I²C-Schnittstelle des AVR bedienen.
Als Dauino-Benutzer bist Du von Libraries abhängig. Also wird Dir nichts 
anderes übrig bleiben, als Soft-I²C zu benutzen.
Oder Du fängst an, selber Software zu schreiben.

W.S. schrieb:
> [...]

Natürlich muss man bei I²C warten, wenn man seine Software nicht 
entsprechend auslegt, zwischendurch andere Dinge erledigen zu können.
Dafür sind die ganzen IRQs da. So viel Code wird das auch nicht.


Gruß
Jobst
Gast #7115553
Lesenswert?
• ▲
▼
BlaBla schrieb:
> Kennt einer den Grund, warum beim Arduino Uno (ATmega328P) nur die
> SW-I2C verwendet werden kann? Ich kommt nicht darauf.

Ich kann auch nur vermuten... Glaskugelmodus
Wire funktioniert eigentlich recht prächtig.
Hat allerdings nur 32 Byte große Buffer.
Die Display Lib möchte allerdings 128 oder 256 Byte große Blöcke 
versenden.
Gast #7117800
Lesenswert?
• ▲
▼
EAF schrieb:
> Wire funktioniert eigentlich recht prächtig.
> Hat allerdings nur 32 Byte große Buffer.
> Die Display Lib möchte allerdings 128 oder 256 Byte große Blöcke
> versenden.

Das könnte die Ursache sein. Bei Gelegenheit werde ich mir mal das 
Datenblatt des ATmega328p und die Libraries näher anschauen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.