Forum: Mikrocontroller und Digitale Elektronik Grove - OLED-Display 0,96" (SSD1315) nicht mit HW-I2C unter Arduino Uno


von BlaBla (Gast)


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

von W.S. (Gast)


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.

von Jobst M. (jobstens-de)


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

von EAF (Gast)


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.

von STK500-Besitzer (Gast)


Lesenswert?

Ohne das Datenblatt des Displays zu kennen:

EAF schrieb:
> Die Display Lib möchte allerdings 128 oder 256 Byte große Blöcke
> versenden.

In einem Stück? Ansonsten könnte man das stückeln.

von BlaBla (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.