Go Down

Topic: Treppenlicht mit I2C (Read 5 times) previous topic - next topic

xpix

May 02, 2012, 11:56 am Last Edit: Oct 08, 2012, 12:22 pm by xpix Reason: 1
Hallo Freunde,

nun das ist meine erster Beitrag hier, sollte ich mich komisch ausdrücken ... seht es mir nach. Ich bin ein Frischling in Sachen Arduino aber programmiere schon seit 20 Jahren in Perl und verdiene auch mein Geld damit.

UPDATE: Wurde inzwischen realisiert (http://xpixer.blogspot.de/2012/10/stairlight-10.html)


Kommen wir aber zu meinem ersten Projekt. Ich habe mir einige Anleitungen für "Treppenlichter" angesehen und diese sehen meist auch toll aus. Ich wollte aber einen anderen Weg gehen und mich näher mit I2C beschäftigen. Ein Treppenlicht bietet sich da förmlich an, hier also mein Plan:

Steuerung(Arduino nano) --> I2C Bus:






I2C_1ATtiny85 mit Drucksensor (FSR) und Lichtsensor
I2C_2ATtiny85 mit Nachbau BlinkM Modul
I2C_XATtiny85 mit Nachbau BlinkM Modul
I2C_14ATtiny85 mit Drucksensor (FSR)


Die Treppe besteht aus 13 Stufen, also benötige ich 13 I2C Devices die mit der Firmware von BlinkM arbeiten. Plus 2 Devices, die ermitteln ob die erste oder letzte Stufe betreten wurde sowie ein Lichtsensor. Hier wurden auch schon Leiterplatten mit Fritzing erstellt und in Auftrag gegeben. Die ATtinys selber werden ja immer billiger, ich habe mich für den ATtiny85 entschieden. bei 0.80 Euro braucht man da nicht mehr nachdenken  8)

Das Hauptprogramm wird noch geschrieben, ich habe aber einige Fragen zu I2C:


  • Welche Software oder Module kann ich bei den Drucksensoren als I2C Slave einsetzen? Es scheint ja einige Module zu geben (Wire, TinyWire, ...)

  • Kann man im Arduino mehr als ein Modul für die I2C Kommunikation einsetzen,also Wire und TinyWire gleichzeitig um verschiedene Devices anszusprechen ...

  • im Grunde muss ich die Drucksensoren alle 100ms abfragen, gibt es ein kleines Beispiel für die Software auf dem ATtiny mit dem Drucksensor. Im Grunde liest der nur die Werte auf Anfrage aus und schickt diese zum  I2C Master ...



Falls Interesse besteht, würde ich hier alles dokumentieren ;)

cu
Frank

Jago

Hi,
mh, wenn ich das soweit richtig verstanden hab, dann sieht das ganze wie folgt aus:
ATiny holt sich analoge/digitale Daten vom Sensor
ATiny setzt die Daten auf I2C um und sendet sie an den Arduino

Quote
•Welche Software oder Module kann ich bei den Drucksensoren als I2C Slave einsetzen? Es scheint ja einige Module zu geben (Wire, TinyWire, ...)

Für den Arduino würde ich Wire nehmen, hat bei mir bisher (fast) immer tadellos funktioniert (nur nicht in Timer ISR) und für die ATiny´s TinyWire.
Quote
•Kann man im Arduino mehr als ein Modul für die I2C Kommunikation einsetzen,also Wire und TinyWire gleichzeitig um verschiedene Devices anszusprechen ...

Beide Bibliotheken machen genau das selbe, nur das sie für unterschiedliche Zielsysteme (Microcontroller)sind. Daher einsatz beider irgendwie total sinnlos.
Quote
•im Grunde muss ich die Drucksensoren alle 100ms abfragen, gibt es ein kleines Beispiel für die Software auf dem ATtiny mit dem Drucksensor. Im Grunde liest der nur die Werte auf Anfrage aus und schickt diese zum  I2C Master ...

Wenn du mir verrätst wie der Sensor heißt, dann könnte ich dir auch ein kleines Beispiel geben....
Die frage ist dann natürlich auch auf was du optimieren möchtest, geringe Busauslastung oder schnelle Verfügbarkeit der Werte.


