Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • Bonscha
    antwortet
    Ich meine, ich konnte auch senden und nicht empfangen... das liegt am Nano, an der Hardware...

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo NetFritz,

    zu deinem Problem.

    Wenn das Senden zum KNX funktioniert, dann bitte Post #747 beachten.
    Ansonsten ist irgendwo ein Fehler in der Hardware zu suchen.
    Der von dir gepostete Sketch funktioniert zumindest.

    Mit freundlichen Grüßen

    Mag Gyver

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    So beim drüberlesen fällt mir kein Fehler auf.
    Bist du sicher das die Buskommunikation funktioniert?
    Kannst du was auf den Bus senden? Das würde schonmal zeigen das zumindest irgendewas funktioniert...
    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Ich versuche schon eine Weile vom KNX-Bus zu lesen.
    Code:
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial1 port of Arduino Nano
    // and with KNX physical address 1.1.44
    KnxTpUart knx(&Serial, "1.1.44");
    
    int LED = 13;
    
    void setup() {
      pinMode(LED, OUTPUT);
      digitalWrite(LED, HIGH);
    
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000; // Even Parity
    
      knx.uartReset();
     
      knx.addListenGroupAddress("2/1/1");
    
    }
    
    void loop() {
      // nothing in the loop. This example is only to receive telegrams
    }
    
    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 == "2/1/1") {
            int received_2_1_1 = telegram->getBool();
    
            if (received_2_1_1) {
              digitalWrite(LED, HIGH);
            }
            else {
              digitalWrite(LED, LOW);
            }
          }
    
        }
      }
    }
    Da es für ein Nano ist habe ich alle Befehle für den seriellen Monitor rausgenommen.
    UCSR1C auf UCSR0C und KnxTpUart knx(&Serial1, auf KnxTpUart knx(&Serial, geändert.
    Ich kann aber keine Änderung an LED sehen wenn ich Adresse 2/1/1 schalte.
    ETS Gruppenmonitor zeigt die Änderung an 2/1/1 an

    Ist das das richtige Sketch zum Empfang oder ist in dem Sketch noch ein Fehler.

    Gruß NetFritz

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo

    So wollte ich das machen, habe es hier gefunden http://www.neurobs.com/wiki/Presenta...evices/Arduino
    Wertet High und Low aus.
    Der KNX Teil fehlt noch.
    Code:
    const int PIN = 2;
    int state = 0;
     
    void setup()                    
    {
      Serial.begin(115200);         
     
      pinMode(PIN, INPUT);
      state = bitRead( PIND , PIN );
    }
     
    void loop()                      
    {
      int new_state = bitRead( PIND , PIN );
      if (new_state != state)
      {
        state = new_state;
        if (state)
        {
          Serial.write( 1 );
        }
        else
        {
          Serial.write( 0 );
        }
      }
    }
    Gruß NetFritz

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Zitat von NetFritz Beitrag anzeigen
    Hallo

    Das beantwortet schon meine Frage.
    Mit Flankenerkennung meine ich z.B. einen Binäreingang der nur Periodisch seinen Wert ändert.
    Dann muss der alte Zustand bei jeden loop() durchlauf mit abgefragt werden.
    Gruß NetFritz


    Na du legst dir eine globale Variable an die den aktuellen und letzten Zustand hält. Und in jedem Schleifendurchlauf bringst du die aktuelle Variable auf den neusten Stand und vergleichst mit dem Wert der variablen des letzten Zustands. Gibt es eine Änderung, schiebst du das über den Bus und merkst dir anschließen in der "letzten Zustand" Variablen den aktuellen Zustand für den nächsten Schleifendurchlauf.

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Das sendet dir mit jedem Durchlauf von loop() ein neues Telegramm mit dem Wert "true" auf 2/1/1
    Das beantwortet schon meine Frage.
    Mit Flankenerkennung meine ich z.B. einen Binäreingang der nur Periodisch seinen Wert ändert.
    Dann muss der alte Zustand bei jeden loop() durchlauf mit abgefragt werden.
    Gruß NetFritz

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Auch wenn in void loop() jedes mal knx.groupWriteBool("2/1/1", true); durchlaufen wird.
    Das sendet dir mit jedem Durchlauf von loop() ein neues Telegramm mit dem Wert "true" auf 2/1/1 ...

    Muss ich die Flankenerkennung im Sketch selbst programmieren
    Um welche Flanke geht's denn? zu 90% wird die Antwort aber JA lauten.

    oder wird der KNX Befehl nur einmal gesendet?
    Er wird so oft gesendet wie du ihn sendest.

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Muss ich die Flankenerkennung im Sketch selbst programmieren oder wird der KNX Befehl nur einmal gesendet?
    Auch wenn in void loop() jedes mal knx.groupWriteBool("2/1/1", true); durchlaufen wird.
    Gruß NetFritz

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Vielen Dank.
    Es läuft jetzt, genial.
    Bei der Siemens 5WG1 114-2AB02 konnte man eine Adresse vergeben und diese auch Programmieren.
    Deshalb komme ich darauf.
    Gruß NetFritz

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Der BTM hat keine programmiertaste ... Der ist nur "die dumme KNX Schnittstelle". Du musst der Applikation, die du an den BCU dran hängst eine Adresse geben.

    Im Sketch gibtst du die Adresse an die dein Arduino dann haben soll.

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo ist da
    So der Siemens 5WG1117-2AB12 ist da.
    Produktdatenbank knx.117.knxprod runter geladen in ETS 4 importiert.
    In der ETS der Linie1.1 hinzugefügt, dann hat der BTM die Adresse 1.1.-
    Kann man den BTM keine Adresse vergeben?
    Wenn Ja was für eine Adresse stelle ich dann im Sketch unter
    Code:
      
     KnxTpUart knx(&Serial, "15.15.20"); ein.
    Gruß NetFritz ein.

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Habe mal die vorhandenen Komponenten zusammengesucht.
    Arduino Nano 3.0
    Siemens 5WG1 114-2AB02
    Diesen Busankoppler habe ich vor über 10Jahren für die Programmierung ETS2 und und den Buszugriff benutzt.
    Der Busankoppler kann mit Hilfe eine Wiederstandes 11 kOhm = PEI-16 (ETS) oder 45.3 kOhm = PEI-10 (FT1.2) an +5V umgeschaltet werden.
    Hier der Busankoppler mit der Beschaltung http://www.dehof.de/eib/pdfs/BIM_Schaltplan.pdf Seite3
    Da der Busankoppler auch RTS und CTS hat, kann ich nicht sagen ober er überhaupt geeignet ist.
    Ich bekomme mit Ihm keine Verbindung zu KNX-Bus.
    Code:
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial an Physikalische Adresse der BCU
    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);
      delay (5000);
     knx.groupWriteBool("2/1/1", false);
      delay (5000);  hole
    }
    Die LED auf den Arduino blink im 5sec. Tackt, aber auf der ETS ist nichts zu sehen.
    RX und TX habe ich über Kreuz verbunden.
    Werde mal schauen das ich mir den Siemens 5WG1117-2AB12 hole.
    Den Arduino Nano programmiere ich mit abgezogener BCU.
    Vielleicht hat ja jemand einen Tip für mich.
    Gruß NetFritz

    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Hallo Mag Gyver,

    danke für die Ausführungen, ist jetzt schon etwas klarer, meine Beleuchtungssteuerung läuft ja auch soweit.

    Wahrscheinlich muß ich mir das mal irgendwo aufschreiben


    Jens

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo intelligente Haustechnik,

    der Sketch vom Post #750 ist in Ordnung.

    Zu deinem Problem:


    Code:
    KNX_COMMAND_ANSWER
    Beim Starten der Anwendung kennt man die Zustände bzw. Werte der Gruppenadressen nicht.
    Deshalb kann man mit dem Befehl
    Code:
    knx.groupRead("10/0/0");
    eine Leseanfrage starten, die Auswertung erfolgt über die
    Funktion.
    Code:
    if (telegram->getCommand() == KNX_COMMAND_ANSWER) {
    (Leseanfrage(n) -> KNX -- KNX -> Antwort(en))


    Code:
    KNX_COMMAND_WRITE
    Code:
    if (telegram->getCommand() == KNX_COMMAND_WRITE) {
    Dies ist dazu da um Werte oder Befehle, die von anderen Teilnehmern kommen, auszuwerten oder auszuführen.
    (Wert(e)/Befehl(e) <- KNX)


    Code:
    KNX_COMMAND_READ
    Code:
    if (telegram->getCommand() == KNX_COMMAND_READ) {
    Dies ist dazu da, um auszuwerten ob ein anderer Teilnehmer von deiner Anwendung Werte haben möchte.
    (Leseanfrage(n) <- KNX)


    Die Funktionen im Post #754 von Haka funktionieren, nur das mit dem mehrmaligen senden ist nicht in Ordnung.
    Kann aber auch an der Library APA102 liegen, die greift auch wie die Library TP-UART auf den RAM des (ATmega) Arduino zu.


    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 16.01.2016, 12:33.

    Einen Kommentar schreiben:

Lädt...
X