OLED Display mit I2C Bus am Slave betreiben

Gast #7023955
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??
Gast #7023964
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
Gast #7023965
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.
Gast #7024026
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?
Gast #7024196
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"?
Gast #7024225
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.
Gast #7024227
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.
Gast #7024239
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.
Gast #7024241
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.
Angehängte Dateien:
Gast #7024264
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.
Gast #7024268
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.
Gast #7024276
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.
Gast #7024278
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...
Gast #7024358
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.
Gast #7024365
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
  }
Gast #7024391
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.
Gast #7024905
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 
???!!!!
Gast #7025330
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren