Forum: Mikrocontroller und Digitale Elektronik OLED Display mit I2C Bus am Slave betreiben


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Helmut (Gast)


Lesenswert?

Hallo
Ist es möglich ein kleines OLED Display mit I2C Bus an einem Slave zu 
betreiben?
Nicht gleich hauen für diese blöde Frage. Am Atmega geht es ohne 
Probleme.
LG Helmut

von PittyJ (Gast)


Lesenswert?

Ein Slave soll etwas betreiben?

von Heiner (Gast)


Lesenswert?

Slave - ist dieser Ausdruck überhaupt politisch korrekt?
Sollte es nicht besser .... heißen
SCNR

von Helmut (Gast)


Lesenswert?

Der IC hat nur einen Slave als I2C Bus. Möchte das OLED aber ohne Master 
betreiben. Nur als Anzeige zur Kontrolle von Daten.

von Heiner (Gast)


Lesenswert?

OK, ernsthaft - Deine Frage ist etwas ... unspezifisch.

Soll der "Knecht" (ich will das Unwort nicht schreiben) das OLED per I2C 
betreiben? Oder Soll der "Knecht" per I2C an einem "Herrn" betrieben 
werden? Oder soll ...

Was soll's denn nun sein??

von Heiner (Gast)


Lesenswert?

Helmut schrieb:
> Der IC hat nur einen Slave als I2C Bus. Möchte das OLED aber ohne Master
> betreiben. Nur als Anzeige zur Kontrolle von Daten.

Aha, da kommen wir der Sache schon näher; ich nehme an, Dein IC soll ein 
ATTiny841 sein...und an dem soll das OLED hängen

von Helmut -. (dc3yc)


Lesenswert?

Ja, die Frage ist blöd: wie soll das gehen, wenn sich zwei Slaves 
unterhalten wollen? Einer muss den Master machen. Das Display kann das 
nicht. Und was ist das andere IC für ein Slave? Vielleicht kann man das 
zum Master skillen? So wie die Amper?

: Bearbeitet durch User
von Helmut (Gast)


Lesenswert?

Heiner schrieb:
> Aha, da kommen wir der Sache schon näher; ich nehme an, Dein IC soll ein
> ATTiny841 sein...und an dem soll das OLED hängen

Stimmt genau. Möchte eure Hinweise ernst nehmen und ein Display nur am 
Ati841 betreiben. Diese Ati hat nur einen I2C Slave und das OLED hat 
auch nur einen Slave.
Da hast du mich schon in deiner ersten Antwort erwischt.
Da ich den I2C Bus Pins frei habe könnte ein OLED sich gut dran machen. 
Am Master geht es ohne Probleme.

Heiner schrieb:
> Soll der "Knecht" (ich will das Unwort nicht schreiben)
Tut mir Leid für diese Angabe. Es steht aber so im Netz und den DB des 
Herstellers

von drm (Gast)


Lesenswert?

>Der IC hat nur einen Slave als I2C Bus.
nicht gut
>Möchte das OLED aber ohne Master betreiben.
Also entgegen der spezifizierten Funktionsweise
>Nur als Anzeige zur Kontrolle von Daten.
Ein OLED als Anzeige verwenden ist OK, machen die meissten.

Erinnert mich an Werner, der die Aufgabe stellt, mit einem rohen Ei eine 
Bierflasche aufzumachen. Dabei war das Ergebnis immer, das die Flasche 
das Ei aufgemacht hat. Du hast 2 Eier, bei dem eines sich wie eine 
Flasche verhalten soll.

von drm (Gast)


Lesenswert?

mal an wildes SW I2C Pintogglen gedacht um die Quadratur des Kreises zu 
machen ?

von Hugo H. (hugo_hu)


Lesenswert?

Heiner schrieb:
> Aha, da kommen wir der Sache schon näher; ich nehme an, Dein IC soll ein
> ATTiny841 sein...und an dem soll das OLED hängen

:-)

von Helmut (Gast)


Lesenswert?

Nach den zahlreichen Antworten nehme ich an, das es nicht geht. Schade

von PittyJ (Gast)


Lesenswert?

Also mal kurz Google bemüht. Das führt zu Microchip:
https://www.microchip.com/en-us/product/ATtiny841

und da gibt es wiederum:
AN_42010 - AVR156: TWI Master Bit Bang Driver
AN2480 - AVR315: Using the TWI Module as I2C Master

Also kann man wohl den Tiny auch als I2C Master betreiben, oder auf 
anderen Pins was bitbangen.


Warum geht eigentlich Google bei euch nicht? War schon einer hier, der 
nicht googlen konnte. Ist da eine technische Störung?

von Heiner (Gast)


Lesenswert?

Hallo Helmut

Du hast doch schon Stefan F um Rat gefragt - siehe:
Beitrag "I2C Display-Weis-I2C-SDD1306-128x64-Modul"

das Dumme ist aber bei Stefan - er hat das Ganze für Arduino geschrieben 
:-))

Ich versteh' nicht, warum Du so auf den ATTiny841 fixiert bist - er hat 
zwar 8kByte RAM und 512 Byte SRAM, aber nur 12 "Beinchen", die man 
nutzen kann, und wenn ich mir Deine bisherigen Beiträge - wenn auch 
unter verschiedenen Aliase - ansehe, hast Du bislang damit nur 
rumgespielt....

Hast Du eine sinnvolle Anwendung oder geht es Dir nur ums Kennenlernen, 
Ausprobieren und "eigene Grenzen erkennen"?

von Helmut (Gast)


Lesenswert?

Stefan hatte eine Beitrag/Adresse angegebe die leider nur ein ERROR 
gebracht hat. Deshalb habe ich nach einer aktuellen Adresse gefragt. 
Stimmt, das ist nur für den Arduino. War zu Anfang nicht ganz klar. Zum 
ansehen aber wunderbar geeignet wie man so was machen kann.

Heiner schrieb:
> Hast Du eine sinnvolle Anwendung oder geht es Dir nur ums Kennenlernen,
> Ausprobieren und "eigene Grenzen erkennen"?

Das letztere wird wohl stimmen. Habe verschiedene Attinys ausprobiert. 
Manchen hatten kein ADC drin, nur AC. Andere hatten andere Probleme, 
entweder zu wenig Beine oder zu viel. Manche lassen sich nur per USI 
ansprechen und verschiedenes anderes.
Mir geht es um den I2C Bus. Nenne es "verteilte Intellegenz". Jeder 
Prozessor hat seine Aufgabe dabei. Jede Teilaufgabe wird von einem 
ausgeführt. Ein grösserer Prozessor übernimmt die Zentrale Rolle und 
regelt das abrufen der einzelnen Daten und die Anzeige. Dadurch kann man 
es relativ leicht erweitern oder vergrössern. Auch 32 Bit oder ein PIC 
ist damit möglich. Es ist auch Multitasking möglich ohne den zentralen 
Prozessor zu überfrachten.

Google geht bei mir. Im DB des Herstellers ist aber extra angegeben das 
der IC nur als Slave arbeiten kann. Manche sagen dazu: Ist halt nur ein 
Schieberegister.
Wie man daraus oder mit diesem IC ein Master machen kann ist mir völlig 
unklar. Ist eine eigentlich eine schöne Aufgabe für die Profis.

von och nee (Gast)


Lesenswert?

Helmut schrieb:
> Mir geht es um den I2C Bus. Nenne es "verteilte Intellegenz". Jeder
> Prozessor hat seine Aufgabe dabei. Jede Teilaufgabe wird von einem
> ausgeführt. Ein grösserer Prozessor übernimmt die Zentrale Rolle und
> regelt das abrufen der einzelnen Daten und die Anzeige. Dadurch kann man
> es relativ leicht erweitern oder vergrössern. Auch 32 Bit oder ein PIC
> ist damit möglich. Es ist auch Multitasking möglich ohne den zentralen
> Prozessor zu überfrachten.

Bei so einem flachen Geschwurbel wir mir ganz schwindelig.

