Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    Jetzt warst Du schneller...schön, dass es bis hierher schonmal funzt :-)
    Viele Grüße,
    Stefan

    DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

    Kommentar


      Das mit der Lib ist normal. Das "Event unknown" wird ja nur bei serieller Konsole geschrieben, kostet im Normalbetrieb also keine Zeit. Eine if-Abfrage kostet auch nur ein paar µs. Insgesamt ist die Performance am KNX aber begrenzt, das musste ich auch schon feststellen, gerade wenn man nur 8MHz hat :-(

      In der Lib gibts auch einige delay(), die erstmal alles für kurze Zeit zum Stillstand bringen.
      Viele Grüße,
      Stefan

      DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

      Kommentar


        Das habe ich mir schon gedacht. Irgendwo muss ja unterschieden werden zwischen relevanten und nicht relevanten Telegrammen.

        Die Funktion sieht jetzt erstmal so aus
        Code:
        {
          const long interval = 200; // time between blinks in ms.
          static bool switchState = true;
          static byte sequencePosition = 0;
          static unsigned long previousMillis = 0;
          unsigned long currentMillis = millis();
          if (currentMillis - previousMillis >= interval) {
            previousMillis = currentMillis;
            if (sequencePosition < numberOfBlinks * 2) { // blink
              switchState = !switchState;
              sequencePosition++;  
              digitalWrite(LED, switchState);
            }
            else {
              blinkEnd = true;
              sequencePosition = 0;
        
              }
           }
        }
        Falls sich jemand für den kompletten Code interessiert, habe ich den derzeitigen Stand mal angehängt.
        Der Großteil ist von Peterich hier aus dem Forum übernommen. Für Verbesserungen bin ich immer offen (bin nur Code Copy-Paster).

        Es geht darum einen Wiegand-Reader an den Bus anzubinden. Ich habe das nur um ein paar Kleinigkeiten für meinen Reader (34bit) und Status sowie Abschaltung für die Leseeinheit ergänzt.

        Falls Interesse besteht, kann ich nach Fertigstellung dazu ein eigenes Thema zur Dokumentation machen.
        Ziel war es möglichst günstig (50€ all incl.) einen optisch vertretbaren, wetterfesten Reader zu haben, der ohne Zusatzversorgung auskommt und direkt über den Bus kommuniziert.
        Angehängte Dateien
        Gruß -mfd-
        KNX-UF-IconSet since 2011

        Kommentar


          Nach einiger Zeit im produktiven Einsatz habe ich ein "verlorenes" Telegramm an meinem Arduino+TP-Uart zu verzeichnen. Läßt sich das irgendwie "Onboard" verbessern, oder muss man damit aufgrund der Einschränkungen durch Library/Arduino leben?
          Gruß -mfd-
          KNX-UF-IconSet since 2011

          Kommentar


            KNX -> Arduino
            oder
            Arduino -> KNX
            ?

            Hohe Last auf dem µController?

            Kommentar


              Das Problem besteht vom Bus Richtung Arduino.

              Eine hohe Auslastung des Arduino ist ja (vermutlich?) mit hoher Buslast immer gegeben. Es werden, soweit ich das verstehe, ja alle Telegramme empfangen (versucht zu empfangen) und dann quasi gefiltert welches für den Arduino/das Gerät von Relevanz ist und ausgewertet.
              Gruß -mfd-
              KNX-UF-IconSet since 2011

              Kommentar


                Moin zusammen,

                bin gerade etwas frustriert beim Rumprobieren mit ersten KNX-Tests...
                Senden geht, Empfangen nicht.

                EDIT: OK ich habe beim UNO den Jumper nicht gesetzt, statt RTFM nur ÜTFM gemacht...

                Aber kurz zum Abgleich: wo gibt es die aktuelle KnxTpUart.h die ihr benutzt? Im Netz gibt es diverse verschiedene

                LG Tobias
                Zuletzt geändert von tooooooobi; 10.11.2019, 12:51.

                Kommentar


                  Hier mal ein kurzer Zwischenstand, Lesen und Schreiben auf den Bus:

                  Klappt am UNO (mit dem Jumper)
                  Klappt am (original-) NANO (Ohne Jumper)
                  Klappt nicht am Nachbau-Nano (ch340g) - egal ob mit oder ohne Jumper

                  Hat jemand eine Idee wie sich die beiden Nanos unterscheiden? Liegt das am ch340g-Chip? Den Trick mit Pin 19 habe ich nicht probiert...
                  LG
                  Tobias

                  Kommentar


                    Zitat von tooooooobi Beitrag anzeigen
                    Liegt das am ch340g-Chip?
                    Ja. Das steht auch weiter vorne... Ehrlich gesagt wundert mich, dass der Original-Nano funktioniert. Normalerweise müsste auch das kollidieren, weil es eben immer nur der eine UART auf dem AVR ist...
                    Zuletzt geändert von jentz1986; 11.11.2019, 06:30. Grund: Daneben gedrückt...

                    Kommentar


                      OK, das hatte ich in den langen Thread nicht gesehen. Würde ein Mini Pro funktionieren? Am liebsten ein Clone?
                      Tobias

                      Kommentar


                        Mini pro clone habe ich viele am laufen. Mit KNX fand ich das immer schwierig, wegen des debuggings. Daher habe ich nachher dann Mega2560 genommen zum entwickeln. Leider reicht dann der Speicher bei den kleinen nicht mehr. Die anderen boards hier mit samd machen unterm Strich mehr Spaß.

                        Kommentar


                          Zitat von jentz1986 Beitrag anzeigen
                          Mini pro clone habe ich viele am laufen...
                          Funktioniert auch hier jetzt astrein, danke!

                          Kommentar


                            Hallo zusammen,
                            ich probiere seit ein paar Tagen, einen Arduino Mega an den KNX Bus zu bekommen. Geht auch rudimentär mit der Bibliothek von Thorsten Gehrig. Mit digitalWrite schalte ich ne kleine LED an und aus. Allerdings habe ich das Problem, dass der Arduino keine Empfangsbestätigung 'LL_ACK' zurücksendet. Deshalb sendet der Absender stets nochmals drei Telegtamme hinterher. Stört nicht bei wenig Buslast, ist aber nicht schön. Hat jemand eine Idee? Hier mal der minimale Code:

                            Code:
                            #include <KnxTpUart.h>
                            
                            
                             KnxTpUart knx(&Serial1, "1.1.149");
                             
                             
                            void setup() {
                              Serial.begin(9600);
                              Serial1.begin(19200, SERIAL_8E1);
                              Serial1.println(UCSR0C, BIN);
                              knx.uartReset();
                              knx.addListenGroupAddress("2/1/10");//schalten
                              knx.addListenGroupAddress("2/1/11");//Dimmen relativ
                              knx.addListenGroupAddress("2/1/12");//Dimmen absolut
                              
                            }
                            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());
                                  
                                    Serial.println(target);
                                    if (target == "2/1/10") {
                                      Serial.println(telegram->getBool());
                                      if (telegram->getBool()) {
                                        digitalWrite(9, 255);
                                        
                                      }
                                      else {
                                        digitalWrite(9,0);
                                        
                                      }
                                    }
                                  
                                  
                                
                              }
                            }
                            sieht im Busmonitor dann so aus. Das Telegramm wird von smarthomeng versendet. Hat jemand ne Idee?

                            Unbenannt.PNG

                            Kommentar


                              Hallo Hubiflieger,

                              eventuell mal eine kleine Hilfestellung.

                              Code:
                              #include <KnxTpUart.h>
                              
                              KnxTpUart knx(&Serial1, "1.1.149");
                              
                              void setup() {
                                Serial1.begin(19200, SERIAL_8E1);
                                knx.uartReset();
                                knx.addListenGroupAddress("2/1/10");
                                knx.addListenGroupAddress("2/1/11");
                                knx.addListenGroupAddress("2/1/12");
                              }
                              
                              void loop() {
                              }
                              
                              void serialEvent1() {
                                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 (target == "2/1/10") {
                                    int received_2_1_10 = telegram->getBool();
                                    if (received_2_1_10) {
                                      digitalWrite(9, 255);
                                    }
                                    else {
                                      digitalWrite(9, 0);
                                    }
                                  }
                                }
                              }


                              Mit freundlichen Grüßen

                              Mag Gyver

                              Kommentar


                                Für Anfänger wie mich:
                                Ich sehe den Unterschied beider Sketches, versuche ihn aber noch zu verstehen.
                                Ist das Problem das, dass zweimal das Telegram abgefragt wurde?

                                Kommentar

                                Lädt...
                                X