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
Slave - ist dieser Ausdruck überhaupt politisch korrekt? Sollte es nicht besser .... heißen SCNR
Der IC hat nur einen Slave als I2C Bus. Möchte das OLED aber ohne Master betreiben. Nur als Anzeige zur Kontrolle von Daten.
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??
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
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
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
>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.
mal an wildes SW I2C Pintogglen gedacht um die Quadratur des Kreises zu machen ?
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 :-)
Nach den zahlreichen Antworten nehme ich an, das es nicht geht. Schade
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?
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"?
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.
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.
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.
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
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.
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.
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.
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.
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
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.
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...
der ATTiny841 hat nur ein " client I2C serial interface" lt https://www.microchip.com/en-us/product/ATtiny841
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...
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
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.
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 | }
|
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.
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 ???!!!!
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!
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?
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.