Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    Moin,

    ich habe jetzt auch ein wenig probiert und leider funktioniert selbst folgender Code nicht bei mir:

    Code:
    #include <KnxTpUart.h>
    #include <EEPROM.h>
    
    #define KNX_BAUDRATE       19200 // Define Serial Baudrate to Siemens 5WG1
    // #define KNX_SEND_ALIVE_GA  "0/0/1"
    KnxTpUart knx(&Serial, PA_INTEGER(1,1,199));
    int LED = 6;
    
    
    void setup() {
      pinMode(LED, OUTPUT); // Setting up status LED
        
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000; // Even Parity
    
      knx.uartReset();
    }
    
    
    void loop() {
    
      knx.groupWrite(GA_INTEGER(0,0,1), 1);
      delay(3000);
      knx.groupWrite(GA_INTEGER(0,0,1), 0);
      delay(3000);
    }
    Auf der 0/0/1 sitzt ein Schaltkanal, das Licht sollte blinken, doch nichts passiert.
    Telegramme empfangen war ebenfalls Fehlanzeige.

    Da ich Probleme hatte mit den unterschiedlichen Schreibweisen der GA/PA, z.B. als GA_INTEGER(0,0,1) bzw. einfach (0/0/1), und hier leider unzählige verschiedene Versionen kursieren, habe ich gehofft, euch fällt da direkt ein Fehler ins Auge...
    Sebastian Bornemann, Voltus GmbH

    Kommentar


      Du solltest dazuschreiben welche Lib du verwendest (meine ist hier: https://bitbucket.org/thorstengehrig...nx-user-forum/ ).
      Falls du "meine" Einsetzt ist die Schreibweise definitiv falsch!
      Ich habs extra einfach gehalten -

      KnxTpUart knx(&Serial, PA_INTEGER(1,1,199));
      knx.groupWrite(GA_INTEGER(0,0,1), 1);
      wäre da
      KnxTpUart knx(&Serial, “1.1.199”);
      knx.groupWriteBool(“0/0/1”, 1);



      Gruß
      Thorsten
      Zuletzt geändert von ThorstenGehrig; 25.10.2015, 20:08.

      Kommentar


        Moin Thorsten,

        bis eben hatte ich mit Karduino probiert. Dann habe ich auf deine Library umgestellt. Hier mein aktueller und noch immer nicht funktioneller Code:

        Code:
        #include <KnxTpUart.h>
        #include <EEPROM.h>
        
        KnxTpUart knx(&Serial, "1.1.199");
        int LED = 6;
        
        
        void setup() {
        
          pinMode(LED, OUTPUT); // Setting up status LED
        
          Serial.begin(19200);
          UCSR0C = UCSR0C | B00100000; // Even Parity
        
          knx.uartReset();
          knx.setListenToBroadcasts(true);
        
          knx.addListenGroupAddress("15/0/0");
        
        }
        
        
        void loop() {
        
          digitalWrite(LED, HIGH);
          knx.groupWriteBool("0/0/1", 1);
          delay(3000);
        
          digitalWrite(LED, LOW);
          knx.groupWriteBool("0/0/1", 0);
          delay(3000);
        
        }
        
        
        void serialEvent()
        {
          //Get Serial Event
          KnxTpUartSerialEventType eType = knx.serialEvent();
        
          //Check Serial Event
          if (eType == KNX_TELEGRAM)
          {
            KnxTelegram* telegram = knx.getReceivedTelegram();
        
            // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
            String target =
              String(0 + telegram->getTargetMainGroup())   + "/" +
              String(0 + telegram->getTargetMiddleGroup()) + "/" +
              String(0 + telegram->getTargetSubGroup());
        
            // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable target
            if (telegram->getCommand() == KNX_COMMAND_WRITE)
            {
              // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
              if (target == "15/0/0") {
                digitalWrite(LED, HIGH);
                delay(30000);
              }
            }
          }
        }
        Die LED blinkt fleißig, und das wars dann auch.

        Läuft übrigens auf einem Nano, falls das ein Grund sein könnte... Kann ich mir aber nicht vorstellen...
        Sebastian Bornemann, Voltus GmbH

        Kommentar


          So, nachdem mir mal aufgefallen ist, dass RX und TX über Kreuz verbunden werden müssen, und ich das entsprechend am Arduino getauscht habe, schaltet der Sketch jetzt fleißig alle 3 Sekunden meinen Schaltaktor.

          Leider passiert noch immer nichts, wenn ich per eibd ein Telegramm an 15/0/0 sende: groupswrite ip:localhost 15/0/0 1
          Liegt das jetzt daran, wie ich es sende, oder am Arduino?
          Sebastian Bornemann, Voltus GmbH

          Kommentar


            1 Bit mit groupwrite senden

            Kommentar


              Reagiert leider auch nicht bei: groupwrite ip:localhost 15/0/0 1. Auch wenn ich per ETS sende versteht der Arduino das Telegramm nicht... Der Schaltaktor kann damit wunderbar umgehen.
              Ist es nicht sowieso egal, in welcher Form das Telegramm ankommt? Die LED müsste ja immer angehen, oder nicht?
              Sebastian Bornemann, Voltus GmbH

              Kommentar


                Mit dem Empfangen von Telegrammen (serialEvent) hatten schon einige probleme hier im Thread beschrieben. Bau dir mal ein bisschen debug-code ein wo du Landest mit den empfangenen programmen...

                Kommentar


                  Besitze zwar zwei ATMega2560, leider aber einer zerschossen und der andere nicht programmierbar.
                  Mein aktueller Code (Karduino-Library, läuft ansonsten auch) soll die LED anschmeißen, sobald SerialEvent getriggert wird:
                  Code:
                  #include <Arduino.h>
                  #include <EEPROM.h>
                  
                  // für den KNX Zugriff
                  #include <KnxTelegram.h>
                  #include <KnxTpUart.h>
                  #include <KnxDevice.h>
                  
                  KnxTpUart knx(&Serial, PA_INTEGER(1, 1, 199));
                  int LED = 6;
                  
                  
                  void setup() {
                  
                    pinMode(LED, OUTPUT); // Setting up status LED
                  
                    Serial.begin(19200);
                    UCSR0C = UCSR0C | B00100000; // Even Parity
                   
                    knx.uartReset();
                    knx.setListenToBroadcasts(true);
                  
                    knx.addListenGroupAddress(GA_INTEGER(15, 0, 0));
                  
                  }
                  
                  
                  void loop() {
                  }
                  
                  
                  void serialEvent()
                  {
                    digitalWrite(LED, HIGH);
                    //Get Serial Event
                    KnxTpUartSerialEventType eType = knx.serialEvent();
                   
                    //Check Serial Event
                    if (eType == KNX_TELEGRAM)
                    {
                      
                      KnxTelegram* telegram = knx.getReceivedTelegram();
                  
                      // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
                      String target =
                        String(0 + telegram->getTargetMainGroup())   + "/" +
                        String(0 + telegram->getTargetMiddleGroup()) + "/" +
                        String(0 + telegram->getTargetSubGroup());
                  
                      // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable target
                      if (telegram->getCommand() == KNX_COMMAND_WRITE)
                      {
                        // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
                        if (target == "15/0/0") {
                          
                        }
                      }
                    }
                  }
                  Natürlich tut sich einfach nichts... Und da diese Funktion nicht mal aufgerufen zu werden scheint, benötige ich vermutlich auch keinen tiefergehenden Debug-Code?
                  Sebastian Bornemann, Voltus GmbH

                  Kommentar


                    Bist du sicher dass "serialEvent()" korrekt ist? Je nach Arduino und Schnittstelle kann es auch "serialEvent1()" sein ... Wobei, dann müsstest du ja auch "Serial1" initialisieren, und nicht "Serial" ...

                    Würde an deiner Stelle erstmal prüfen ob die Serielle Schnittstelle sauber funktioniert. D.h. statt den BCU mal den Rechner dran hängen und mit dem Rechner daten schicken. Wenn das mit einer BCU Kompatiblen Baud-Rate funktioniert, kannst du wieder auf den BCU umschwenken.

                    Kommentar


                      Ich kann ja auch auf den Bus senden, nur der Empfang klappt nicht. Der Nano hat nur die "Serial".
                      Zuletzt geändert von Bonscha; 30.10.2015, 12:14.
                      Sebastian Bornemann, Voltus GmbH

                      Kommentar


                        Bist du dir sicher dass die RX-Leitung zum BCU korrekt angeschlossen ist?

                        Ich würde trotzdem mal den PC statt den BCU dran hängen. Nur um sicher zu gehen dass die RX-Seite funktioniert.

                        Kommentar


                          Zitat von Bonscha Beitrag anzeigen
                          Ich kann ja auch auf den Bus senden, nur der Empfang klappt nicht. Der Nano hat nur die "Serial".
                          Das Problem hatte ich auch. Hab es aber mangels Zeit nicht nachverfolgt. Mein Sketch läuft auf einem Mega einwandfrei.

                          Kommentar


                            Das hier bestellen: http://www.ebay.de/itm/24MHz-8CH-USB...8AAOSwyQtV6XEJ, vier Wochen warten (wg. China-Versand), nachschauen statt spekulieren.

                            Wer ein schlechtes Gewissen hat, nimmt das hier: http://elmicro.com/de/saleae-logic.html (Logic 4 oder Logic 8). Ist das gleiche, aber vom Original-Hersteller.

                            Oder Oszilloskop organisieren.

                            Max

                            Kommentar


                              Danke für den günstigen Tipp.

                              Kommentar


                                So ein Teil wäre wirklich mal was... Ansonsten hier evtl. eine schnellere Alternative: http://www.amazon.de/SainSmart-Logik...logic+analyzer
                                Na zumindest finde ich es gut zu wissen, dass am Code nichts falsch zu sein scheint. RX habe ich an TX angeschlossen und umgekehrt. Wie gesagt, Senden geht ja.

                                Ich werde mal ein wenig rumprobieren, vielleicht bekomme ich den Mega2560 ja wieder hin.
                                Sebastian Bornemann, Voltus GmbH

                                Kommentar

                                Lädt...
                                X