Forum: Mikrocontroller und Digitale Elektronik Display am Attiny 841 mit I2C Bus


von Klaus (Gast)


Lesenswert?

Hallo Gemeinde
In einem Projekt von mir verwende ich einen Atmega 128 als Master im I2C 
Bus. Als Slave verwende ich mehrere Attiny 841 mit verschiedenen 
Aufgaben.
Möchte unter anderem  ein Display mit 4x16 und dem PCF betreiben.
Kann ich das Display durch ein Slave ansteuern oder muss ich immer über 
den Master gehen?
LG Klaus

von H.Joachim S. (crazyhorse)


Lesenswert?

D.h. das Display hängt über einem PCF am Bus?
Dann brauchst du Multimasterbetrieb, aber TWI des Tiny841 kann keinen 
master spielen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Klaus schrieb:
> Kann ich das Display durch ein Slave ansteuern oder muss ich immer über
> den Master gehen?
Wenn der Master so lange "seine Klappe hält", bis der Slave mit seinem 
Zugriff aus das Display fertig ist, dann geht das.

Aber du merkst schon: je mehr "Rechnerkerne" im System sind, umso 
schwieriger wird das Handling. Und dann wird das gemeinsame Interface 
gern mal zum Nadelöhr. Denn man kann zwar beliebig viele Dörfer oder 
auch Städte an eine Straße bauen, aber wenn die Straße zu klein ist, 
dann klemmts trotzdem recht schnell...

H.Joachim S. schrieb:
> aber TWI des Tiny841 kann keinen master spielen.
I2C kann man auf der "Masterseite" leicht per Software auskaspern.

von Klaus (Gast)


Lesenswert?

Es bleibt dann wohl nur die Möglichkeit den Atti 841 als Slave zu 
betreiben und das Display an den Pin/Port anzuschliessen. Kommt das alte 
Problem der freien Pins ob die Ausreichen ein Display zu betreiben.
LG Klaus

von I2C Softy (Gast)


Lesenswert?

H.Joachim S. schrieb:
> aber TWI des Tiny841 kann keinen master spielen.

Aber man könnte sich ja einen zweiten I2C Port kreieren
der dann Master zum Display sein könnte. Ich würde
das so machen denn meine Soft-I2C-Implementierung lässt
ein praktisch beliebige Auswahl von Pins dafür zu.

"Paar" Bytes Mehraufwand ....

von Klaus (Gast)


Lesenswert?

Noch eine Frage zum Problem. Wenn ich den Attiny 841 nehme und Display 
mit 4 Bit anschliesse, könnten mit den anderen so um die 7 Pins sein. 
Wie kann ich das Display vernünftig über den I2C Bus ansteuern. Auf dem 
Atti 841 habe ich doch ein Programm drauf, was sit dabei zu beachten? 
Jemand eine Idee dazu?

von Uhrgucker (Gast)


Lesenswert?

Klaus schrieb:
> Wie kann ich das Display vernünftig über den I2C Bus ansteuern.

Du brauchst einen I2C Port Expander und dafür nur 2 Leitungen:

SCL und SDA.

https://www.ebay.de/itm/PCF8574-I2C-PortExpander-Shield-Modul-fur-Arduino-Raspberry-Pi-und-sonstige-uC/291971347592?hash=item43fad93488:g:g64AAOSwPOhaXman

von kein Troll (Gast)


Lesenswert?

Da bin ich genauso weit wie vorher. Möchte diesen PCF nicht verwenden. 
Habe ihn bereits mit einem anderen LCD Display 4x16  verwendet. Möchte 
ein Oled Display von EA mit einem Attiny 841 über I2C ansteuern. Die 
übertragung in beide Richtungen geht schon. Bleibt nur noch die 
eigentliche Ansteuerung mit dem 841 im 4 Bit Modus

von Klaus (Gast)


Lesenswert?

Keiner eine Idee dazu?

von jo mei (Gast)


Lesenswert?

kein Troll schrieb:
> Möchte diesen PCF nicht verwenden.

Ich habe Hunger aber ich will nicht essen.

von c-hater (Gast)


Lesenswert?

Klaus schrieb:

> Keiner eine Idee dazu?

Wenn du irgendwie, irgendwann mal technisch darstellen könntest, was du 
eigentlich willst, dann könnte man vielleicht auf Ideen kommen.

Aber so, wenn schon die Frage absolut hirnloses Gesülze ist, welches von 
einem so derart tiefen Nichtwissen dessen spricht, was man tut, da wird 
das schon echt schwierig mit den Ideen...

von Klaus (Gast)


Lesenswert?

Hatte eigentlich auf Hilfe und Unterstützung gehofft. Das scheint aber 
irgendwie nicht vorhanden zu sein,
Ausgangslage:

1. Attiny 841
2. Display EA W204 Oled mit 4x20 Zeichen

Betriebsart Display:
4  Bit Betrieb am Atti 841

Betriebsart Attiny 841:
- als I2C Slave zur Ansteuerung des Displays

Master:
Atmega 128

Was  bereits funktioniert :
Die Verbindung mit dem I2C Bus vom Master und Slave mit Austausch von 
Werten

Was ich suche:
Wie  steuere ich den Attiny 841 als Slave zur Darstellung von Zeichen 
auf dem Display an

Ist das klarer?

von jo mei (Gast)


Lesenswert?

Klaus schrieb:
> Ist das klarer?

Nö.

von c-hater (Gast)


Lesenswert?

Klaus schrieb:

> Ist das klarer?