von Stefan F. (Gast)


Lesenswert?

Helmut schrieb:
> das ist nur für den Arduino.

Der Quelltext ist so strukturiert, das man die Arduino und C++ Anteile 
leicht wieder entfernen kann.

von Stefan F. (Gast)


Lesenswert?

Helmut schrieb:
> Im DB des Herstellers ist aber extra angegeben das
> der IC nur als Slave arbeiten kann.

Man kann den TWI Master ziemlich leicht in Software implementieren.

Schau dir das als Anregung an:
http://codinglab.blogspot.com/2008/10/i2c-on-avr-using-bit-banging.html

von c-hater (Gast)


Lesenswert?

Helmut schrieb:

> Mir geht es um den I2C Bus. Nenne es "verteilte Intellegenz". Jeder
> Prozessor hat seine Aufgabe dabei. Jede Teilaufgabe wird von einem
> ausgeführt. Ein grösserer Prozessor übernimmt die Zentrale Rolle und
> regelt das abrufen der einzelnen Daten und die Anzeige.

Genau. Und wieso fragst du jetzt doch nach einem Slave, der außerdem 
auch noch Master sein soll?

Oder soll der Tiny841 NUR Master sein und nur das Display als Slave 
ansteuern?

Genau das sind zwei völlig verschiedene Fragen und du hast eigentlich 
keine von beiden gestellt. Wohl weil du keinen Plan hast, was du da 
eigentlich tust.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Helmut,
Ich habe in meinen Backups die erste Version meiner Bibliothek gefunden, 
die I²C noch per Bit-Banging gemacht hatte. Schau dir da mal die i2c 
Funktionen an

  * i2c_start()
  * i2c_stop()
  * i2c_send(uint8_t byte)

die müssten mit nur marginalen Anpassungen auch auf deinem ATtiny 
laufen. Eine i2c_read() Funktion gibt es in diesem Projekt nicht, da sie 
nicht gebraucht wurde.

OUTPUT_OPEN_DRAIN wird von Arduino gesetzt, wenn der I/O Pin einen 
Open-Drain Modus unterstützt. Das ist bei deinem µC der Fall.

von Heiner (Gast)


Lesenswert?

Hallo Helmut

Hast Du überhaupt schon mal per I2C Daten zwischen einem Master und 
einem Slave ausgetauscht; ich meine nicht nur ein paar Bits sondern eine 
richtige sinnvolle Kommunikation aufgezogen?

Z.B am ATMega128 (Master) hängt per IC2 ein Portexpander, dieser 
liest/gibt Binärsignale ein/aus; der Master liest per ADC Werte ein und 
am IC2 hängt ZUSÄTZLICH ein weiterer ATMega128 (Slave!); dieser empfängt 
Daten (z.B den vom Master eingelesenen ADC Wert und gibt ihn auf seinem 
Display aus) und gibt an den Master ebenfalls Signale, die der Slave per 
IC2 von einem weiteren Portexpander erhalten hat?
Dies wäre z.B ein sinnvoller Test.
Da hättest Du also:
Master erhält/gibt Signale an seinen (!!) Portexpander/Display per IC2
Slave erhält/gibt Signale an seinen(!!) Portexpander/Display per IC2
Master uns Slave kommunizieren per IC2

und @Stefan - glaubst Du wirklich, Helmut kann mit Deinem Code was 
anfangen???
Sorry, aber das bezweifle ich.
Wenn Du ihm nicht mundgerecht ein Beispiel (funktionsfähig auf dem 
ATTiny841) servierst, wird das nichts.

von Stefan F. (Gast)


Lesenswert?

Heiner schrieb:
> glaubst Du wirklich, Helmut kann mit Deinem Code was anfangen???

Weiss nicht. Ich habe auch eher das Gefühl, dass er den I²C Bus ohne 
richtigen Master missbrauchen will.

Helmut:
Falls ich da richtig liege, denke mal über Kollisionen nach und schau 
dir an wie der CAN Bus damit umgeht.

