Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

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

    Jens

    Einen Kommentar schreiben:


  • Bonscha
    antwortet
    Wie sendest du denn das Telegramm?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Ja natürlich, manchmal ist man Blind.
    Jetzt geht es.
    Danke NetFritz

    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Muß das beim Mega nicht:

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

    Jens

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Zitat von ThorstenGehrig Beitrag anzeigen
    Von welcher "alten" Library redest du - und was hat die KNX Library mit 1-Wire sensoren zu tun?
    Mit "alte Lib" meine ich die mehr oder weniger modifizierte Lib von DKA (https://bitbucket.org/dka/arduino-tpuart) die Du (Thorsten) verwendet hattest und mit der man recht schnell zum Ergebnis kommt.

    Dann gibt es noch eine andere (umfangreichere) Library von Franck Marini (https://github.com/franckmarini/KnxDevice). Diese Arbeit scheint auch die Grundlage für "KONNEKTING" zu sein.

    Die "alte Lib" hat per se nichts mit Onewire zu tun. Ich habe nur die Onewire Library genutzt um Sensoren (DS18B20) auszulesen. Nur kommen sich die beiden Bibliotheken in die Quere. Bisher hatte ich keine Lust gehabt auf die Lib von Franck Marini umzusteigen weil ich dazu eigentlich fast alles hätte neu schreiben müssen was hier intern läuft. Insofern warte ich natürlich jetzt auf "KONNEKTING" um diesen Schritt zu gehen und das ganze zu optimieren.

    Für meine derzeitige Platine könnte ich auch einen I2C - Onewire Interface Chip auf die Platine setzten um kritische Timings zu umgehen. Aber das wäre wohl eher etwas für einen anderen Thread. Es war ja nur die Frage nach Bildern und was man wirklich damit realisiert hat. An anderer Stelle funktioniert ein ähnlicher Aufbau schon seit Januar letzten Jahres produktiv mit 6 DS18B20 Temperaturfühlern die artig die Meßwerte auf den Bus senden.

    Gruß,
    Bernd
    KnxDevice - Allow to turn your Arduino into a self-made KNX device using the hardware TPUART interface

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    ozett und bmx

    Es gibt weder eine "alte" noch "neue" Lib für KNX auf dem Arduino.

    Es gibt die von DKA (https://bitbucket.org/dka/arduino-tpuart) abstammende "arduino tpuart" Lib die Thorsten hier initiell verwendet und erweitert hat (https://bitbucket.org/thorstengehrig...knx-user-forum).

    Dann gibt's den versuch die Lib etwas aufzubohren und sparsamer zu machen (umbau der GA von Strings nach byte[]). Dieser Versuch nannte sich zuletzt "Karduino" (https://github.com/KARDUINO/KnxTpUart-DEPRECATED-). Wurde aber eingestellt weil:

    * Die DKA Lib von der Basis her zu wenig Struktur aufweist um hier vernünftig zu erweitern
    * Bei der einen oder anderen Erweiterung wohl Timing-Probleme hat (aufgefallen beim Versuch property-read/write nachzurüsten)

    Die von euch "neue Lib" genannte Lib ist nicht neu. Es ist eine bestehende Lib die zum einen Erweitert und zum anderen hier und da "verbessert" wurde. Mit ihr wird es möglich sein Arduino KNX Geräte über den Bus mit Physikalischer Adresse, Gruppenadressen und Parametern zu versehen. Allerdings nicht nach dem Vorbild ETS.

    Die erweiterte und verbesserte Lib und die damit verbundene HW und SW Entwicklung läuft unter dem Namen "KONNEKTING". Also bitte versuchen das Kind beim Namen zu nennen und nix durcheinander zu werfen.

    Mehr Details zu KONNEKTING in den entsprechenden Threads hier im DIY Bereich, sowie bald nochmal separat in einem offiziellen Vorstellungsthread, wenn HW und SW soweit sind dass man euch drauf loslassen kann.

    Gruß
    Alex

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Was sonst noch geht? ALLES was mit einem Arduino geht! (und irgendwie Sinn macht).
    Zum beispiel "seecret knock detector" => http://www.instructables.com/id/Secr...ing-Door-Lock/
    oder wetterstation oder VOC sensor oder LCD Display odder RFID-Reader oder ... oder ... einfach alles was mit einem Arduino geht.
    Mit sowas könnte man sich ein 8-fach binärausgang bauen: link

    Viel Erfolg.

    Einen Kommentar schreiben:


  • ozett
    antwortet
    Zitat von bmx Beitrag anzeigen
    Moin ozett,
    ich habe mal am Wochenende einen Arduino mit OneWire Anschluss an die Siemens Schnittstelle gebracht.
    danke erstmal.
    verbuche 7x onewire, was geht denn noch so..?

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Von welcher "alten" Library redest du - und was hat die KNX Library mit 1-Wire sensoren zu tun?

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Moin ozett,

    ich habe mal am Wochenende einen Arduino mit OneWire Anschluss an die Siemens Schnittstelle gebracht. Die Library ist die bekannte "alte" Library mit einigen Problemen. Bei mir äußert sich das so, das ich 7 OneWire Sensoren ohne Probleme mit Bitbanging abfragen kann. Leider geht es ab 8 Sensoren daran unzuverlässig zu werden und es hagelt falsche Werte und CRC. Die Fehlererkennung müßte da etwas robuster sein. Für jetzt reicht das so.

    Bei Gelegenheit werde ich da sicher mit der neuen Lib die kurz vor der Beta steht was zu machen.

    So ist halt nur als Demo zu sehen, was man so machen kann.

    Gruß,
    Bernd
    You do not have permission to view this gallery.
    This gallery has 6 photos.

    Einen Kommentar schreiben:


  • ozett
    antwortet
    hallo zusammen,
    super projekt hier.

    gibts eigentlich bilder + beispiele wie die kombination arduino+knx eingesetzt wird?
    das würde ich gerne mal sehen. ...

    (ansonsten habe ich zuletzt hier mal geschaut, vielleicht ist das ja für den einen oder anderen interessant?
    http://www.esp8266.nu/ ESP8266 firmware, mehr im wiki dort)

    für bilder, links, beispiele, etc ganz herzlichen dank,
    ozett

    Einen Kommentar schreiben:


  • Eugenius
    antwortet
    Jap, Mega ist perfekt dafür

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Ja das senden geht nur nicht das empfangen nicht.
    Welchen Arduino könnt ihr dann empfehlen.
    Platzprobleme habe ich keine, sollte dann 2 serielle Schnittstellen haben,
    das ich USB und seriell zur gleichen Zeit nutzen kann.
    Die D0-D13 sollten auch 5Volt vertragen, dann muss ich nichts umbauen.
    Gruß NetFritz

    PS Ist der Mega wohl der richtige?
    Zuletzt geändert von NetFritz; 07.02.2016, 11:11.

    Einen Kommentar schreiben:

Lädt...
X