Hallo zusammen,
zuerst einmal ein Dankeschön an die Köpfe hinter diesem Projekt.
Zum Einstieg will ich meinen VBus-Adapter an den Bus bringen. Den baue ich mir mit einem ATMega328 neu auf und das sollte "problemlos" TM klappen... ;-)
Für ein weiteres Projekt plane ich aber mit einem Arduino Due, da dieser vier UARTs und zweimal CAN hat. Leider ist mir dann gestern aufgefallen, daß der Due kein EEPROM hat :-(
Habt Ihr dafür schon eine Idee/Lösung in der Schublade?
Eine kurze Suche ergab viele Treffer zur Anbindung eines seriellen EEPROMs per I2C (z.B. 24LC256 Zugriiff per Wire-Library).
Einer der Treffer: http://www.hobbytronics.co.uk/arduino-external-eeprom
Ich bin kein Elektroniker und habe mir das folgende in dem Zusammenhang angelesen:
Der EEPROM arbeitet mit einer Pagesize von 64 Byte und einem Write Cycle von 5ms. Sprich nach jedem Write muß man 5ms warten bis der nächste Write erfolgen darf, auch wenn nur ein Byte geschrieben wurde.
Ich weiß nicht genau, wie sich das vom internen EEPROM unterscheidet und ob es für das Projekt relevant ist (wann wird ins EEPROM geschrieben? Wird in der Zeit auf den Bus gehört? Vor allem im Zusammenhang mit Knx.Task() max. alle 400µs).
Der 24LC256 kommt im bastlerfreundlichem DIP8-Gehäuse, braucht keine zusätzlichen Bauteile, läuft auch bei 3,3V und kostet gerade mal 88 Cent bei Reichelt.
Irgendwo bin ich auch noch auf FRAMs gestoßen.
PRO:
- kein Writedelay
- 10^14 Writes:
Bei der Anzahl an möglichen Writes und dem fehlendem Writedelay, könnte man alle Werte immer schreiben, ohne sich Gedanken über die Haltbarkeit oder das Timing zu machen.
CONTRA:
- SO-8 ist nicht so bastelfreundlich, aber Adapterplatinen gibt es bei ebay für wirklich kleines Geld.
- 4,5-5,5V
- etwas teuerer. z.B. 2KB für 1,99€: FM 24C64B
Der Due arbeitet mit 3,3V. Wenn man es richtig machen will, benötigt man einen bidirektionalen Level Shifter (billig bei ebay).
Oder: wenn ich das richtig gelesen habe, werden die Datenleitungen bei I2C nur gegen GND gezogen und man könnte die Datenleitungen deswegen direkt miteinander verbinden. Da ein High mindestens 0,7*VDD benötigt, könnte man den FRAM-Chip mittles Z-Diode auf 4,7V betreiben: 4,7V*0,7= 3,29V.
Was fehlt, ist die Unterstützung durch die Konnekting-Library für die Speicherung per Wire-Library. Die beste Lösung wäre IMHO eine Abstrahierung des Zugriffs, so daß man entweder das interne EEPROM oder jeden beliebigen Speicher ansprechen kann.
Ich habe mir Euren Code mal angeguckt und nach EEPROM gesucht, aber so auf Anhieb wüßte ich nicht, wie ich das ändern kann. Da merkt man dann doch schnell, daß ich nur Gelegenheitsprogrammierer bin und von den erweiterten Möglichkeiten keine Ahnung habe ;-]
Ich bestelle mir auf jeden Fall solche Chips, allein um das für mich zu testen. Wenn Ihr Interesse habt, würde ich Euch gerne welche zur Verfügung stellen (2-3 mal je ein EEPROM und FRAM). Vollkommen unverbindlich! Ich erwarte dafür nicht, daß Ihr es implementiert!
Wäre gut, wenn Ihr mir zumindest das Interesse an Samples, heute oder spätestens morgen nennen könnt, damit ich meine Bestellung rausschicken kann.
Danke und Gruß, Carsten
zuerst einmal ein Dankeschön an die Köpfe hinter diesem Projekt.
Zum Einstieg will ich meinen VBus-Adapter an den Bus bringen. Den baue ich mir mit einem ATMega328 neu auf und das sollte "problemlos" TM klappen... ;-)
Für ein weiteres Projekt plane ich aber mit einem Arduino Due, da dieser vier UARTs und zweimal CAN hat. Leider ist mir dann gestern aufgefallen, daß der Due kein EEPROM hat :-(
Habt Ihr dafür schon eine Idee/Lösung in der Schublade?
Eine kurze Suche ergab viele Treffer zur Anbindung eines seriellen EEPROMs per I2C (z.B. 24LC256 Zugriiff per Wire-Library).
Einer der Treffer: http://www.hobbytronics.co.uk/arduino-external-eeprom
Ich bin kein Elektroniker und habe mir das folgende in dem Zusammenhang angelesen:
Der EEPROM arbeitet mit einer Pagesize von 64 Byte und einem Write Cycle von 5ms. Sprich nach jedem Write muß man 5ms warten bis der nächste Write erfolgen darf, auch wenn nur ein Byte geschrieben wurde.
Ich weiß nicht genau, wie sich das vom internen EEPROM unterscheidet und ob es für das Projekt relevant ist (wann wird ins EEPROM geschrieben? Wird in der Zeit auf den Bus gehört? Vor allem im Zusammenhang mit Knx.Task() max. alle 400µs).
Der 24LC256 kommt im bastlerfreundlichem DIP8-Gehäuse, braucht keine zusätzlichen Bauteile, läuft auch bei 3,3V und kostet gerade mal 88 Cent bei Reichelt.
Irgendwo bin ich auch noch auf FRAMs gestoßen.
PRO:
- kein Writedelay
- 10^14 Writes:
Bei der Anzahl an möglichen Writes und dem fehlendem Writedelay, könnte man alle Werte immer schreiben, ohne sich Gedanken über die Haltbarkeit oder das Timing zu machen.
CONTRA:
- SO-8 ist nicht so bastelfreundlich, aber Adapterplatinen gibt es bei ebay für wirklich kleines Geld.
- 4,5-5,5V
- etwas teuerer. z.B. 2KB für 1,99€: FM 24C64B
Der Due arbeitet mit 3,3V. Wenn man es richtig machen will, benötigt man einen bidirektionalen Level Shifter (billig bei ebay).
Oder: wenn ich das richtig gelesen habe, werden die Datenleitungen bei I2C nur gegen GND gezogen und man könnte die Datenleitungen deswegen direkt miteinander verbinden. Da ein High mindestens 0,7*VDD benötigt, könnte man den FRAM-Chip mittles Z-Diode auf 4,7V betreiben: 4,7V*0,7= 3,29V.
Was fehlt, ist die Unterstützung durch die Konnekting-Library für die Speicherung per Wire-Library. Die beste Lösung wäre IMHO eine Abstrahierung des Zugriffs, so daß man entweder das interne EEPROM oder jeden beliebigen Speicher ansprechen kann.
Ich habe mir Euren Code mal angeguckt und nach EEPROM gesucht, aber so auf Anhieb wüßte ich nicht, wie ich das ändern kann. Da merkt man dann doch schnell, daß ich nur Gelegenheitsprogrammierer bin und von den erweiterten Möglichkeiten keine Ahnung habe ;-]
Ich bestelle mir auf jeden Fall solche Chips, allein um das für mich zu testen. Wenn Ihr Interesse habt, würde ich Euch gerne welche zur Verfügung stellen (2-3 mal je ein EEPROM und FRAM). Vollkommen unverbindlich! Ich erwarte dafür nicht, daß Ihr es implementiert!
Wäre gut, wenn Ihr mir zumindest das Interesse an Samples, heute oder spätestens morgen nennen könnt, damit ich meine Bestellung rausschicken kann.
Danke und Gruß, Carsten
Kommentar