Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    Ich denke auch, dass es mit der Frequenz zu tun hat und irgendwas dem anderen davon läuft.
    Allerdings ist die Fehlersuche bei einem KNX-Bus aus zwei Geräten aus dem DIY-Bereich recht schwierig, weil wir uns hier vernab der Norm bewegen und auch Fehler in der KNX Library nicht ausgeschlossen werden können. Es kann also der Sender als auch der Empfänger sein, der Schwierigkeiten macht. Die Frage wäre ja wie ein Taster vom Bus programmiert, sich verhält.
    Vielleicht hast ja schon mal einen Originaltaster und bespielst den mal mit einer ETS-Demo-Version.

    Kommentar


      Hallo,

      Frequenz in der IDE ist richtig ausgewählt. Hab ich auch mit Stoppuhr und Blink-Sketch grob verifiziert. Ich muss zugeben, dass ich das anfangs falsch hatte und da hat überhaupt nichts funktioniert. Ich hab leider kein anderes KNX-Zeug hier. Werde mir zur weiteren Diagnose ein Gateway zulegen müssen. Hat da jemand ne günstige Empfehlung?

      Gruss,
      Casim

      Kommentar


        Es tut mir leid, dass ich Englisch verwenden musste (ich habe dies mit einem Übersetzer gemacht)

        Sorry for english, I have been battling with this a week now and im out of ideas

        Leonardo works 100%, but nano ignores "void serialEvent()" function totally

        Grounding button(pin2) sends command to bus and it works, I get msg at raspberry pi:
        L_Busmon: BC 11 C7 09 09 E1 00 81 F5 :L_Data low from 1.1.199 to 1/1/9 hops: 06 T_Data_Group A_GroupValue_Write (small) 01

        But when I give command in raspberry, that function doesn't activate at all (it should turn led on):

        code, sorry I pasted full thing, just in case:

        Code:
        // File: GroupRead.ino
        // Author: Mag Gyver (Since 2015)
        // Modified: Thorsten Gehrig (Since 2015)
        // Test constellation = ARDUINO UNO <-> 5WG1 117-2AB12
        #include "KnxTpUart.h"
        
        KnxTpUart knx(&Serial, "1.1.199");
        int LED = 13;
        bool button_last_state = 0;
        
        void setup() {
        
        pinMode(13, OUTPUT); // PIN 13 as output
        digitalWrite(13, LOW); //Doesnt do anything
        
        pinMode(2, INPUT_PULLUP); // PIN 2 as input, grounding it should send message
        
        Serial.begin(19200, SERIAL_8E1);
        knx.uartReset();
        knx.addListenGroupAddress("1/1/10");
        delay(1000);
        knx.groupRead("1/1/10");
        }
        
        void loop() {
        bool pin_state = !digitalRead(2); //because its pulled up and we want inverse logig
        if (button_last_state == false && pin_state == true) {
        button_last_state = true;
        knx.groupWriteBool("1/1/9", 1);
        }
        if (pin_state == false)button_last_state = false; //if user releases button, reset last value also
        }
        
        void serialEvent() {
        digitalWrite(13, HIGH); //Doesnt do anything on nano
        KnxTpUartSerialEventType eType = knx.serialEvent();
        if (eType == KNX_TELEGRAM) {
        KnxTelegram* telegram = knx.getReceivedTelegram();
        if (telegram->getCommand() == KNX_COMMAND_ANSWER) {
        }
        if (telegram->getCommand() == KNX_COMMAND_WRITE) {
        
        }
        }
        }
        when installing it to leonardo, I changed these and everything works:
        Code:
        KnxTpUart knx(&Serial, "1.1.199");     -> KnxTpUart knx(&Serial1, "1.1.199");
        Serial.begin(19200, SERIAL_8E1);    -> Serial1.begin(19200, SERIAL_8E1);
        void serialEvent()                                -> void serialEvent1() {
        Im totally out of ideas.
        Zuletzt geändert von Leopard; 11.06.2021, 16:46.

        Kommentar


          Sorry for my bad English!
          Have you on the NANO a PC on the USB-Port?
          I think the NANO has one Serial Port and the Leonardo has two Serial Ports. I guess that's the problem: https://www.arduino.cc/reference/en/...cation/serial/

          So weiter auf Deutsch
          Ich behaupte mal der Nano ist dafür keine gute Wahl. Und da der Leonardo zu 100% funktioniert, vermute ich es liegt an dem 2. serielle Port, den der Nanon laut dem Link oben nicht hat.
          Zitat von Leopard Beitrag anzeigen
          Serial1.begin
          ...wird der Nano nicht kennen.
          Der ProMicro den ich immer gern verwende ist ja auch ein Leonardo und auch so klein wie ein Nano.

          Kommentar


            Thanks for the reply.

            no, nano was only in USB when I flashed it.

            when in use, I just added it to "SIEMENS 5WG1117-2AB12" TP UART ". Serial port and took arduinos power directly from UART.


            After your message I had to test with extra power also (galvanic isolated), just a tought if its current problem. Next I'll try with UNO, I know its original one (that nano might be cheap china copy, not sure.)


            Edit: Tested with another siemens module and UNO, act like same. :/


            Edit 2, could it have something to do with this?:
            https://forum.arduino.cc/t/nano-ever...alled/690025/2



            Pic of it:
            nano_small.jpg
            Zuletzt geändert von Leopard; 12.06.2021, 01:55.

            Kommentar


              Zitat von Leopard Beitrag anzeigen
              Leonardo works 100%, but nano ignores "void serialEvent()" function totally
              There are some Arduino Nano clones which use CH340G as serial-USB converter. With those the serial communication doesn't work. Please check if this is the case for you as well. If you search for CH340G in this forum you can get more info.
              Best solution: use a different Arduino.

              Kommentar


                Zitat von Sonnengruesser Beitrag anzeigen
                There are some Arduino Nano clones which use CH340G as serial-USB converter. With those the serial communication doesn't work. Please check if this is the case for you as well. If you search for CH340G in this forum you can get more info.
                Best solution: use a different Arduino.
                Yes, that's exactly same serial converter, I had to get USB drivers from some chinese page.

                Now I need to check why uno R3 (legit, but old) didnt work

                Thank you, Ill try to get some other arduinos (pro mini)
                Zuletzt geändert von Leopard; 12.06.2021, 15:59.

                Kommentar


                  https://www.amazon.de/gp/product/B01...0?ie=UTF8&th=1

                  This is a good Arduino based on Leonardo...

                  Kommentar


                    Zitat von Charls Beitrag anzeigen
                    https://www.amazon.de/gp/product/B01...0?ie=UTF8&th=1

                    This is a good Arduino based on Leonardo...
                    Ich habe zwei bestellt, ich hoffe sie funktionieren ^^
                    Während ich warte, probiere ich Nano mit entferntem Chip aus:
                    (übersetzt mit google, sorry für den Rechtschreibfehler

                    nano_without_chip.jpg

                    Kommentar


                      (from translator

                      Ich bin dir wirklich dankbar für deine Hilfe
                      Ich war ungeduldig, auf diese arduino-basierten Maschinen zu warten, also kaufte ich einen Chip-Writer und grundlegende Atmega-Chips.

                      Hier ist sie, KNX gesteuerte LED!

                      danke an alle für dieses schöne forum

                      atmega328p.jpg

                      Kommentar


                        Hello Leopard,


                        the reception also works, on the ARDUINO UNO R3

                        THE GND TP-UART to connect to the GND of the Arduino (exception -> optocoupler)

                        For the ARDUINO UNO R3 "void serialEvent()", the following should be done:

                        (Not with initial programming, there is no bridge to remove) Remove the bridge on (ICSP1 pin 5 with ICSP1 pin 6)
                        (Not at initial programming, not necessary the ATmega 16u2 is not in programming mode) Unplug the USB plug and plug it back in (allow a bit of time to pass between plugging in and out)
                        Programming the ARDUINO UNO R3 without infected TP-UART (RxD,TxD).
                        After programming establish a bridge between ICSP1 pin 5 and ICSP1 pin 6
                        Connect the TP-UART (RxD,TxD) (re)connect
                        Briefly press reset button on the ARDUINO UNO R3


                        Kommentar


                          Hallo Leute,
                          falls jemand Interesse an meiner Platine ivm. dem allseits bekannten Siemens BTU hat, einfach melden.
                          Das KiCad Projekt kann ich natürlich auch zur Verfügung stellen.
                          🖖
                          You do not have permission to view this gallery.
                          This gallery has 1 photos.
                          Zuletzt geändert von Funki; 09.08.2021, 12:28.
                          lg Sascha

                          Kommentar


                            Hallo
                            Kann mir jemand nochmal kurz erklären, wie ich vom Bus lesen kann? Ich will jetzt nicht alle 85 Seiten hier durchlesen und aus der Readme Datei werde ich nicht ganz schlau.
                            Der Befehl : knx.groupRead("1/2/3"); ist schon klar und gibt die GA an, die ich lesen will. Aber wie setze ich value = telegram->get2ByteFloatValue(); richtigt ein? Was ist telegram und wie muss ich den Wert "value" deklarieren. Sind die Namen fest (telegram) und ich lese immer wieder was von einer If-Abfrage danach?
                            Kann mir vielleicht mal einer ein Beispiel afschreiben, wie ich den Temperaturwert also DPT9 von der GA 1/2/3 auslese, damit ich mir selbst ein Bild machen kann, wie es funktioniert?

                            Und was ist "answer"? Kann damit ein Gerät einen Wert vom Arduino abfragen? Wie benutzt man sowas? Gibt man da einfach den Wert auf knx.groupAnswer2ByteFloat("1/2/3", float); oder muss man da auch noch was beachten?
                            Hab festgestellt das ich bis jetzt nur erfolgreich an den Bus gesendet hab.

                            vielen Dank

                            Kommentar


                              So, ich hab mich mal etwas durch 85 Seiten gelesen, wobei es mehr ein Querlesen war. Ein paar Fragen sind es nun doch noch, auch wenn das Prinzip langsam klarer wird.
                              Was sagt eigentlich das "(UCSR0C, BIN)" oder "UCSR0C = UCSR0C | B00100000;"? Damit kann ich nichts anfangen. Wenn ich "Serial1.begin(19200, SERIAL_8E1);" schreibe, ist das das gleiche in Hex?
                              Eugenius Du schreibst in #1116 auf Seite 75 "ihr müsst langsam von SerialEvent weg. SerialEvent wird eh über Loop ausgeführt..." Was genau ist damit gemeint?

                              Wenn ich viel in die Loop schreibe, bremmst es die Abfrage aus - ist das richtig? Ich rede hier von delay 10s. Außerdem kommt nur beim Senden des anderen Teilnehmers auf den Bus etwas im Arduino an.
                              Mein funktionierender Code sieht gerade so aus:
                              void setup() {
                              //Initialize Serial port
                              Serial.begin(19200);
                              Serial1.begin(19200, SERIAL_8E1);

                              knx.uartReset();
                              knx.addListenGroupAddress("7/1/12");
                              knx.addListenGroupAddress("7/1/13");
                              }

                              void loop() {
                              }

                              void serialEvent1() {
                              KnxTpUartSerialEventType eType = knx.serialEvent();
                              if (eType == TPUART_RESET_INDICATION);
                              else if (eType == UNKNOWN);
                              else 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());

                              if (target == "7/1/12") {
                              int received_7_1_12 = telegram->get2ByteFloatValue();
                              Serial.print("Empfangener Wert: 7/1/12 =>");
                              Serial.println(received_7_1_12);
                              }

                              if (target == "7/1/13") {
                              int received_7_1_13 = telegram->get2ByteFloatValue();
                              Serial.print("Empfangener Wert: 7/1/13 =>");
                              Serial.println(received_7_1_13);
                              }
                              }
                              }
                              Was bringt mir aber die "eType If-Abfrage" für UNKNOWN und TPUART_RESET_INDICATION? Kann man die nicht weglassen?

                              Fragen über Fragen...
                              Vielleicht kann mir jemand auf die Sprünge helfen.

                              Kommentar


                                Hallo,
                                ich habe Probleme mit dem einfachen schreiben auf dem Bus.
                                Es passiert nichts.
                                Hardware: Arduino Uno Siemens 5WG1 117-2ab12
                                Software: Arduino DIE 1.8.16, KnxTpUart : arduino-tpuart-knx-user-forum-main.zip aktuell ruter geladen
                                Beschaltung:
                                BCU Arduino
                                1. GND
                                2. TX
                                3. RX
                                4. 5V
                                Zum Programmieren des Arduino sind alle Kabel ab.
                                Danach trenne ich den Arduino von USB und verbinde Ihn mit dem BCA.

                                Code:
                                #include <Arduino.h>
                                #include <KnxTpUart.h>
                                
                                KnxTpUart knx(&Serial, "1,1,5");
                                bool richtig;
                                void setup()
                                {
                                Serial.begin(19200);
                                delay(1000);
                                knx.uartReset();
                                delay(1000);
                                pinMode(13,OUTPUT);
                                }
                                void loop()
                                {
                                digitalWrite(13,1);
                                knx.groupWriteBool("4/0/45",true);
                                delay(5000);
                                digitalWrite(13,0);
                                knx.groupWriteBool("4/0/45",false);
                                delay(5000);
                                }[FONT=Calibri][/FONT]


                                Was ist da falsch?

                                Kommentar

                                Lädt...
                                X