Ankündigung
Einklappen
Keine Ankündigung bisher.
ARDUINO am KNX
Einklappen
X
-
Ich meine, ich konnte auch senden und nicht empfangen... das liegt am Nano, an der Hardware...
-
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:
-
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:
-
Hallo
Ich versuche schon eine Weile vom KNX-Bus zu lesen.
Da es für ein Nano ist habe ich alle Befehle für den seriellen Monitor rausgenommen.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); } } } } }
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:
-
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.
Gruß NetFritzCode: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 ); } } }
Einen Kommentar schreiben:
-
Zitat von NetFritz Beitrag anzeigenHallo
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:
-
Hallo
Das beantwortet schon meine Frage.Das sendet dir mit jedem Durchlauf von loop() ein neues Telegramm mit dem Wert "true" auf 2/1/1
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:
-
Das sendet dir mit jedem Durchlauf von loop() ein neues Telegramm mit dem Wert "true" auf 2/1/1 ...Auch wenn in void loop() jedes mal knx.groupWriteBool("2/1/1", true); durchlaufen wird.
Um welche Flanke geht's denn? zu 90% wird die Antwort aber JA lauten.Muss ich die Flankenerkennung im Sketch selbst programmieren
Er wird so oft gesendet wie du ihn sendest.oder wird der KNX Befehl nur einmal gesendet?
Einen Kommentar schreiben:
-
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:
-
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:
-
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:
-
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
Gruß NetFritz ein.Code:KnxTpUart knx(&Serial, "15.15.20"); ein.
Einen Kommentar schreiben:
-
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.
Die LED auf den Arduino blink im 5sec. Tackt, aber auf der ETS ist nichts zu sehen.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 }
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:
-
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:
-
Hallo intelligente Haustechnik,
der Sketch vom Post #750 ist in Ordnung.
Zu deinem Problem:
Beim Starten der Anwendung kennt man die Zustände bzw. Werte der Gruppenadressen nicht.Code:KNX_COMMAND_ANSWER
Deshalb kann man mit dem Befehleine Leseanfrage starten, die Auswertung erfolgt über dieCode:knx.groupRead("10/0/0");
Funktion.(Leseanfrage(n) -> KNX -- KNX -> Antwort(en))Code:if (telegram->getCommand() == KNX_COMMAND_ANSWER) {
Code:KNX_COMMAND_WRITE
Dies ist dazu da um Werte oder Befehle, die von anderen Teilnehmern kommen, auszuwerten oder auszuführen.Code:if (telegram->getCommand() == KNX_COMMAND_WRITE) {
(Wert(e)/Befehl(e) <- KNX)
Code:KNX_COMMAND_READ
Dies ist dazu da, um auszuwerten ob ein anderer Teilnehmer von deiner Anwendung Werte haben möchte.Code:if (telegram->getCommand() == KNX_COMMAND_READ) {
(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 GyverZuletzt geändert von Mag Gyver; 16.01.2016, 12:33.
Einen Kommentar schreiben:


Einen Kommentar schreiben: