Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • wkaa
    antwortet
    Hallo, ich bekomme den "KNX Tiny Serial Modul 810-UART" von Weinzierl.

    https://www.weinzierl.de/index.php/d...-interface-810

    https://www.weinzierl.de/images/down...t_Daten_DE.pdf

    https://www.weinzierl.de/images/down...l_Protocol.pdf

    Weiß jemand mit welcher Arduino KNX-Bibliothek er funktionieren könnte? (KONNEKTING, DKA/ThorstenGehrig). Franck Marini's Code möchte ich nicht verwenden, da er wie zuvor geschrieben nicht mehr gepflegt wird.

    Vielen Dank und feierliche Grüße

    Werner

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Es sei hier noch angemerkt, dass KONNEKTING ursprünglich auf Franck Marini's Code aufgebaut hat. Wir hatten versucht mit Franck für Verbesserungsvorschläge Kontakt auf zu nehmen, ist aber alles im Sand verlaufen. Wir haben von Franck auf unsere Anfragen nie eine Antwort erhalten. Laut Github ist seit über 3 Jahren ncihts mehr am Code geschehen...
    KONNEKTING ist mittlerweile recht weit von der ursprünglichen Code-Basis von Franck entfernt und hat zahlreiche Verbesserungen erfahren.

    Wer "mal eben schnell" was mit KONNEKTING basteln will sollte etwas Zeit mitbringen oder doch auf die recht einfache Library von DKA/ThorstenGehrig setzen.
    Wer mehr will, sollte zu KONNEKTING greifen.

    Vorweihnachtliche Grüße,
    Alex

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Information zur Siemens BCU.

    Laut Spezifikation ist die für 5 Volt Systeme gedacht, bitte Pegelwandler einsetzen. Kann dann zu entsprechenden Fehlverhalten führen.


    Zur Bibliothek selbst.

    Diese ist sehr rudimentär und nicht wirklich ausgereift, es wird sehr viel mit "delay" gearbeitet was wiederum noch weitere Probleme mit sich bringt. Der Autor Daniel-Klein-Albers macht schon seit einigen Jahren nichts daran. ThorstenGehrig hat die Bibliothek entdeckt und hier sein Projekt darauf vorgestellt. Was allgemein in diesem Forum einen Push ausgelöst hat, mittlerweile gibt es hier mehrere Leute die gemeinsam ihre eigenen Lösungen als KNX DIY vorstellen.

    Wenn du also etwas ändern möchtest, aufgrund der Tatsache das es in deiner Lösung das Beste ist, dann nur zu.

    Alternativen findest du genug:

    Einen Kommentar schreiben:


  • Hubiflieger
    antwortet
    So nach einigem Probieren habe ich festgestellt dass es wohl ein Zeitproblem ist.
    Mit
    Code:
     [COLOR=#af00db]#define[/COLOR][COLOR=#0000ff] [/COLOR][COLOR=#795e26]SERIAL_WRITE_DELAY_MS[/COLOR][COLOR=#0000ff] [/COLOR][COLOR=#09885a]40[/COLOR]
    kommt unregelmäßig ein Ack zum bus.
    Wenn ich aber das Send Ack stumpf hier auslöse, dann kommt die Antwort immer auf den Bus.

    Code:
     [COLOR=#0000ff]bool[/COLOR][COLOR=#000000] [/COLOR][COLOR=#267f99]KnxTpUart[/COLOR][COLOR=#000000]::[/COLOR][COLOR=#795e26]readKNXTelegram[/COLOR][COLOR=#000000]() {[/COLOR]
      [COLOR=#000000]  [/COLOR][COLOR=#795e26]sendAck[/COLOR][COLOR=#000000]();[/COLOR]
      [COLOR=#008000]  // Receive header[/COLOR]
      [COLOR=#000000]  [/COLOR][COLOR=#af00db]for[/COLOR][COLOR=#000000] ([/COLOR][COLOR=#0000ff]int[/COLOR][COLOR=#000000] i [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#000000] [/COLOR][COLOR=#09885a]0[/COLOR][COLOR=#000000]; i [/COLOR][COLOR=#000000]<[/COLOR][COLOR=#000000] [/COLOR][COLOR=#09885a]6[/COLOR][COLOR=#000000]; i[/COLOR][COLOR=#000000]++[/COLOR][COLOR=#000000]) {[/COLOR]
      [COLOR=#000000]    [/COLOR][COLOR=#001080]_tg[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#795e26]setBufferByte[/COLOR][COLOR=#000000](i, [/COLOR][COLOR=#795e26]serialRead[/COLOR][COLOR=#000000]());[/COLOR]
      [COLOR=#000000]  }[/COLOR]
    Hat jemand eine Idee, wie man die Sache beschleunigen könnte, ohne in der Bibliothek rum zu murksen?

    Einen Kommentar schreiben:


  • MasterOfPuppets
    antwortet
    Hallo Zusammen,

    Ich versuche gerade verzweifelt eine LED zum leuchten zu bringen.
    Schreiben auf den Bus ist kein Problem, aber wenn der Arduino auf eine Gruppenadresse reagieren soll, stellt er sich taub.

    Hardware ist ein Arduino Pro Mini 3,3V und ein Siemens 117-2AB12 Busankoppler.
    FTDI Programmiergerät wurde nach dem flashen entfernt und der Arduino extern mit 3,3V versorgt.
    RX/TX sind auch gekreuzt auf dem dem Busankoppler angeschlossen.

    Hier mal mein Code:
    Code:
    #include <KnxTpUart.h>
    
    KnxTpUart knx(&Serial, "1.1.16");
    
    void setup() {
      pinMode(13, OUTPUT);
      digitalWrite(13, LOW);
      
      Serial.begin(19200, SERIAL_8E1);
      knx.uartReset();
    
      knx.addListenGroupAddress("1/1/0");
      knx.addListenGroupAddress("1/1/1");
      knx.addListenGroupAddress("1/1/2");
      knx.addListenGroupAddress("1/1/3");
      knx.addListenGroupAddress("1/1/4");
    }
    
    
    
    void loop() {
    
    
    
      }
    
    
    
    void serialEvent() {
      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());
    
        // 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 == "1/1/2") {
            int received_1_1_2 = telegram->getBool();
            if (received_1_1_2) {
             digitalWrite(13, HIGH);
            }
            else {
              digitalWrite(13, LOW);
            }
    }}}}
    Sende ich nun mit der ETS über den Gruppenmonitor 1/1/2 ab, tut sich nichts.
    Zuletzt geändert von MasterOfPuppets; 15.12.2019, 15:31.

    Einen Kommentar schreiben:


  • Hubiflieger
    antwortet
    Danke erstmal für den Tipp von Mag Gyver,
    hat leider nicht geholfen. Beide Varianten sollten nach meinem Verständnis dasselbe Ergebnis bringen. Die Loop Funktion dreht sich permanent, und serialEvent ist ein Listener, der auf ein eingehendes Ereignis wartet, was am Ende auch eine endlose Schleife ist.
    Ich habe mal mit den bescheidenen Mitteln versucht zu debuggen. Es wird nach dem Empfang diese Funktion gerufen, die auch abgearbeitet wird:
    Code:
    [COLOR=#0000ff]void[/COLOR][COLOR=#267f99]KnxTpUart[/COLOR][COLOR=#000000]::[/COLOR][COLOR=#795e26]sendAck[/COLOR][COLOR=#000000]() {[/COLOR]
    
    [COLOR=#000000]byte sendByte [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#000000] B00010001;[/COLOR]
    [COLOR=#001080]_serialport[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#795e26]write[/COLOR][COLOR=#000000](sendByte);[/COLOR]
    [COLOR=#795e26]delay[/COLOR][COLOR=#000000](SERIAL_WRITE_DELAY_MS);[/COLOR]
    [COLOR=#000000]}[/COLOR]
    Das sollte doch die Funktion sein, welche eine Bestätigung zurücksendet.
    Aber trotzdem sieht man am Busmonitor keine Bestätigung. Werde jetzt mal mit einem anderen Arduino testen. Wenn noch jemand einen Fehler sieht, oder eine Idee hat, dann gerne her damit.

    Grüße
    Andreas

    Einen Kommentar schreiben:


  • LostWolf
    antwortet
    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?

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    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

    Einen Kommentar schreiben:


  • Hubiflieger
    antwortet
    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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • jentz1986
    antwortet
    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ß.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • jentz1986
    antwortet
    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...

    Einen Kommentar schreiben:


  • tooooooobi
    antwortet
    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

    Einen Kommentar schreiben:


  • tooooooobi
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X