Den Pro Mini direkt am Busankoppler ohne externe Spannungsversorgung?
Dann liegts definitiv am Code.
Ankündigung
Einklappen
Keine Ankündigung bisher.
ARDUINO am KNX
Einklappen
X
-
auch noch mit einem Pro Mini probiert! Das gibts doch nicht, das ich nix empfangen kann....
Einen Kommentar schreiben:
-
So, getestet mit dem originalen Mega 2506: gleiches Problem: funken geht, empfangen nicht.... zum k....Der Mega2560 sollte das Problem eigentlich nicht haben, da der verwendete Port nicht doppelt belegt ist. Das liegt ziemlich sicher am Code oder dem nachfolgenden aber:
Einen Kommentar schreiben:
-
Da gibts wieder die Unterscheidung ob Original oder Nachbau, also genaues Schaltbild...wenn es das Original mit dem 32U4 ist, sollte der RX/TX Port nicht blockiert sein.Zitat von pio007 Beitrag anzeigenHab hier noch einige Pro MICRO rumliegen. Hab die das Problem auch, weißt Du das zufällig?
Einen Kommentar schreiben:
-
Sorry überlesen...Habe ich doch oben erläutert.
Werde mal alle Varianten probieren: Mega, auslöten und pro Mini.
Hab hier noch einige Pro MICRO rumliegen. Hab die das Problem auch, weißt Du das zufällig?
Danke und Grüße
Marc
Einen Kommentar schreiben:
-
Habe ich doch oben erläutert.Zitat von pio007 Beitrag anzeigenWas wäre der "Hardwareeingriff"
Der Mega2560 sollte das Problem eigentlich nicht haben, da der verwendete Port nicht doppelt belegt ist. Das liegt ziemlich sicher am Code oder dem nachfolgenden aber:
ABER:
Ihr denkt hoffentlich daran, dass da eine galvanische Trennung der seriellen Schnittstelle zum Busankoppler notwendig ist, wenn das Arduino-Board extern mit Energie versorgt wird (was beim Nano und Mega notwendig sein dürfte)? Ansonsten zieht Ihr den ganzen KNX-Bus einseitig auf das GND-Potential der USB-Schnittstelle bzw. des Netzteils, was a) nicht zulässig ist und b) schöne Effekte mit Masseschleifen gibt, die ebenfalls die Kommunikation beeinträchtigen kann.
Suchwort: ADUM1201
Einen Kommentar schreiben:
-
Mit dem nano hatte ich auch gelesen. Hatte vorher Nachbau, deswegen extra einen Originalen gekauft....
Wie sieht es beim Mega 2506 aus?
Was wäre der "Hardwareeingriff"? Habe mir bereits eine Platine erstellt, welche auf den Nano ausgelegt ist...
Vielen Dank und Grüße Marc
Einen Kommentar schreiben:
-
Das Problem ist der Nano. Da sind intern die RX/TX-Pins des Atmega mit dem FTDI verbunden. Senden über KNX geht weil der FTDI nur lauscht, Empfangen nur mit Hardwareeingriff*, da der FTDI den RX am Atmega blockt.Zitat von pio007 Beitrag anzeigenBin auch ratlos.... Original Arduino nano
Wenn Du statt dem Nano einen Pro Mini (mit externem FTDI zum Programmieren) verwendest, wird es funktionieren.
*) Wenn Du den Widerstand RP1A (1k) entfernst, ist das Blockieren aufgehoben, allerdings auch keine Programmierung mehr möglich.Zuletzt geändert von dreamy1; 06.12.2023, 23:36.
Einen Kommentar schreiben:
-
Ich schalte mich mal hier mit ein. Bei mir gleiches Problem. Habe ein Skript laufen, welches problemlos vom Arduino Daten auf den Bus schreibt. Also Kommunikation klappt einwandfrei.
Möchte aber auch das ganze umgekehrt.#
Habe das Beispielskript etwas angepasst (siehe unten) aber bekomme einfach keine Verbindung vom Bus /ETS zum Arduino. Es sollte eigentlich bei Adress 3/4/152 die eingebaute LED angehen, aber nix....
Bin auch ratlos.... Original Arduino nano
Code:include <KnxTpUart.h> KnxTpUart knx(&Serial, "1.1.38"); int target_3_4_152; int target_3_4_151; void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(19200, SERIAL_8E1); knx.uartReset(); knx.addListenGroupAddress("3/4/152"); knx.addListenGroupAddress("3/4/151"); delay(1000); knx.groupRead("3/4/152"); knx.groupRead("3/4/151"); } void loop() { } void serialEvent() { 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 (telegram->getCommand() == KNX_COMMAND_ANSWER) { if (target == "3/4/152") { target_3_4_152 = telegram->getBool(); if (target_3_4_152) { digitalWrite(LED_BUILTIN, HIGH); } else { digitalWrite(LED_BUILTIN,LOW); } } else if (target == "3/4/151") { target_3_4_151 = telegram->get1ByteIntValue(); }}}}
Einen Kommentar schreiben:
-
Vergiss was ich zu dem Strings gesagt hab, ich war gedanklich bei einer anderen Art von Strings. Nicht besonders performant ist das ganze so dennoch, daher bietet es sich an die Werte als Zahlen zu vergleichen, also im Prinzip sowas wie
Wenn du dir den Speicherverbrauch der beiden Versionen anschaust und mal vergleichst siehst du was ich meineHTML-Code:if(getTargetMainGroup() == NITRAT_MAINGROUP && getTarget.....
Bei einem Mega vielleicht nicht unbedingt ein Problem, aber lieber gleich richtig lernen als später überall die riesen Arduino Mega verbauen zu müssen weil der Code so riesig wird. Die library ist da zugegeben etwas blöd geschrieben, die Version die ich nutze habe ich mal so verändert, dass sie gar keine Strings mehr nutzt.
Bist du dir sicher, dass die group address oben beim define mit Punkten getrennt werden muss? Versuch es doch mal mit Schrägstrichen.
Einen Kommentar schreiben:
-
Danke schonmal für deine Antwort Flole.
Was genau meinst du damit, dass ich Strings auf eine Art und Weise vergleiche, wie man es nicht kann?
Den Teil mit den Strings (Main/Middle/Sub Group) braucht man angeblich immer genau so für das Auslesen von Telegrammen. So steht es in der Bibliothek und ich habe es auch bei zahlreichen anderen Usern im Internet genau so 1:1 gesehen.
Ich hatte schon mehrere Serial.prints zum debuggen eingebaut, jedoch ist generell nie etwas angekommen. Ich hatte z.B. folgende Zeile eingebaut:
Ich habe trotzdem in der IDE nichts zurück bekommen, wenn ich im KNX System einen Wert auf der besagten Gruppenadresse geschrieben habe. Daher schien es mir eher ein grundlegendes Problem bei der Kommunikation zu sein, weshalb ich mich an euch hier im Forum gewendet habe....Code:void maintainKnxSerial() { if (Serial1.available() > 0) { Serial.print("Serial available"); // Rest des Codes
Einen Kommentar schreiben:
-
Zum einen vergleichst du Strings auf eine Art und Weise wie man keine Strings vergleichen kann, und zum anderen kannst du mit mehr Ausgaben den Fehler auch selber finden, du schaust dadurch einfach wie weit du im Code kommst. Also kommt was an der seriellen Schnittstelle an? Ist es das erwartete Telegram/Command? Wenn nicht, was ist es dann?
Noch ein Tipp aus der Praxis: Versuch auf Strings zu verzichten wo es geht. Insbesondere wenn du eigentlich Zahlen vergleichen willst.
Einen Kommentar schreiben:
-
Hallo zusammen,
Ich versuche mich gerade daran, einen Arduino (Mega) in ein KNX System zu integrieren.
Daten vom Arduino ins KNX System zu senden habe ich bereits hinbekommen, die Hardware Verbindung scheint also in Ordnung zu sein.
Probleme macht mir aktuell nur das Empfangen/Auswerten/Weiterverarbeiten von Daten vom KNX System auf dem Arduino.
Ich würde gerne Daten von bestimmten Gruppenadressen auf dem Arduino als Variablen abspeichern bzw. diese für weitere Logiken nutzen. Eigentlich habe ich den Code für das Empfangen/Weiterverarbeiten der Daten aus der verwendeten Bibliothek (gefühlt) korrekt implementiert, da diverse andere User im Internet es genauso gemacht haben, allerdings bekomme ich die Daten trotzdem nicht mit dem Arduino ausgelesen.
Das ganze soll später noch deutlich komplexer werden, da ich aktuell aber das Empfangen/Weiterverarbeiten noch nicht korrekt hinbekomme, hier erstmal mein aktueller einfacher Beispielcode:
Code:#include <KnxTpUart.h> #define Physical_Adress "1.1.25" #define Nitrat_Group_Adress "1.1.21" KnxTpUart knx(&Serial1, Physical_Adress); void setup() { Serial.begin(9600); Serial1.begin(19200, SERIAL_8E1); knx.uartReset(); knx.addListenGroupAddress(Nitrat_Group_Adress); // Nitrat Gruppenadresse } float Nitrat_Value = 0; void Nitrat_Value_Evaluation () { if (Nitrat_Value > 0) Serial.print("Wert Empfangen"); } void loop() { maintainKnxSerial(); Nitrat_Value_Evaluation(); } void maintainKnxSerial() { if (Serial1.available() > 0) { KnxTpUartSerialEventType eType = knx.serialEvent(); if (eType == KNX_TELEGRAM) { KnxTelegram* telegram = knx.getReceivedTelegram(); // Create the KNX String Address in the "0/0/0" format String target = String(0 + telegram->getTargetMainGroup()) + "/" + String(0 + telegram->getTargetMiddleGroup()) + "/" + String(0 + telegram->getTargetSubGroup()); // Check what has been sent on KNX and write it into variables/arrays if (telegram->getCommand() == KNX_COMMAND_WRITE) { if (target == Nitrat_Group_Adress) { Nitrat_Value = telegram->get2ByteFloatValue(); } } } } }
Wenn ich dann im KNX System einen Wert auf der Gruppenadresse für den Nitrat-Wert schreibe, tut sich jedoch nichts und ich bin ratlos, wo der Fehler liegt.
Über jede Hilfe wäre ich sehr dankbar!
Grüße, Sebastian
Zuletzt geändert von seba1997; 06.12.2023, 12:46.
Einen Kommentar schreiben:
-
Was für einen Arduino nutzt du? Hast du die Optimierung schon auf höchste Geschwindigkeit gestellt?
Eventuell kann man mit Interrupts das ganze noch verbessern.
Einen Kommentar schreiben:


Einen Kommentar schreiben: