Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    Hallo WagoKlemme,

    eigentlich betrifft diese Änderungen nur die Beispielsketche.





    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 15.08.2017, 03:51.

    Kommentar


      Hallo Leute,

      die KNX-Library Version 06.06.2017 steht ab sofort zur Verfügung.

      https://bitbucket.org/thorstengehrig...knx-user-forum





      Mit freundlichen Grüßen

      Mag Gyver

      Kommentar


        Kleiner Tipp an Rande, der mir gerade so eingefallen ist als ich die letzten paar Seite dieses Threads "aufgeholt" habe:


        Ein Delay auf dem µC ist absolut keine gute Idee. Zumindest nicht, wenn es darum geht alles vom Bus mitzubekommen...

        100ms schlafen heißt: 100ms völlige Untätigkeit des µC (https://bitbucket.org/thorstengehrig...KnxTpUart.h-34). In 100ms können gut und gerne rund 250 Bytes auflaufen die während des µC-Schlafes einfach ignoriert werden (gut, 64 Byte landen im RX Buffer, aber der Rest ist dennoch verloren).

        KONNEKTING ist hier auch noch nicht perfekt (ein delay dieser Art haben wir jedoch nicht), aber wir arbeiten dran ;-)

        Kommentar


          Hallo zusammen,

          das Thema ist ja richtig spannend.

          Ich habe nun nicht alle 68 Seiten des Threads gelesen. Frage also: Gibt es irgendwo zusammengefasst den aktuellen, technischen Stand ? Z.B. Welche Bauteile bzgl. Busankopplung zur Zeit die Hardware der Wahl sind ? Es würde mir auch reichen, wenn ich eine geeignete Startseite für den Thread hätte, über tausend Beiträge schaffe ich einfach nicht aufzuholen.

          Freue mich über "Starthilfe". :-)
          Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

          Kommentar


            Busankoppler ist weiterhin der von der Ersten startseite der von Siemens.
            http://www.eibmarkt.com/cgi-bin/eibm...D=DE_NS6512716

            ich verwende die Lib von Thorsten
            https://bitbucket.org/thorstengehrig...knx-user-forum

            bisher damit keine Probleme.

            Als hardware verwende ich eine Arduino Micro Pro (Leonardo (http://www.ebay.de/itm/Pro-Micro-5V-...MAAOSwNnRYg--z) zum testen und ein
            Mini wenn ich ohne Debug irgendwo installiere
            und zwar den der hat das selbe Pinlayout ich bau das ganze gerne auswechselbar auf

            Projekte die ich bisher Begonnen habe sind RFID-KNX Reader und Ultraschallentfernungsmesser KNX. nur noch keine zeit gehabt es mal irgendwo zu Veröffentlichen.

            Ich hab auch angefangen mich etwas in Konnekting einzuarbeiten aber bin nicht so ganz warm geworden wobei es mir besser gefallen würde mit dem Configuieren vom bus aus

            Kommentar


              Falls noch Interesse besteht, ich hätte noch ein paar Einsteiger-Platinen rumliegen.

              Damit könnt ihr mit einer Siemens BCU und einem Arduino ProMicro/ProMini ganz einfach etwas mit dem KNX-Bus Basteln.
              Die Platine (Blau im Bild) ist nur ein Bindeglied zwischen BCU und Arduino. Über Stiftleisten kann man Sensoren / Displays ... anschließen.

              20151202_213828.jpg
              www.smart-mf.de | KNX-Klingel | GardenControl | OpenKNX-Wiki

              Kommentar


                Allgemein, (ich weiß zwar nicht ob Thorstens Lib schon mit SAMD21 = Arduino Zero gestestet wurde) funktioniert KONNEKTING Hardware auch mit der Thorstens lib.
                Z.B.: Universal UP Schnittstelle oder die von Masifi angesprochene Dev-Boards

                Kommentar


                  Zitat von Mag Gyver Beitrag anzeigen
                  Nun, wie sieht denn deine Art Busmonitor für Daten im RAW-Format nun aus, bist du da schon weitergekommen?
                  Die Anregung geistert mir auch schon eine Weile im Kopf herum. Habe diesbezüglich schon mal einen Ansatz unternommen, ist jedoch sehr Alpha. Basiert auf der Library von ThortenGehrig.

                  Habe die Library von ThorstenGehrig und die optimierte Version angepasst.

                  Danke auch dir Eugenius.

                  Hi, du wirst nicht glauben, aber ich habe doch was geschafft, ohne überhaupt eine Lib zu nutzen:
                  Code:
                  #ifdef __AVR_ATmega32U4__       //Universal Flush Interface, ProMicro, Leonardo
                  #define DEBUGSERIAL Serial      //USB
                  #define KNX_SERIAL Serial1      //D0,D1
                  //#define LED_PIN 13              //UFI STD, Aruino Leonardo
                  //#define LED_PIN 8               //UFI PWM
                  #define LED_PIN LED_BUILTIN_RX  //ProMicro (Attention: LOW = ON, HIGH = OFF)
                  #elif __SAMD21G18A__            //Multi Interface, Arduino Zero
                  #define DEBUGSERIAL SerialUSB   //USB
                  //#define KNX_SERIAL Serial       //Multi Interface 
                  #define KNX_SERIAL Serial1      //D0,D1
                  //#define LED_PIN A5              //Multi Interface
                  #define LED_PIN LED_BUILTIN     //Zero
                  #endif
                  
                  long lastMicros = 0;
                  bool dataReceived = false;
                  
                  void setup() {
                      KNX_SERIAL.begin(19200,SERIAL_8E1);
                      DEBUGSERIAL.begin(115200);
                      pinMode(LED_PIN,OUTPUT);
                  }
                  
                  void loop() {
                      if(KNX_SERIAL.available()>0){
                          lastMicros = (long)micros();
                          byte temp = KNX_SERIAL.read();
                          if(temp<16) DEBUGSERIAL.print("0"); //print 0 for 2 digit HEX
                          DEBUGSERIAL.print(temp,HEX);
                          DEBUGSERIAL.print(" ");
                          if(!dataReceived){
                              dataReceived = true;
                              digitalWrite(LED_PIN,HIGH); //LED is ON is data is received
                          }
                      }
                      if((long)micros() - lastMicros >= 2000 && dataReceived){
                          //2000+ µs => end of telegram => new line
                          DEBUGSERIAL.println("");
                          dataReceived = false;
                          digitalWrite(LED_PIN,LOW); //turn LED off
                      }
                  }
                  Die Ausgabe sieht dann so aus:
                  Code:
                  BC 11 CA 09 64 E1 00 81 95 
                  BC 11 03 0A 64 E1 00 81 5F 
                  BC 11 CA 09 64 E1 00 80 94 
                  BC 11 03 0A 64 E1 00 80 5E

                  Kommentar


                    Noch eine Variante, mit verständlichen Daten
                    Code:
                    #ifdef __AVR_ATmega32U4__ //Universal Flush Interface, ProMicro, Leonardo
                     #define DEBUGSERIAL Serial      //USB #define KNX_SERIAL Serial1      //D0,D1 //#define LED_PIN 13              //UFI STD, Aruino Leonardo //#define LED_PIN 8               //UFI PWM #define LED_PIN LED_BUILTIN_RX  //ProMicro (Attention: LOW = ON, HIGH = OFF) #elif __SAMD21G18A__            //Multi Interface, Arduino Zero #define DEBUGSERIAL SerialUSB   //USB //#define KNX_SERIAL Serial       //Multi Interface  #define KNX_SERIAL Serial1      //D0,D1 //#define LED_PIN A5              //Multi Interface #define LED_PIN LED_BUILTIN     //Zero #endif
                    
                    #define KNX_TELEGRAM_MAX_SIZE 23
                    
                    
                    long lastMicros = 0;
                    bool dataReceived = false;
                    byte telegram[KNX_TELEGRAM_MAX_SIZE];
                    byte counter = 0;
                    
                    void setup() {
                        KNX_SERIAL.begin(19200,SERIAL_8E1);
                        DEBUGSERIAL.begin(115200);
                        pinMode(LED_PIN,OUTPUT);
                        clearBuffer();
                    }
                    
                    void loop() {
                        if(KNX_SERIAL.available()>0){
                            lastMicros = (long)micros();
                            byte temp = KNX_SERIAL.read();
                    //        if(temp<16) DEBUGSERIAL.print("0"); //print 0 for 2 digit HEX
                    //        DEBUGSERIAL.print(temp,HEX);
                    //        DEBUGSERIAL.print(" ");
                            telegram[counter] = temp;
                            counter++;
                            if(!dataReceived){
                                dataReceived = true;
                                digitalWrite(LED_PIN,HIGH); //LED is ON is data is received
                            }
                        }
                        if((long)micros() - lastMicros >= 2000 && dataReceived){
                            //2000+ µs => end of telegram => new line
                    //        DEBUGSERIAL.println("");
                            dataReceived = false;
                            //print usable array data
                            for (byte i = 0; i < counter;i++){
                                if(telegram[i]<16) DEBUGSERIAL.print("0"); //print 0 for 2 digit HEX
                                DEBUGSERIAL.print(telegram[i],HEX);
                                DEBUGSERIAL.print(" ");
                            }
                            DEBUGSERIAL.println("");
                            printData();
                            counter = 0;
                            clearBuffer();
                            digitalWrite(LED_PIN,LOW); //turn LED off
                    
                        }
                    }
                    
                    void clearBuffer(){
                        memset(telegram,0,sizeof(telegram));
                    }
                    
                    void printData(){
                      byte temp = telegram[1];
                      byte pa1 = telegram[1] >> 4;
                      byte pa2 = telegram[1] & B00001111;
                      byte ga1 = telegram[3] >> 3;
                      byte ga2 = telegram[3] & B00000111;
                      byte datalength = telegram[5] & B00001111;
                      byte firstDateByte = telegram[7] & B00111111; //use only last 6 bits
                      DEBUGSERIAL.print("PA: ");
                      DEBUGSERIAL.print(pa1,DEC);
                      DEBUGSERIAL.print(".");
                      DEBUGSERIAL.print(pa2,DEC);
                      DEBUGSERIAL.print(".");
                      DEBUGSERIAL.print(telegram[2],DEC);
                      DEBUGSERIAL.print(" GA: ");
                      DEBUGSERIAL.print(ga1,DEC);
                      DEBUGSERIAL.print("/");
                      DEBUGSERIAL.print(ga2,DEC);
                      DEBUGSERIAL.print("/");
                      DEBUGSERIAL.print(telegram[4],DEC);
                      DEBUGSERIAL.print(" Data length (bytes): ");
                      if(datalength == 1){
                          DEBUGSERIAL.print(datalength,DEC); //if 1 then usable data max 6 bits, DPT 1.xxx, DPT 2.xxx, DPT 3.xxx, DPT 23.xxx ...
                      }else{
                          DEBUGSERIAL.print(datalength-1,DEC); //ignore first byte because data doesn't fit in 6 bits
                      }
                      DEBUGSERIAL.print(" Data (HEX): ");
                      if(datalength == 1){
                          if(firstDateByte < 16) DEBUGSERIAL.print("0"); //print 0 for 2 digit HEX
                          DEBUGSERIAL.print(firstDateByte,HEX);
                          DEBUGSERIAL.print(" ");
                      }
                      for(byte i = 1;i < datalength;i++){
                          if(telegram[7+i]<16) DEBUGSERIAL.print("0"); //print 0 for 2 digit HEX
                          DEBUGSERIAL.print(telegram[7+i],HEX);
                          DEBUGSERIAL.print(" ");
                      }
                    
                      DEBUGSERIAL.println();
                    }
                    Ausgabe:
                    Code:
                    BC 11 DD 3F 02 E3 00 81 14 FD 39
                    PA: 1.1.221 GA: 7/7/2 Data length (bytes): 2 Data (HEX): 14 FD
                    BC 11 FC 2F FE E1 00 81 1F
                    PA: 1.1.252 GA: 5/7/254 Data length (bytes): 1 Data (HEX): 01
                    Zuletzt geändert von Eugenius; 09.10.2017, 21:35.

                    Kommentar


                      Eugenius

                      Kommentar


                        Peterich

                        Ich hab auch angefangen mich etwas in Konnekting einzuarbeiten aber bin nicht so ganz warm geworden wobei es mir besser gefallen würde mit dem Configuieren vom bus aus
                        Wo hängt's denn? Können wir irgendwo helfen? Bitte dann aber im KONNEKTING Sub-Forum, damit der Thread hier nicht unnötig gekapert wird.

                        Kommentar


                          Zitat von tuxedo Beitrag anzeigen
                          Peterich


                          Wo hängt's denn? Können wir irgendwo helfen? Bitte dann aber im KONNEKTING Sub-Forum, damit der Thread hier nicht unnötig gekapert wird.
                          Werde ich noch tun. Nur hab ich im Moment sowenig Zeit ;D
                          Mein erstes Projekt wird wohl mein RFID Leser sein ich hatte auch schon jemand angefragt bezüglich dee konnekting Hardware aber es hängt alles an der zeit ;/ aber danke schonmal das du gefragt hast
                          Kommt Zeit. Kommen Beiträge ;D

                          Kommentar


                            Zitat von Peterich Beitrag anzeigen
                            Busankoppler ist weiterhin der von der Ersten startseite der von Siemens.
                            ...
                            Herzlichen Dank! Das erspart eine Lesemarathon :-)

                            Hätte schon eher geantwortet, hatte aber leider keine Nachricht über Antworten.




                            Kein Support per PN: Fragen bzw. Fehlermeldungen bitte im Forum posten.

                            Kommentar


                              Hallo zusammen.

                              Ich habe es tatsächlich geschafft und habe alle 68 Seiten gelesen. Danach habe ich versucht die Beispiele mit den Arduinos, die ich hier habe, zu testen. Ich habe sowohl mehrere Pro Minis als auch Unos. Das Schreiben auf den Bus läuft absolut problemlos. Ich habe allerdings das Problem, dass die Beispiele zum Empfangen bei mir auf keinem Arduino laufen. Ich habe das Beispiel für den UNO von @MacGyver von Post 685 getestet:

                              Code:
                              #include <KnxTpUart.h>
                              
                              KnxTpUart knx(&Serial, "1.0.15");
                              
                              boolean test;
                              int led = 13;
                              
                              void setup() {
                                Serial.begin(19200);
                                pinMode(led, OUTPUT);     
                                UCSR0C = UCSR0C | B00100000;
                                knx.uartReset();
                                knx.addListenGroupAddress("6/1/1");
                              }
                              
                              void loop() {
                                KnxTpUartSerialEventType eType = knx.serialEvent();
                                if (eType == KNX_TELEGRAM) {
                                  KnxTelegram* telegram = knx.getReceivedTelegram();
                                  String target = String(0 + telegram->getTargetMainGroup()) + "/" + String(0 + telegram->getTargetMiddleGroup()) + "/" + String(0 + telegram->getTargetSubGroup());
                                  if (telegram->getCommand() == KNX_COMMAND_WRITE) {
                                    if (target == "6/1/1") {
                                      test = telegram->getBool();
                                      digitalWrite(led, HIGH); 
                                    }
                                  }
                                }
                              }
                              Am Arduino (hier am Uno) hängen "nur" 4 Anschlüsse: GND, VCC, TX und RX vom Siemens Busankoppler. Der USB-Anschluß wird nur für die Programmierung verwendet und danach wieder abgesteckt, Arduino resettet und getestet...

                              Leider scheint der Arduino nicht zu reagieren, wenn die GA (hier die "6/1/1") geändert wird (also hier die LED schalten). Wie geschrieben, Schreiben funktioniert. Ich habe unzählige Tests und Änderungen probiert und habe nun keine Idee mehr. Hat jemand von Euch einen Tipp? Ich bin kurz vor dem Verzweifeln.

                              Viele Grüße,
                              Flo

                              Kommentar


                                Probiers mal so:
                                Code:
                                void serialEvent() {
                                  KnxTpUartSerialEventType eType = knx.serialEvent();
                                  if (eType == KNX_TELEGRAM) {
                                
                                    KnxTelegram* telegram = knx.getReceivedTelegram();
                                
                                    String target =
                                      String(0 + telegram->getTargetMainGroup())   + "/" +
                                      String(0 + telegram->getTargetMiddleGroup()) + "/" +
                                      String(0 + telegram->getTargetSubGroup());
                                
                                    if (telegram->getCommand() == KNX_COMMAND_READ) { 
                                 if (target == "6/1/1") {         test = telegram->getBool();         digitalWrite(led, HIGH); ]
                                >>Smelly One<<
                                >> BURLI <<
                                Grüße Armin

                                Kommentar

                                Lädt...
                                X