ATtiny zur Steuerung eines I2C-LCDs nutzen?

Hallo,

mein "Heizungscontroller"-Projekt neigt sich dem Ende zu und ich habe dabei und hier aus dem Forum viel gelernt.
Dabei sind auch neue Ideen entstanden. Eine davon resultiert aus dem Wunsch, den (I2C-) LCD einige Meter entfernt anzuschliessen.
Das Problem bin ich dabei zu umgehen mit Hilfe eines I2C-Extenders (P82B715PN und I2C Extender Testplatine mit P82B715 / I2C Extender testboard with P82B715).

Wäre es ienem Mega aber möglich, einen Attiny seriell mit einem String oder meinetwegen Char-Array zu versorgen und dieser sendet das ganze per I2C an das daneben liegende LCD?
Serielle Kommunikation hat anscheinend das Problem mit der Leitungslänge nicht.

Habt Ihr evtl. einen Link zum Weiterlesen zur Verfügung und was ist von der Idee grds. zu halten?

Grüße

Soviel ich weiß haben (nicht alle) ATtiny den I2C Bus Hardwaremäßig implementiert.
Grüße Uwe
Nachtrag: und gleichzeitig eine Serielle Schnittstelle

Die beiden ATtiny84 (14 pins) und 85 (8 pins), dank USI (Universal Serial Interface) mit I²C kompatibel. Mit den Tinys und I²C hatte ich auch noch nie Probleme, für Arduino gibt es ja passende Bibliotheken à la TinyWire etc.. Eher die Serielle Schnittstelle mit SoftwareSerial funktionierte nicht 100%, senden mit geringen Baudraten war ok, beim Empfangen gab's mehr Probleme, teilweise waren längere Datenströme nach einigen Bytes abgerissen oder es kam nur noch wirres, unbrauchbares Zeug an. Würde ich auf jeden Fall erst mal testen.

Hallo,

eine Übersicht habe ich bereits ausgegraben, vgl. arduino:attiny [Boxtec Playground]
Meine Vorstellungen über die beschriebene und gewünschte Art der seriellen Kommunikation (4-5m) sind mehr als unpräzise. Daher hoffe ich, dass mich jemand auf eine gute Spur lenkt.

Zum Beispiel müsste der ATtiny I2C beherrschen und darüber eine PCF8574 und einen I2C-LCD ansteuern.
Wenn ich z.B.
lcd.setCursor(2,3);
lcd.print(F("*"));
lcd.printByte(5);
im Attiny-Sketch habe und auch Keypad.h nutze , müsste der ATtiny sowohl die LCD-Bibliothek als auch die I2C-Bibliothek und Keypad.h nutzen können. Die Kommunikation müsste in beide Richtungen laufen.

Geht das (so einfach)?

Grüße

I²C ist ein Bussystem mit einem Master und beliebig vielen Slaves und ist zwangsläufig bidirektionoal (Wenn auch nur ein Acknowledge-bit zurückgesendet wird). Ein I²C Keypad und ein LCD sollte absulut kein Problem darstellen - höchstens der Speicherbedarf - ich rate dir daher zu einem mit 8 kB.

Das Problem sehe ich eher in der Kommunikation mit dem Mega:
Die 84/85er haben leider keine serielle Schnittstelle, daher müsstest du die per Software implementieren. Die 2313/4313er haben UART.

ATtiny Serial Debugging:
Die tiny Implementation bietet ein spezielles Debugging mit einer seriellen Einwegschnittstelle - der ATtiny kann nur Daten senden, aber nicht empfangen.

Das wäre das Problem bei denen ohne UART, d. h. du musst dir eine andere Bibliothek besorgen...
Alternativ wäre auch so etwas interessant: http://www.nxp.com/products/interface_and_connectivity/bridges/uart_to_i2c_master_gpio_bridges/

Hallo,
vielleicht hilft Dir ja dieser Artikel: elektronik-bastelkeller.de

Gruß,
Ralf

Schachmann:
vielleicht hilft Dir ja dieser Artikel: elektronik-bastelkeller.de

Hallo Ralf,

