Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage: wie Konnekting auf Arduinos ohne EEPROM, zB Due?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Frage: wie Konnekting auf Arduinos ohne EEPROM, zB Due?

    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
    Gruß, Carsten

    #2
    Hi,

    genau das problem steht noch auf der ToDo Liste.

    Masifi ist dran den Arduino Zero mit Konnekting zu benutzen, scheitert aber noch am EEPROM Support.

    Für Beta4 ist ein Funktionspointer angedacht, mit dem man der Lib von Außen Funktionen zum lesen und schreiben geben kann. Dann ist man völlig frei wie die Daten persistiert und gelesen werden. Du könntest dann sogar auf eine SD Karte speichern ;-)

    Wir könnten das natürlich auch in die KONNEKTING Device Library gleich fix einbauen. Aber da gibt es zwei Punkte die stören:

    1) Die Lib ist schon verdammt groß und gerade auf kleinen µC geht der Speicher langsam aber sicher aus wenn die Lib weiter so wächst
    2) Wer weiß was die Zukunft noch bringt.

    Durch den Ansatz mit dem Funktionspointer brauche zumindest ich keine Samples. Aber vielleicht hat Masifi Interesse?!

    Kommentar


      #3
      Hey Carsten,

      Muss es Due sein? MEGA2560 gibt auch in 3.3v Version. Hat auch 4x UARTS und EEPROM. CAN-BUS muss man aber über extrerne Chips einbinden.
      Es gibt ganz neuer 328pb, hat 2x UARTs, evtl. wäre auch interessant?

      Grüße
      Eugen

      Kommentar


        #4
        Zitat von tuxedo Beitrag anzeigen
        Für Beta4 ist ein Funktionspointer angedacht, mit dem man der Lib von Außen Funktionen zum lesen und schreiben geben kann. Dann ist man völlig frei wie die Daten persistiert und gelesen werden. Du könntest dann sogar auf eine SD Karte speichern ;-)
        Was auch immer ein Funktionpointer ist... ;-) Ich laß mich mal überraschen.

        Zitat von tuxedo Beitrag anzeigen
        Wir könnten das natürlich auch in die KONNEKTING Device Library gleich fix einbauen. Aber da gibt es zwei Punkte die stören:

        1) Die Lib ist schon verdammt groß und gerade auf kleinen µC geht der Speicher langsam aber sicher aus wenn die Lib weiter so wächst
        2) Wer weiß was die Zukunft noch bringt.
        Der Compiler verwirft doch alles, was nicht genutzt wird, richtig? Wenn jetzt statt EEPROM die WIRE-Lib genommen wird, dürfte sich der Bedarf doch nicht so vergrößern.

        Zumindest auf dem Due wäre die Größe kein Problem (512KB Flash und 96KB SRAM). Und der Zero ist mit 256/32KB auch üppig ausgestattet.
        Kann man die Lib nicht so anpassen, daß es eine Option für diese beiden Boards ist und bei den kleineren ignoriert wird?

        Zitat von Eugenius Beitrag anzeigen
        Muss es Due sein? MEGA2560 gibt auch in 3.3v Version. Hat auch 4x UARTS und EEPROM. CAN-BUS muss man aber über extrerne Chips einbinden.
        Es gibt ganz neuer 328pb, hat 2x UARTs, evtl. wäre auch interessant?
        Vom Due habe ich schon zwei :-)
        Und für den gibt es schon eine fertige CAN-Library: Building a CAN API for Arduino DUE

        Außerdem ist der Due um einiges schneller und hat mehr SRAM. Mein anderes Projekt benutzt jetzt schon knapp 2,5KB SRAM wenn ich es für einen MEGA2560 kompiliere[*] und ich bin noch nicht ganz fertig. Und das ist nur der erste Teil. Ich würde gerne noch mehr reinpacken. Inklusive der KONNEKTING-Lib könnten dann auch die 8KB SRAM des Mega2560 knapp werden.
        Achja, Ethernet soll auch noch drauf.[*] ungetestet, da kein Mega2560 vorhanden. Keine Ahnung, ob der überhaupt für mein Projekt schnell genug ist.
        Außer dem EEPROM gibt es keinen Vorteil für den Mega2560 (es sei denn man benötigt wirklich 16 statt 12 Analog-In, oder 15 mal PWM statt 12). Der Preis spielt auch keine große Rolle.


        Gruß, Carsten
        Gruß, Carsten

        Kommentar


          #5
          Due verbraucht aber viel mehr Energie, als ein Busankopler liefern kann, also externe Spannungsversorgung und Galvanische Trennung nicht vergessen
          Zuletzt geändert von Eugenius; 29.05.2016, 22:26.

          Kommentar


            #6
            Das war mir schon klar. Deswegen sind die ADUMs schon im Warenkorb :-)
            Auf die Schnelle habe ich nichts zum Stromverbrauch des Due gefunden habe... Mußte ich halt selber messen: bei Versorgung mit 5V über Vin sind es knapp 148mA (mit arbeitendem Sketch). Deutlich mehr als die BCU liefern kann. Wenn man sich das überlegt sind die ~0.75W schon ziemlich viel für einen µC...
            Gruß, Carsten

            Kommentar


              #7
              Eben deswegen und wegen dem Überangebot an CPU Leistung setzen nicht nur wir, sondern auch viele Hersteller auf kleinere µCs.

              "Normalerweise" kommt man mit 2-2,5kbyte RAM recht gut aus, wenn man damit haushaltet.

              Was machst du denn da verschwenderisches wenn sogar 8kb im Mega2560 knapp werden könnten?!

              [update]

              Was auch immer ein Funktionpointer ist... ;-) Ich laß mich mal überraschen.
              http://www.willemer.de/informatik/cpp/fktzgr.htm
              Zuletzt geändert von tuxedo; 30.05.2016, 10:26.

              Kommentar


                #8
                Ich habe einen Due zwischen meiner KWL ComfoAir CA350 und der CCEase (abgesetztes Display/Bedieneinheit). Die beiden reden per RS232 miteinander.
                CA350 RS232 -> MAX3232 -> Serial1-Due-Serial2 -> MAX3232 -> CCEase RS232
                Der Due "bridged" die Verbindung. Was er auf der einen Seite hört, wird auf die andere übermittelt. Aber nicht stur als Bytes, sondern als valide/aufbereitete Kommandopakete. Siehe Protokollbeschreibung
                Die interessanten Pakete speichere ich in Buffern: Länge = Anzahl Datenbytes, um sie bei Bedarf auszuwerten. Ein Ausschnitt:
                Code:
                #ifdef ca_UseCMD_68    // Antwort auf 0x67: Bootloader Version
                const byte ca_Datalength_68 = 13;
                byte ca_Databuffer_68[1 + ca_Datalength_68];
                #endif
                #ifdef ca_UseCMD_6A    // Antwort auf 0x69: Firmware Version
                const byte ca_Datalength_6A = 13;
                byte ca_Databuffer_6A[1 + ca_Datalength_6A];    // Antwort auf 0x69: Firmware Version
                #endif
                #ifdef ca_UseCMD_A2    // Antwort auf 0xA1: Konnektorplatine Version
                const byte ca_Datalength_A2 = 14;
                byte ca_Databuffer_A2[1 + ca_Datalength_A2];    // Antwort auf 0xA1: Konnektorplatine Version
                #endif
                Bis jetzt erfolgte die Auswertung nur dann, wenn per Serial ein bestimmtes Kommando geschickt wurde (Klartextkommunikation zur Auswertung per WG-Plugin).
                Hier hatte ich schon mal was dazu geschrieben: ComfoAir Steuerung über RS232 #468

                Bei einer direkten KNX-Anbindung muß ich die Interpretation der Daten natürlich komplett umschreiben. Im Moment werden Texte generiert, welche im WG ausgewertet werden sollten. In Zukunft müssen das Telegramme werden, welche in definierten Intervallen geschickt werden (oder bei Änderung um x% oder xK).

                Nur für dieses Projekt reichen die 8KB des Mega wahrscheinlich. Ich habe den Code in ein neues Projekt geladen und für den Mega2560 kompilieren lassen:
                Code:
                Compiling 'ComfoAir_VS_Mega2560' for 'Arduino/Genuino Mega w/ ATmega2560 (Mega 2560)'
                Program size: 23.992 bytes (used 9% of a 253.952 byte maximum) (3,35 secs)
                Minimum Memory Usage: 2449 bytes (30% of a 8192 byte maximum)
                Ich habe erst vor ein paar Tagen gelesen, daß Variablen immer im SRAM liegen, selbst dann, wenn sie als "const" deklariert wurden. Auch F() habe ich da erst kennengelernt. Ich habe ziemlich viel Text im Code. Durch F() kann man nochmal einiges einsparen.

                Mehr Sorgen mache ich mir wegen des Timings. Ist ein Mega2560 schnell genug? Wie gesagt: er hängt transparent dazwischen und die Anlage ist weiterhin voll per CCEase bedienbar. Inklusive der Wartungsmenüs. Von extern eingehende Kommandos (z.B. Turbo aktivieren, Komforttemperatur setzen), werden an die Geräte geleitet und stören nicht die eigentliche Kommunikation der Anlage.

                Läßt sich ein Mega2560 aus der BCU speisen? Laut Datenblatt nimmt der ATmega2560 bei 16MHz@5V 21mA auf (S.374 Figure 32-2). Was verbraucht der Arduino Mega (natürlich ohne zusätzliche LEDs oder dergleichen)? Im Web habe ich auf die Schnelle nichts gefunden.
                Die BCU Liefert 5V/50mA wenn die 20V unbelastet sind.
                Ich werde mir wohl mal einen bestellen müssen. Ist wahrscheinlich sowieso sinnvoller, als viele Funktionen auf einen Due zu bündeln...


                Zum Funktionszeiger: danke. Ich warte ab, wie das in der Beta 4 aussieht (ETA? ;-) ). Vielleicht ist das dann so einfach, daß ich mir meine eigene Routine zum Speichern per I2C schreiben kann :-)


                Gruß, Carsten

                Gruß, Carsten

                Kommentar


                  #9
                  Strings sind in der Tat wahre RAM-Killer. Das F() Macro hilft da schon ungemein. Denke du wirst, wenn du ein wenig sparsam programmierst, recht schnell in einen Bereich kommen wo ein kleiner Arduino reicht. D.h. ein 32u4 oder 328P.

                  Mit dem Timing musst du dir denke ich keine Sorgen machen. Die kleinen Käfer sind da schnell genug. RS232 ist schließlich kein Gigabit-Netzwerk, sondern Technik aus den 60er Jahren. Könnte sehr gut sein dass du mit einem Leonardo/Micro/ProMicro und einem SoftSerial den zweiten UART problemlos erschlagen kannst.

                  Läßt sich ein Mega2560 aus der BCU speisen?
                  Ich hab jetzt keine Daten gefunden, aber so out of the box sicherlich nicht.

                  Ist wahrscheinlich sowieso sinnvoller, als viele Funktionen auf einen Due zu bündeln...
                  Mit Sicherheit. Das Zauberwort hat dezentral...

                  Beta4 wird noch ein wenig dauern. Hab grad den 4TE Reg Controller im Aufbau auf dem Tisch liegen. Wenn der einigermaßen läuft werde ich mit beta4 weiter machen.
                  Rechne mal nicht vor 4 Wochen mit dem Release...

                  Kommentar


                    #10
                    Ich werde in den nächsten Tagen nachmessen wie viel ein MEGA2560 verbraucht. Wenn ich mich richtig erinnere, hat er schon am Siemens BCU direkt funktioniert

                    Kommentar


                      #11
                      Zitat von tuxedo Beitrag anzeigen
                      Könnte sehr gut sein dass du mit einem Leonardo/Micro/ProMicro und einem SoftSerial den zweiten UART problemlos erschlagen kannst.
                      Ich brauche aber insgesamt drei UARTs: BCU, CA350 & CCEase.
                      SoftwareSerial dürfte nicht passen: "If using multiple software serial ports, only one can receive data at a time."
                      Von der AltSoftSerial-Seite:
                      "SoftwareSerial can not simultaenously transmit and receive, so it should be used with a device that never sends in both directions at once."

                      Die beiden Geräte plappern. Da gehen die ganze Zeit Bytes hin und her (auch verschachtelt: eins links, eins rechts, ...) und wenn die CA nicht schnell genug antwortet, steht auf der CCEase nur noch "NC".

                      SoftwareSerial nutze ich bei meinem VBus-Adapter. Da funktioniert das super, weil nur gelauscht wird.

                      Dann gibt es noch AltSoftSerial, aber auch das hat seine Macken: "Consumes a 16 bit timer (and will not work with any libraries which need that timer) and disables some PWM pins. Can be sensitive to interrupt usage by other libraries."

                      Der von Eugenius vorgeschlagene ATmega328PB mit zwei UARTs könnte eine Alternative sein (wenn es den mal zu kaufen gibt. Am besten gleich auf DIL-Adpater).


                      Zitat von tuxedo Beitrag anzeigen
                      Beta4 wird noch ein wenig dauern. Hab grad den 4TE Reg Controller im Aufbau auf dem Tisch liegen. Wenn der einigermaßen läuft werde ich mit beta4 weiter machen.
                      Rechne mal nicht vor 4 Wochen mit dem Release...
                      Kein Problem. Ich werde erstmal meinen VBus-Adpater bauen, da der deutlich einfacher ist. Danach kommt dann die CA dran. Das Umbauen des Codes auf KNX wird eine ganze Weile dauern. Zuerst setze ich auf den Due, da ich den habe und es auf jeden Fall funktioniert.


                      Gruß, Carsten
                      Gruß, Carsten

                      Kommentar


                        #12
                        Zitat von Eugenius Beitrag anzeigen
                        Ich werde in den nächsten Tagen nachmessen wie viel ein MEGA2560 verbraucht. Wenn ich mich richtig erinnere, hat er schon am Siemens BCU direkt funktioniert
                        Danke. Es würde die Sache vereinfachen, wenn ich keine zusätzliche Stromquelle benötigen würde.
                        Gruß, Carsten

                        Kommentar


                          #13
                          Ich habe gerade nachgemessen:
                          MEGA2560@5.0V = 60.4mA (Siemens BCU versucht noch mitzumachen, aber sehr instabil)
                          32U4@3.3V = 11.5mA
                          328P@3.3V = 5.2mA

                          Kommentar


                            #14
                            Zitat von Northman Beitrag anzeigen
                            Der von Eugenius vorgeschlagene ATmega328PB mit zwei UARTs könnte eine Alternative sein (wenn es den mal zu kaufen gibt. Am besten gleich auf DIL-Adpater).
                            http://www.watterott.com/de/Wattuino...ni-PB-5V-16MHz

                            Kommentar


                              #15
                              Danke fürs Messen. Das sind schon deutliche Unterschiede. Der Mega2560 fällt damit raus, wenn der Strom aus der BCU kommen soll.

                              Watterott hatte ich nicht mehr auf dem Schirm. 10€ sind ja geschenkt, wenn man nicht mehr selber löten muß (SMD).
                              Gruß, Carsten

                              Kommentar

                              Lädt...
                              X