Noch eine Anmerkung zum I2C:
Der I2C ist kein Feldbus, dh. er ist eigentlich nur zum übertragen von Daten innerhalb eines Gerätes gedacht.
Definiert ist das ganze über die Leitungskapazität, welche 400pF nicht überschreiten darf/soll! http://www.i2c-bus.org/de/terminierung-und-kapazitaeten/
Bei deiner Anwendung also wahrscheinlich definitiv im Grenzbereich, was nicht heißt das es nicht funktioniert.
Zur gibt´s da auch noch Trick´s wie Pegelwandler, Busextender usw.

MfG Jago
Nothing is impossible ^^

xpix


mh, wenn ich das soweit richtig verstanden hab, dann sieht das ganze wie folgt aus:
ATiny holt sich analoge/digitale Daten vom Sensor
ATiny setzt die Daten auf I2C um und sendet sie an den Arduino


Genau so habe ich es mir vorgestellt ;)

Quote
Wenn du mir verrätst wie der Sensor heißt, dann könnte ich dir auch ein kleines Beispiel geben....
Die frage ist dann natürlich auch auf was du optimieren möchtest, geringe Busauslastung oder schnelle Verfügbarkeit der Werte.


Die Werte sollten schnell verfügbar sein, ich glaube die Busauslastung können wir erst einmal ausser Acht lassen. Der Sensor ist ein einfacher "Drucksensor Fsr-402" ... Hier ein Beispiel: http://fritzing.org/projects/analog-input-fsr/. Vielen Dank im voraus ;)

Quote
Der I2C ist kein Feldbus, dh. er ist eigentlich nur zum übertragen von Daten innerhalb eines Gerätes gedacht.
...
Zur gibt´s da auch noch Trick´s wie Pegelwandler, Busextender usw.


Darüber habe ich mir auch schon Gedanken gemacht, wie du aber in dem (ziemlich spannenden) Artikel sehen kannst, ist eine Menge möglich: http://sjalbers.nl/Atmel/BlinkM/BlinkM.htm

Hier wurde folgender IC verwendet: http://sjalbers.nl/Atmel/BlinkM/PCA9512AD.pdf

Jago

Möglich ist viel mit I2C, das steht außer frage, nur Normgerecht ist das alles nicht. Das längste was ich bisher gelesen hab war irgendwo zwischen 100m und 300m (allerdings mit CAT 5 Leitung, erhöhte Busspannung, niedrige Taktung usw.) Ich persönlich mag den I2C weil er so schön einfach ist und ich keine zusätzlichen Bauteile brauch, was natürlich nicht mehr der Fall ist wenn man sich außerhalb der Normung bewegt. Da du nur Microcontroller ansprechen willst, kann man zur Not ja auch noch auf einen anderen Bus umbauen ohne die Hardware großartig zu ändern. (Bin selbst grad am überlegen ob ich einen eigenen seriellen Bus entwickle. Soll in Richtung ASI-Bus gehen, nur Byteorintiert anstatt Bit. Ziel ist nur zwei Leitungen zu haben Gnd und Versorgungsspannung mit aufmodulierten Signal (Menchestercode))
Werd dir heut abend mal ein Beispiel schreiben, kann grad nicht deine Links öffnen (warum kannst du dir denken...  :smiley-roll-blue:)
MfG Jago

PS: Den PCA9512A kannte ich noch garnicht, hab immer den ADuM1251ARZ verwendet. Deiner ist aber wesentlich günstiger (was auch klar ist, beim ADuM steckt noch eine galvanische Trennung drin).
Nothing is impossible ^^

Jago

Ach ja, gefährliche sache mit dem Halbwissen...
Könntest du mir den Link zur der ATiny I2C Bibliothek geben? Die ich im Kopf hatte arbeitet mit 1 bzw 8MHz....
Das die I2C Schnittstelle beim ATiny85 keine "echte" ist hast du bemerkt? (Wusste ich bisher nicht. Könnte zu Problem führen, ich denk da an Clockstretching und ähnlichen gemeinheiten. Hab selbst mal versucht einen Software I2C zu erstellen und bin damit gescheitert)
MfG Jago
Nothing is impossible ^^

Go Up