mein LCD hat bereits den I2C-Controller, aber danke füe den Hinweis.
Ich möchte dieses LCD bloß über einen ATtiny ansteuern. Ich erhoffe durch seine Zwischenschaltung zum Mega, dass ich eine stabile 5m Leitung bekomme (da seriell und nicht bei langen Strecken störanfällig wie I2C).

Grüße

Da würde ich ein anderes Vorgehen wählen. An das Display ein Scheisberegister zb 74HC595 hängen und dieses relativ langsam ansteuern.

Grüße Uwe

Hallo Uwe,

das macht natürlich Sinn. Nur hat das Display den I2C-Controller mit dem Display fest verlötet, und wichtiger, an dem I2C-Bus hängt neben dem LCD auch ein Keypad, das wiederum an einen PCF8574 die Signale per I2C sendet. (Würde also zwei dieser Bausteine brauchen.) Ergänzend kommt hinzu, dass die serielle Kommunikation sowieso nur über 2 Leitungen erfolgen müsste. Das ist aus der Planungsphase übriggeblieben, wo ein I2C-Bus Mega (Keller) die LCD/Keypad (Wohnzimmer) versorgen sollte. Zurecht hast auch Du damals auf die zu zu große Distanz hingewiesen.

Das Einfachste ist tatsächlich ein I2C-Extender, wie geschrieben (P82B715PN) und von jemanden hier vorgeschlagen. Dieser ist auch bestellt.

Hintergrund meiner Frage ist, dass ich noch ein zweites, gekauftes System habe. Dieses ermittelt (im Keller, also genauso weit) eine Temperatur und schickt sie an ein Display im Wohnzimmer. Vorgestern habe ich dieses ganz neugierig aufgeschraubt und fand einen Attiny26-16PU vor. Dieser wird mit einem 4adrigen Kabel versorgt (2xGND, VCC und eine! Datenleitung). Den Sender im Keller habe ich noch nicht auseinandergebaut aber dort wird es wahrscheinlich ein Attiny Gegenstück geben). ...16pu, weil die mehrgliederige Temperaturanzeige (im Display des Wohnzimmers) bedient wird.

Ansonsten macht mich diese eine einzige Datenleitung neugierig - und da dachte ich an den Einsatz eines Attiny für meine Zwecke: 5 m Distanz + Übertragung von wenig Daten zum Display. Und ich habe sogar noch ZWEI Leitungen übrig :wink:

Grüße

Ein Sender braucht nur eine Datenleitung, er braucht ja keine Daten zugeschickt zu bekommen.

Das Problem bei dem I2C Bus ist, daß die Ausgänge der Bausteinen die Leitungen auf Masse ziehen aber ein Widerstand die Datenleitung auf High zieht. Dazu muß er den parisitären Kondensator, der sich aus dem Kabel (paralelle Drähte) und den Kapazitäten der Bauseine ergibt, laden und zwar in genügend kurzer Zeit, daß die Datenleitung wieder H ist wenn das nächste Bit übertragen wird. Im Bild auf http://www.linear.com/product/LTC4311 ist das Signal am Ende des Impulses noch nicht über 3V (Dreiechiges signal) und somit wird es noch als LOW erkannt, obwohl es eigentlich H sein sollte. Der Baustein LTC4311 hilt dabei weil er aktiv auf H zieht sobald er einen gewisse Minimalspannung sieht.
oder Gammon Forum : Electronics : Microprocessors : I2C - Two-Wire Peripheral Interface - for Arduino mit den Auswirkungen verschiedener Pullupwiderstände auf die Signalform.

Eine Signalleitung zwischen einem Sender und einem Empfänger kann vom Sender auf H und auf L gezogen werden und somit längere Distanzen mit höheren Kapazitäten überbrücken.

Grüße Uwe

"Cooles" Teil, also sowas wie ein aktiver Pullup, wenn ich es richtig verstehe.
Hat aber auch seinen Preis: dafür kriegt man zwei P82B715PN :slight_smile:
Also die Kopplung von zwei Attinys (in 5 m Abstand) hälst Du für keine tolle Idee, weil es mehr auf die (E-) Technik der Leitung (5m und höhere Kapazitäten) ankommt und nicht auf das Protokoll?

Grüße

Ich finde es keine tolle Idee für die Kopplung den I2C Bus zu nehmen.

Grüße Uwe