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
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.
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
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 ....
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?
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
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...
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?
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.
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.
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
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?
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.
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.
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?
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.
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