Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    Hallo
    Habe den Arduino Mega 2560 von SainSmart bekommen.
    Habe das Test Sketch auf den Mega übertragen.
    #include <KnxTpUart.h>

    // Initialize the KNX TP-UART library on the Serial1 port of Arduino Mega

    //Für Mega
    KnxTpUart knx(&Serial, "15.15.20");

    void setup() {
    // LED - blinkt beim senden eines Telegramms
    pinMode(13, OUTPUT);
    digitalWrite(13, LOW);

    Serial.begin(19200);
    UCSR0C = UCSR0C | B00100000;

    knx.uartReset();
    }

    void loop() {
    knx.groupWriteBool("2/1/1", true);
    digitalWrite(13, HIGH);
    delay (5000);
    knx.groupWriteBool("2/1/1", false);
    digitalWrite(13, LOW);
    delay (5000);
    }
    Das läuft so auf den Mega wie beim Nano auch.
    Stecke ich das auf TX1(18) u. RX1(19) und im Sketch ändere ich so
    KnxTpUart knx(&Serial1, "15.15.20");
    UCSR1C = UCSR1C | B00100000;
    dann blink die LED13 aber auf KNX tut sich nix.
    Was mache ich falsch?
    RX und TX habe ich schon mehrfach umgesteckt.
    Gruß NetFritz

    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

    Kommentar


      Muß das beim Mega nicht:

      Code:
      Serial1.begin(19200);
      heißen? :-)

      Jens

      Kommentar


        Hallo
        Ja natürlich, manchmal ist man Blind.
        Jetzt geht es.
        Danke NetFritz
        KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
        WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
        PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

        Kommentar


          Hallo
          So mein Versuch vom KNX-Bus zu lesen geht auch auf den Mega nicht.
          1.Versuch das Sketch aus Beitrag 768 geht nicht.
          2-Versuch "ReceiveKNXTelegrams" aus examples.
          Habe nur die Gruppenadresse für getBool angepasst.
          Code:
          #include <KnxTpUart.h>
          
          // Initialize the KNX TP-UART library on the Serial1 port of Arduino Mega
          // and with KNX physical address 15.15.20
          KnxTpUart knx(&Serial1, "1.1.44");
          
          int LED = 13;
          
          void setup() {
            pinMode(LED, OUTPUT);
            digitalWrite(LED, LOW);
          
            Serial.begin(9600);
            Serial.println("TP-UART Test");
          
            Serial1.begin(19200);
            UCSR1C = UCSR1C | B00100000; // Even Parity
          
            Serial.print("UCSR1A: ");
            Serial.println(UCSR1A, BIN);
          
            Serial.print("UCSR1B: ");
            Serial.println(UCSR1B, BIN);
          
            Serial.print("UCSR1C: ");
            Serial.println(UCSR1C, BIN);
          
            knx.uartReset();
           
            knx.addListenGroupAddress("2/1/1");
            knx.addListenGroupAddress("15/0/1");
            knx.addListenGroupAddress("15/0/2");
            knx.addListenGroupAddress("15/0/3");
            knx.addListenGroupAddress("15/0/4");
            knx.addListenGroupAddress("15/0/5");
          }
          
          
          void loop() {
            // nothing in the loop. This example is only to receive telegrams
          }
          
          void serialEvent1() {
            Serial.println("serialEvent1 augerufen");
            KnxTpUartSerialEventType eType = knx.serialEvent();
            if (eType == TPUART_RESET_INDICATION) {
              Serial.println("Event TPUART_RESET_INDICATION");
            } else if (eType == UNKNOWN) {
              Serial.println("Event UNKNOWN");
            } else if (eType == KNX_TELEGRAM) {
              Serial.println("Event 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());
          
              // Here you have the telegram and can do whatever you want
              if (telegram->getCommand() == KNX_COMMAND_WRITE) {
                // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
                if (target == "2/1/1") {
                  int received_2_1_1 = telegram->getBool();
                  Serial.print("Empfangener wert");
                  Serial.println(received_2_1_1);
                  if (received_2_1_1) {
                    digitalWrite(LED, HIGH);
                  }
                  else {
                    digitalWrite(LED, LOW);
                  }
                }
                if (target == "15/0/1") {
                  int received_15_0_1 = telegram->get1ByteIntValue();
                  Serial.print("Empfangener Wert:");
                  Serial.println(received_15_0_1);
                }
                if (target == "15/0/2") {
                  int received_15_0_2 = telegram->get2ByteIntValue();
                  Serial.print("Empfangener Wert:");
                  Serial.println(received_15_0_2);
                }
                if (target == "15/0/3") {
                  float received_15_0_3 = telegram->get2ByteFloatValue();
                  Serial.print("Empfangener Wert:");
                  Serial.println(received_15_0_3);
                }
                if (target == "15/0/4") {
                  float received_15_0_4 = telegram->get4ByteFloatValue();
                  Serial.print("Empfangener Wert:");
                  Serial.println(received_15_0_4);
                }
                if (target == "15/0/5") {
                  String received_15_0_5 = telegram->get14ByteValue();
                  Serial.print("Empfangener Wert:");
                  Serial.println(received_15_0_5);
                }
              }
            }
          }
          In der Konsole bekomme ich folgende Ausgabe:
          Arduino_Ausgabe.png
          Habe dann im Sketch
          Code:
          void serialEvent1() {
            Serial.println("serialEvent1 augerufen");
          Die Ausgabe "serialEvent1" kommt nicht in der Console.
          Also wird "void serialEvent1()" garnicht aufgerufen.
          Komisch finde ich es das in der Ausgabe unter UCSR1C: 100110 steht und nicht 00100000.
          Ist im Sketch noch ein Fehler, habe ich was übersehen?
          Gruß NetFritz

          KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
          WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
          PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

          Kommentar


            Wie sendest du denn das Telegramm?
            Sebastian Bornemann, Voltus GmbH

            Kommentar


              Code:
              void serialEvent1()
              Nur so ne Idee, mach mal die 1 weg

              Jens

              Kommentar


                Hallo
                @Bonscha
                Wie sendest du denn das Telegramm?
                Das ist die Gruppenadresse vom Aktor im Büro, wird von einem Taster an den Aktor gesendet und die Deckenlampe geht an.
                Die ETS zeigt das im Gruppenmonitor auch an.
                @intelligente Haustechnik
                Nur so ne Idee, mach mal die 1 weg
                Geht auch nicht.
                Gruß NetFritz
                KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                Kommentar


                  Hallo NetFritz,

                  zu deinem Problem.

                  Kommentier bitte diese Anweisung in Post#784 aus:

                  Code:
                        if (target == "15/0/5") {
                          String received_15_0_5 = telegram->get14ByteValue();
                          Serial.print("Empfangener Wert:");
                          Serial.println(received_15_0_5);
                        }
                  Danach kannst du den Sketch auf den Mega spielen.

                  Die Ausgabe sollte dann so aussehen, ansonsten läuft ein anderer Sketch auf dem Mega:
                  Ausgabe.PNG


                  Nun sollte das Senden bzw. Empfangen funktionieren.

                  Dein Sketch reagiert nur auf die Gruppenadressen:

                  2/1/1
                  15/0/1
                  15/0/2
                  15/0/3
                  15/0/4

                  Die Augabe beim Empfang der Gruppenadresse 2/1/1 sieht so aus:
                  2_1_1.PNG


                  Getestet mit:

                  MEGA <-> 5WG1 117 2AB12 / Absender der Gruppenadresse = ETS



                  Mit freundlichen Grüßen

                  Mag Gyver
                  Zuletzt geändert von Mag Gyver; 11.02.2016, 17:58. Grund: Schreibfehler

                  Kommentar


                    Hallo
                    @
                    Kommentier bitte diese Anweisung in Post#787 aus:
                    Du meinst Post#784
                    So auskommentiert.
                    Und es geht.
                    Vielen Dank NetFritz
                    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                    Kommentar


                      Hallo NetFritz,

                      ja ich meinte Post#784.
                      Kein Problem.


                      Mit freundlichen Grüßen

                      Mag Gyver

                      Kommentar


                        Warum soll der teil aus 784 auskommentiert werden? Wenn da kein Telegram kommt sollte es doch auch keinen einfluss haben??
                        Gruß
                        Thorsten

                        Kommentar


                          Hallo ThorstenGehrig,

                          ja und nein.

                          Die IDE-Arduino meldet bei der Prüfung einen Fehler. Somit lässt sich der Sketch nicht auf den MEGA hochladen.

                          Es ging um die grundsätzliche Frage bei NetFritz ob das Empfangen funktioniert oder nicht.


                          Mit freundlichen Grüßen

                          Mag Gyver
                          Zuletzt geändert von Mag Gyver; 13.02.2016, 17:54.

                          Kommentar


                            Hallo ThorstenGehrig,

                            kannst du die Änderungen bitte in deine Library mit aufnehmen?
                            Wenn ja, ist damit das Problem aus dem Post #784 erledigt.

                            Änderungen der Zeilen in "Knx Telegram.h" von

                            Code:
                            //Ungetested - war char*
                                    String get14ByteValue(String value);
                            nach

                            Code:
                            String get14ByteValue();
                            und der Zeilen in "Knx Telegram.cpp" von

                            Code:
                            //
                            String KnxTelegram::get14ByteValue(String value) {
                            if (getPayloadLength() != 16) {
                                    // Wrong payload length
                                    return "";
                                }
                                char _load[15];
                             _load[0]=buffer[8+0];
                             _load[1]=buffer[8+1];
                             _load[2]=buffer[8+2];
                             _load[3]=buffer[8+3];
                             _load[4]=buffer[8+4];
                             _load[5]=buffer[8+5];
                             _load[6]=buffer[8+6];
                             _load[7]=buffer[8+7];
                             _load[8]=buffer[8+8];
                             _load[9]=buffer[8+9];
                             _load[10]=buffer[8+10];
                             _load[11]=buffer[8+11];
                             _load[12]=buffer[8+12];
                             _load[13]=buffer[8+13];
                             return (_load);
                            }
                            nach

                            Code:
                            //
                            String KnxTelegram::get14ByteValue() {
                            if (getPayloadLength() != 16) {
                                    // Wrong payload length
                                    return "";
                                }
                                char _load[15];
                             _load[0]=buffer[8+0];
                             _load[1]=buffer[8+1];
                             _load[2]=buffer[8+2];
                             _load[3]=buffer[8+3];
                             _load[4]=buffer[8+4];
                             _load[5]=buffer[8+5];
                             _load[6]=buffer[8+6];
                             _load[7]=buffer[8+7];
                             _load[8]=buffer[8+8];
                             _load[9]=buffer[8+9];
                             _load[10]=buffer[8+10];
                             _load[11]=buffer[8+11];
                             _load[12]=buffer[8+12];
                             _load[13]=buffer[8+13];
                             return (_load);
                            }
                            Getestet:

                            Das Senden und Empfangen von String,ASCII.
                            UNO oder MEGA <-> 5WG1 117 2AB12 / Absender bzw. Empfänger = ETS

                            Nach den Änderungen der Library auf Bitbucket durch dich, stehe ich natürlich zum Test der Änderungen zur Verfügung.


                            Mit freundlichen Grüßen

                            Mag Gyver

                            Kommentar


                              knxtelegram.h ist angepasst - knxtelegramm.cpp ist aber laut history schon am 30-12-2015 geändert?!
                              Mach mal einen neuen Checkout und prüfe es mal - danke im Voraus!

                              Kommentar


                                Hallo ThorstenGehrig,

                                habe Checkout und Prüfung durchgeführt.


                                Lösche bitte den doppelten Eintrag in "Knx Telegram.h" Zeile 99.

                                Sollte aber funktionieren, war bei mir nach der oben genannten Änderung in Ordnung.
                                Aber zur Sicherheit mache ich danach einen neuen Checkout und prüfe diese Änderungen.

                                Danke auch für deine Mühen.


                                Mit freundlichen Grüßen

                                Mag Gyver

                                Zuletzt geändert von Mag Gyver; 14.02.2016, 06:18.

                                Kommentar

                                Lädt...
                                X