Ja, ich weiß jetzt immerhin, was du willst und brauchst. Ich könnte das 
auch programmieren. Aber: es ist nicht mein Problem, warum also sollte 
ich das tun?

Es ist aber offensichtlich dein Problem, du hättest also eine 
Motivation, es zu tun. Das einzige, was dich davon abhalten könnte: du 
kannst nicht Programmieren. Das wäre aber böse, ein echter Showstopper. 
Wenn man Programme bauen will, sollte man Programmieren können. Echt!

Wenn du es nicht kannst: Lernen hilft.

von jo mei (Gast)


Lesenswert?

c-hater schrieb:
> Wenn du es nicht kannst: Lernen hilft.

Ich will aber dass mir gebratene Tauben in den Mund fliegen.

Und zwar ganz von alleine!

von H.Joachim S. (crazyhorse)


Lesenswert?

Na kommt, ich glaube, da fehlt nur ne Idee, wie er das anfangen soll.

-Initialisierung macht der Tiny ganz allein, ohne Zutun des masters.
Jetzt musst du entscheiden - wieviel Funktionalität willst du von aussen 
steuerbar machen?

Im allereinfachsten Fall beschränkst du dich erst mal darauf, nur 
Zeichen aus dem character-ROM darzustellen. Verzichtest auf den CG-RAM 
und auch aufs Lesen des Displays.

Du reservierst einen Speicherbereich von 80 Byte, auf den du vom master 
aus schreibend zugreifen kannst
start
write dev adr
write byte adr
write datenbytes (n)
stop

bei stop schmeisst du alle 80 Byte aufs Display, fertig in der 
einfachsten Form.

Jetzt kannst du dich nach Beleiben weiter austoben.

von Klaus (Gast)


Lesenswert?

Das mit der Idee stimmt. Erwarte das mir keine gebratene Tauben so 
einfach zufliegen.
Habe bisher am Atm 128 das LCD initialisiert und konnte die gewünschten 
Ausgaben am Display anzeigen lasse. Am Display habe ich einen PCF 8574 
in Betrieb, der die Darstellung im 4 Bit Modus macht. Das sind die 4 
Datenleitungen und 3 Steuerleitungen.
Am Atti 841 mache ich wieder ein init des Displays, soweit ist alles 
klar. Kann ich den Ausgabe am Display genauso vornehmen wie beim PCF 
oder gibt es was zu beachten?
Sorry für die Fragen, aber es scheint kaum etwas an Wissen für diesen 
Fall zu geben

von H.Joachim S. (crazyhorse)


Lesenswert?

Klaus schrieb:
> Kann ich den Ausgabe am Display genauso vornehmen wie beim PCF

Eher nicht. Ich denke mal, du hast bisher eine lib für Display+PCF-Kombi 
benutzt? Also fertige Funktionen wie lcd_gotoxy(), lcd_clr() etc?

Wenn ja: das ist dann der Fluch der libraries :-), du hast es 
erfolgreich benutzt, aber gar nicht verstanden wie es funktioniert.

Ich weiss immer noch nicht genau, was du eigentlich willst. Soll nur der 
PCF durch den Tiny ersetzt werden und der master sozusagen mit der 
PCF-Software das Display betreiben kann?

von Klaus (Gast)


Lesenswert?

Der Master kann nicht mit der Lib vom LCD betrieben werden, das ist 
klar. Die Lib für die LCD liegt auf dem Atti 841 und muss es neu 
schreiben. Da auch der EA W204 etwas eigen ist. Nach Datenblatt soll er 
fast identisch zum HD sein, aber eben nur fast.
Das Ziel ist eigentlich den Attiny 841 als Slave für viele verschiedene 
Anwendungen zu nutzen, z.B. als Encoder, Joystick, Display, Messung 
Helligkeit und Farbe usw.
Soll immer als Slave am Bus hängen und seine Intellegenz geteilt zum 
Master zu verwenden oder eben Teilaufgaben selbstständig auszuführen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, immer noch nicht alles verstanden...
Du könntest die Funktion des PCF85 doch im Tiny841 nachbauen, ist ja 
lächerlich wenig was der macht. Dann bleibt die Software im master wie 
sie ist.

von Klaus (Gast)


Lesenswert?

H.Joachim S. schrieb:
> Hm, immer noch nicht alles verstanden...
> Du könntest die Funktion des PCF85 doch im Tiny841 nachbauen, ist ja
> lächerlich wenig was der macht. Dann bleibt die Software im master wie
> sie ist.

Geht das überhaupt? Auf diese Idee bin ich gar nicht gekommen. Ist 
natürlich toll wenn der Rest so bleiben kann. Null Ahnung ob das so 
geht.
Wie mach ich das?

von H.Joachim S. (crazyhorse)


Lesenswert?

Das Ding hat doch nur ein einziges 8-bit-Register, welches man Schreiben 
oder Lesen kann.
Die Originalpins sind open-drain mit pullup. Also musst du beim 
Schreiben mit DDRx und PORTx arbeiten, Lesen von PINx.
Ganz einfach wirds, wenn du PortA benutzt, da du dann einen kompletten 
8bit-Port hast und damit die Bitschubserei nicht braucht. Kannst 
natürlich auch auf PortA und B verteilen.

von Klaus (Gast)


Lesenswert?

Werde es mir ansehen. Problem könnte der 841 sein. Ob er an der 
richtigen Stelle die Pins frei hat. Mal sehen.
Das andere ist wenn er autak läuft ohne Anbindung an den Bus. Komme 
nicht drum rum ein passendes Lib zu schreiben.
Danke für die Infos
LG Klaus

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.