von Heiner (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Heiner schrieb:
>> glaubst Du wirklich, Helmut kann mit Deinem Code was anfangen???
>
> Weiss nicht. Ich habe auch eher das Gefühl, dass er den I²C Bus ohne
> richtigen Master missbrauchen will.
>

Wenn er mit dem ATTiny841 arbeiten will - der kann keinen Master

von Stefan F. (Gast)


Lesenswert?

Heiner schrieb:
> Wenn er mit dem ATTiny841 arbeiten will - der kann keinen Master

Doch kann er, mit Bit-Banging. Worauf ich hinaus wollte ist, dass der 
I²C Bus nicht für ein Kommunikationsmodell vorgesehen, wo einfach jeder 
jedem etwas senden kann.

Bei I²C darf kein Slave einfach los plappern, es sei denn er wurde vom 
Master gefragt.

von c-hater (Gast)


Lesenswert?

Heiner schrieb:

> Wenn er mit dem ATTiny841 arbeiten will - der kann keinen Master

Klar, mit Bitbanging kann er das schon und auch mit einer Teilnutzung 
des vorhandenen Hardware-Slave. Wurde beides bereits im Thread erwähnt.

Was er allerdings nicht kann, ist Multimaster. Und genau deswegen ist es 
nötig, das der TO sich erstmal mit sich selbst auf ein Konzept einigt, 
was überhaupt laufen soll...

von Heiner (Gast)


Lesenswert?

der ATTiny841 hat nur ein " client I2C serial interface" lt 
https://www.microchip.com/en-us/product/ATtiny841

von c-hater (Gast)


Lesenswert?

Heiner schrieb:

> der ATTiny841 hat nur ein " client I2C serial interface" lt
> https://www.microchip.com/en-us/product/ATtiny841

Ja, das stimmt schon. Aber es hindert ihn nicht daran, auch als 
I2C-Master agieren zu können. Wie nun schon gefühlt 100fach erwähnt...

von Heiner (Gast)


Lesenswert?

c-hater schrieb:
> Heiner schrieb:
>
>> der ATTiny841 hat nur ein " client I2C serial interface" lt
>> https://www.microchip.com/en-us/product/ATtiny841
>
> Ja, das stimmt schon. Aber es hindert ihn nicht daran, auch als
> I2C-Master agieren zu können. Wie nun schon gefühlt 100fach erwähnt...

;-) +1

von Helmut (Gast)


Lesenswert?

c-hater schrieb:
> Was er allerdings nicht kann, ist Multimaster. Und genau deswegen ist es
> nötig, das der TO sich erstmal mit sich selbst auf ein Konzept einigt,
> was überhaupt laufen soll...

Multitasking meine ich, nicht Multimaster und das läuft auf dem Master.

Heiner schrieb:
> Hast Du überhaupt schon mal per I2C Daten zwischen einem Master und
> einem Slave ausgetauscht; ich meine nicht nur ein paar Bits sondern eine
> richtige sinnvolle Kommunikation aufgezogen?

Das habe ich bereits gemacht. Du hast selber entsprechende Seiten 
genannt wo einzelne Tuts und Programme veröffentlich wurden. Teilweise 
habe ich bis 6 Slave am Master dran. Beispiel dazu: PCF8574, PCF8591, 
MCP23008, MCP23017, OLED, E-Paper, INA221, Farb TFT Display von EA mit 
bis zu 3,2 Zoll.
Teilweise habe ich 2 Displays gleichzeitig am Bus betrieben. Auch der 
Austausch von Atmega zum Attiny 841 und zurück per Bus klappt ohne 
Probleme. Kann dir gern ein Beispiel dazu bringen.
Ein richtiger sinnvolle Kommunikation ist für mich die graphische 
Anwendung auf einem TFT Display mit verschiedenen Schriftarten oder 
Darstellung von Geraden, Mehrecken oder einer Laufschrift mit dem 
(mehreren) HT16K33 und 5 (und mehr) x Matrix 8x8. Das sind nach meiner 
Rechnung über 300 LEDs. Die Beispiel dazu stehn im Netz, musst nur 
richtig suchen.

