Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    In der Lib sind jedenfalls Powerdown-Befehle enthalten, die werden in den Beispielen aber wohl nicht genutzt. Ich würde das erstmal versuchen, das Ganze ohne Nutzung von Sleepmodes zuverlässig ans Laufen zu bekommen - die Sleepmodes kann man ja auch noch nachträglich implementieren. Das Hardwaredesign muss ohnehin den größtmöglichen Energieverbrauch abdecken können.
    Viele Grüße,
    Stefan

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

    Kommentar


      Zitat von dreamy1 Beitrag anzeigen
      Das Hardwaredesign muss ohnehin den größtmöglichen Energieverbrauch abdecken können.
      Ich sehe das von der anderen Seite her. Ich kann nur eine bestimmte Menge an Strom verbrauchen, mehr darf nicht. Ich kann doch auch die Software so auslegen, dass das eingehalten wird, oder verstehe ich da was falsch?
      Es gibt IMHO Schaltaktoren die ab einer bestimmten Schalthäufigkeit begrenzen (müssen) weil sonst die dicken Relais den erlaubten Strombedarf übersteigen, bzw. die verbauten Elkos das nicht hergeben. Da muss doch auch Software auf Hardware abgestimmt sein bzw. umgekehrt.

      Ich habe zwischenzeitlich eine alternative Lib gefunden, der Programmierer geizt auch nicht mit Kritik an der ursprünglichen Version von Adafruit.
      Zumindest wird hier das Thema Stromsparen richtig berücksichtigt.
      In seiner PN532.cpp steht:
      Turns the RF field off.
      When the field is on, the PN532 consumes approx 110 mA
      When the field is off, the PN532 consumes approx 18 mA
      The RF field is turned on again by ReadPassiveTargetID().
      Leider ist der Beispielsketch alles andere als brauchbar für mein Vorhaben.
      Gruß -mfd-
      KNX-UF-IconSet since 2011

      Kommentar


        Wo ist der der Widerspruch zu dem, was ich geschrieben habe?

        Wenn Dein RFID in der Spitze 110mA zum Lesen benötigt, dann muss Deine Hardware das auch liefern können.
        Viele Grüße,
        Stefan

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

        Kommentar


          Hat sich so angehört, als müsste die Hardware das dauerhaft liefern können.
          Mein größeres Problem ist ohnehin die Software...
          Gruß -mfd-
          KNX-UF-IconSet since 2011

          Kommentar


            Nachdem die Kommunikation mit dem Bus bei mir läuft stehe ich vor dem nächsten Problem.
            Telegramme zum Bus senden funktioniert klaglos, beim Empfangen stehe ich aber noch auf dem Schlauch.
            Code:
            #include <KnxTpUart.h>
            KnxTpUart knx(&Serial, "1.1.160");
            
            void setup() {
              Serial.begin(19200, SERIAL_8E1);
              Serial.println(UCSR0C, BIN);
              knx.uartReset();
              knx.addListenGroupAddress("7/0/2");
              knx.addListenGroupAddress("7/0/3");
            }
            
            void loop() {
              knx.groupWriteBool("7/0/1", true);
              delay (1000);
              knx.groupWriteBool("7/0/1", false);
              delay (1000);
            }
            
            void serialEvent1() {
              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());
            
                  if (target == "7/0/2") {
                    int received_7_0_2 = telegram->get4BitIntValue();
                    Serial.print("Empfangener Wert:");
                    Serial.println(received_7_0_2);
                    knx.groupWrite2ByteInt("7/0/4",received_7_0_2);
                  }
            
                  if (target == "7/0/3") {
                    int received_7_0_3 = telegram->get4BitIntValue();
                    Serial.print("Empfangener Wert:");
                    Serial.println(received_7_0_3);
                    knx.groupWrite2ByteInt("7/0/5",received_7_0_3);
                  }
                }
            }
            Im void loop() überprüfe ich nur ob die Bus-Kommunikation läuft.
            Im void serialEvent1() möchte ich, angelehnt an den Beispielsketch, Telegramme vom Bus empfangen.
            Die Zeile "knx.groupWrite2ByteInt("7/0/4",received_7_0_2);" dient nur als Rückmeldung zum Gruppenmonitor.
            Dort kommt allerdings nichts an
            Habt Ihr einen Tip für mich?

            Kommentar


              Zitat von NorbertB Beitrag anzeigen
              Nachdem die Kommunikation mit dem Bus bei mir läuft stehe ich vor dem nächsten Problem.
              Telegramme zum Bus senden funktioniert klaglos, beim Empfangen stehe ich aber noch auf dem Schlauch.
              Code:
              #include <KnxTpUart.h>
              KnxTpUart knx(&Serial, "1.1.160");
              
              void setup() {
              Serial.begin(19200, SERIAL_8E1);
              ...
              }
              
              void loop() {...}
              
              void serialEvent1() {...}
              Im void loop() überprüfe ich nur ob die Bus-Kommunikation läuft.
              Im void serialEvent1() möchte ich, angelehnt an den Beispielsketch, Telegramme vom Bus empfangen.
              Die Zeile "knx.groupWrite2ByteInt("7/0/4",received_7_0_2);" dient nur als Rückmeldung zum Gruppenmonitor.
              Dort kommt allerdings nichts an
              Habt Ihr einen Tip für mich?
              ihr müsst langsam von SerialEvent weg. SerialEvent wird eh über Loop ausgeführt...
              https://github.com/arduino/ArduinoCo...o/main.cpp#L47
              https://github.com/arduino/ArduinoCo...al.cpp#L64-L78

              Jetzt zu deinem Problem: in setup gibst du Serial an, nutzt aber SerialEvent1 was zu Serial1 gehört...
              Du musst also SerialEvent nutzen. oder besser in der Loop:

              Code:
              if(Serial.available()){
              //inhalt von SerialEvent Funktion
              }

              Kommentar


                Danke für den Tip, ich hab's jetzt im loop und funktioniert auch.
                Ein Verständnisproblem habe ich aber noch. Ich versuche zu dem Telegramm, welches ich vom Bus zum Arduino schicke eine Rückmeldung zum Bus einzurichten.
                Code:
                      if (target == "7/0/2") {
                        int received_7_0_2 = telegram->get2ByteIntValue();
                        knx.groupWrite2ByteInt("7/0/7",received_7_0_2);
                      }
                Da kommt aber nichts auf 7/0/7 an. Erst wenn ich noch eine if-Schleife dazwischen schreibe bekomme ich die Rückmeldung auf den Bus:
                Code:
                      if (target == "7/0/2") {
                        int received_7_0_2 = telegram->get2ByteIntValue();
                        if (received_7_0_2 > 1) {
                          digitalWrite(LED, HIGH);
                          knx.groupWriteBool("7/0/5",1);
                        }
                        else {
                          digitalWrite(LED, LOW);
                          knx.groupWriteBool("7/0/5",0);
                        }
                        knx.groupWrite2ByteInt("7/0/7",received_7_0_2);
                      }
                Ich sehe nicht den Grund für dieses Verhalten

                Kommentar


                  Anfängerfrage:

                  Kann ich den Arduino mit mehr als einer Seriellen Schnittstelle (z.B. Mega) gleichzeitig am BCU und am PC (USB; zum debuggen) betreiben?
                  Oder muss ich da eine Trennung einbauen (wenn ja, wie mache ich das sinnvollerweise)?

                  Kommentar


                    Ja kannst du. Du musst nur jeweils dir richtige Schnittstelle nutzen. z.B. SerialUSB für Debugging und Serial0 für BCU. Welche Schnittstellen es gibt hängt von deinem Board ab.

                    Kommentar


                      Gibt es da auch keine Probleme mit der unterschiedlichen Spannungsquelle?
                      Also einmal der PC/Laptop und einmal der KNX-Bus selbst?

                      Kommentar


                        Funktionell nicht. Aber es ist halt nicht galvanisch getrennt. Im schlimmsten Fall hast du die die 29V vom Bus im USB vom Laptop. Das mag der sicher nicht. Dass kann dir aber auch bei galvanischer Trennung passieren, wenn du die Kabel auf dem Breadboard entsprechend steckst.

                        Kommentar


                          Danke

                          Was mir in ein paar Sketches aufgefallen ist:
                          Da wird z.B. ein int Wert (also ja eigentlich 2Byte) per "knx.groupWrite1ByteInt" gesendet.
                          Was passiert hier mit dem Int-Wert? (bzw. was passiert, wen der Wert größer als 255 ist?)

                          Das selbe habe ich mit einem unsigned long und "knx.groupWrite2ByteInt" beobachtet.

                          Kommentar


                            Kann mir hiermit vielleicht jemand weiterhelfen?
                            Wenn ich den beigefügten Arduino Sketch von hier verwenden möchte, bekomme ich zwei derartige Fehler beim Kompilieren
                            Code:
                            RFID_Dooropener.ino:59:42: warning: invalid conversion from 'char*' to 'byte* {aka unsigned char*}' [-fpermissive]
                             if(mfrc522.MIFARE_Read(6, buffer, &size) == MFRC522::STATUS_OK) {
                            Ich vermute mal, dass es mit einer früheren Version der eingesetzten Libraries funktioniert hat...
                            Angehängte Dateien
                            Gruß -mfd-
                            KNX-UF-IconSet since 2011

                            Kommentar


                              mfd :
                              nicht deine Frage und Off-Topic. Wenn man jetzt eine Zutirttskontrolle an seinem EFH macht auf Eigenbau. Zahlt eine Versicherung bei einem Einbruch?
                              Gruß,
                              Andreas

                              Kommentar


                                Zitat von Delta6400 Beitrag anzeigen
                                mfd :
                                Wenn man jetzt eine Zutirttskontrolle an seinem EFH macht auf Eigenbau. Zahlt eine Versicherung bei einem Einbruch?
                                Vermute nicht.
                                Aber: dazu müsste man zunächst passend versichert sein, dann dürfte es keine anderen/schlimmeren "Einfallstore" als das RFID-Schloss geben, und: zahlen wollen die doch ohnehin nie, selbst wenn du alles richtig gemacht hast.
                                Gruß -mfd-
                                KNX-UF-IconSet since 2011

                                Kommentar

                                Lädt...
                                X