von Helmut (Gast)


Lesenswert?

Ein Beispiel was funktioniert:
1
void Graphik_Gerade(int8_t x1, int8_t y1, int8_t x2, int8_t y2)
2
  {    
3
    uint8_t bcc;
4
    bcc = 0x11 + 0x07 + 0x1b + 'G' + 'D' + x1 + y1 + x2 + y2;
5
    i2c_start(slave_adresse_1);
6
    i2c_write(DC1);    // DC1 
7
    i2c_write(0x07);    // len 07
8
    i2c_write(ESC);    // ESC 
9
    i2c_write('G');    // G
10
    i2c_write('D');    // D
11
    i2c_write(x1);
12
    i2c_write(y1);
13
    i2c_write(x2);
14
    i2c_write(y2);                                                     
15
    i2c_write(bcc);
16
    i2c_start(slave_adresse_2);
17
    e = i2c_readAck();
18
    i2c_stop();
19
    _delay_us(10);
20
  }

von Heiner (Gast)


Lesenswert?

2 Displays per I2C Bus - da sind aber die Anzeigen etwas langsam, auch 
wenn Du den Bus mit 400kHz betreibst; insbesondere wenn es 128x64 
Displays sind und die ständig refreshst.

SPI wäre da wohl sinnvoller.

Noch besser wenn die Displays direkt von einem Prozessor angesteuert 
werden.

von Helmut (Gast)


Lesenswert?

Bei dieser Anwendung ist es relativ egal. Das Graphik Display nutze ich 
zur eigentlichen Anzeige und das OLED nur zur Anzeige der Prüfsumme. Das 
Display funktioniert nur wenn die Prüfsumme korrekt berechnet wird und 
der Wert zurückgelesen wird. Die Prüfsumme muss vorher berechnet werden, 
zum Display übertragen werden und wird vom Display nochmal berechnet. 
Wenn beide Werte übereinstimmen erfolgt die Anzeige. Der Wert muss auch 
ausgelesen werden, sonst keine Anzeige. Das Display ist so schnell das 
eine Pause eingefügt werden muss, sonst kann es zu einer fehlerhaften 
Anzeige kommen.
Je nach Typ kann die Anzeige auch 320 x 164 haben. Dann muss noch eine 
Berechnung efolgen wo die Anzeige liegt.
Komisch, es ist hier so still, keiner meckert das ich keine Ahnung habe 
oder überhaupt schon mal eine Übertagung per Bus gemacht habe. Komisch 
???!!!!

von Heiner (Gast)


Lesenswert?

Von Dir kommt ja nichts mehr

von Joachim B. (jar)


Lesenswert?

Helmut schrieb:
> Die Prüfsumme muss vorher berechnet werden,
> zum Display übertragen werden und wird vom Display nochmal berechnet.

welche OLED Displays berechnen Prüfsummen?

Ich denke ich habe den Faden verloren oder der Helmut!

von Sepp (Gast)


Lesenswert?

Helmut schrieb:
> Das Graphik Display nutze ich
> zur eigentlichen Anzeige und das OLED nur zur Anzeige der Prüfsumme.

Joachim B. schrieb:
> welche OLED Displays berechnen Prüfsummen?

Imho spielt das Prüfsummen-G'schichterl auf einer Nebenbünhe - und hat 
primär mit I2C gar nix zu tun. Aber so'n richtigen Vers drauf machen 
kann ich mir nich'.

Und so'ne kunterbunte Teil-Anzeige auf je 1x Grafik-Display und OLED? Jo 
mei, wem's g'fällt?

von Εrnst B. (ernst)


Lesenswert?

Gab doch da grad einen passenden Parallel-Thread, der hat aber einen 
Tiny85 verwendet:

Beitrag "Meine Grafiklibary für den Attiny85/SSD1306 und ein kleines Betriebssystem"

Mit Youtube-Video :)

von (prx) A. K. (prx)


Lesenswert?

Nachbarthread vom gleichen Poster zum gleichen Thema:
Beitrag "Display am Attiny 841"

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.