Hi
hier auchnochmal für alle: meine KNX-Lib hatte die funktionen
groupWrite2ByteInt und groupAnswer2ByteInt nicht richtig implementiert (die groupAnswer2ByteFloat haben aber gepasst).
Ich habe die Lib gerade aktualisiert: https://bitbucket.org/thorstengehrig...forum/overview
Für die maintainer der Forks: bitte übernehmen (wenn nicht schon geschehen)
Gruß
Thorsten
Ankündigung
Einklappen
Keine Ankündigung bisher.
ARDUINO am KNX
Einklappen
X
-
Hallo Bonscha,
muss mir das mit dem Nano erst genauer anschauen.
Habe nur einen flüchtigen Blick in den Schaltplan des NANO geworfen.
An der Hardware habe ich noch nichts getestet.
Trennen ist zu endgültig, dann sind ja die Vorteile der USB-Programmierung komplett weg.
Vielleicht ergibt sich ja eine bessere Alternative, das Datenblatt des FTDI wird vielleicht Auskunft geben.
Mit freundlichen Grüßen
Mag Gyver
Einen Kommentar schreiben:
-
Hallo Mag Gyver, vielen Dank für deine Mühe. Ich habe endlich einen ATMega zum Testen und mache mich dann mal ran. Was müsste ich am Nano denn ändern, damit das läuft? Einfach die Pins vom FTDI, die an RxD und TxD gehen, trennen?
Einen Kommentar schreiben:
-
Hallo Bonscha,
dein Code funktioniert. Leider ist dieser etwas unvorteilhaft geschrieben. Hier mal ein Beispielcode für UNO:
Code:#include <KnxTpUart.h> KnxTpUart knx(&Serial, "1.1.199"); int LED = 13; boolean target_15_0_0; void setup() { pinMode(LED, OUTPUT); // Setting up status LED Serial.begin(19200); UCSR0C = UCSR0C | B00100000; // Even Parity knx.uartReset(); knx.addListenGroupAddress("15/0/0"); } void loop() { } void serialEvent() { //Get Serial Event KnxTpUartSerialEventType eType = knx.serialEvent(); //Check Serial Event 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()); // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable target if (telegram->getCommand() == KNX_COMMAND_WRITE) { // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion if (target == "15/0/0") { target_15_0_0 = telegram->getBool(); if (target_15_0_0) { digitalWrite(LED, HIGH); } else { digitalWrite(LED,LOW); } } } } }
Der Empfang funktioniert auch, auf dem UNO und MEGA.
DER GND TP-UART mit dem GND des Arduino zu verbinden (Ausnahme -> Optokoppler)
Beim UNO "void serialEvent()" sollte folgendes gemacht werden:- (Nicht bei Erstprogrammierung, da gibt es keine Brücke zum entfernen) Die Brücke am (ICSP1 Pin 5 mit ICSP1 Pin 6) entfernen
- (Nicht bei Erstprogrammierung, nicht notwendig der ATmega 16u2 ist nicht im Programmiermodus) Den USB-Stecker ausstecken und wieder einstecken (Zwischen dem Ein- und Ausstecken ein bisschen Zeit vergehen lassen)
- Programmieren des UNO ohne angesteckten TP-UART (RxD,TxD).
- Nachdem Programmieren eine Brücke zwischen ICSP1 Pin 5 und ICSP1 Pin 6 herstellen
- Den TP-UART (RxD,TxD) (wieder)anschließen
- Resettaster am Arduino kurz drücken
- Programmieren über USB "Serial"
- TP-UART (RxD,TxD) an "Serial1" anschliessen
Dies könnte mit hoher Wahrscheinlichkeit das Problem sein.
Keine Möglichkeit den FTDI abzuschalten, kann wahrscheinlich nur durch eine Hardwareeingriff gelöst werden.
Aber danach kann man den NANO nicht mehr per USB programmieren nur noch über ISP.
Mit freundlichen Grüßen
Mag GyverZuletzt geändert von Mag Gyver; 15.11.2015, 08:02.
Einen Kommentar schreiben:
-
Wow, schon 50 Seiten. Nun ja, auf zu den nächsten 50.
Und damit wir da bald hinzukommen, hier eine neue tolle Erkenntnis:
Ich hab ja schon in einem anderen Thread vom Espressif ESP8266 berichtet. Das Ding hat 4MB Speicher und viele Mhz "Rechenleistung" (hab von 80Mhz gelesen?).
Und da sich der ESP auch mit der Arduino IDE programmieren lässt, wäre es theoretisch möglich, den KnxStack mit dem ESP zu nutzen oder zur Not ohne viel Aufwand zu portieren.
Kleiner Vergleich AVR Arduino zu ESP8266:Arduino Micro ESP8266, als "NodeMCU DevKit" RAM 2.5k 32k + 80k (was die +80k bedeuten weiß ich noch nicht genau) Flash 32k (davon 8k für den Bootloader) 4MB Eeprom 1k keinen, dafür aber 4MB benutzbaren Flash CPU 16Mhz 80Mhz (??) WLAN nein ja Straßenpreis (günstigstenfalls) ab 8..9EUR bei ebay, aliexpress: ähnlich rund 8EUR bei ebay, über z.B. aliexpress für knapp 4EUR
Vielleicht traut sich ja jemand ran damit KNX auszuprobieren (komm grad selbst nicht dazu).
Hier noch ein paar Links:
http://www.voti.nl/blog/?p=52
http://neilkolban.com/tech/esp8266/
http://www.espressif.com
http://www.nodemcu.org
Einen Kommentar schreiben:
-
Hallo Zusammen,
ich sehe das Ihr hier auch schon einiges geschafft habt. Ich arbeite auch mit KNX und Arduino.
Würde mich freuen wenn Ihr mal in meinen Forum-Eintrag vorbeischaut.
https://knx-user-forum.de/forum/%C3%...y-monitor-oder
Vielleicht ergeben sich daraus noch Synergien :-)
MFG Mat
You do not have permission to view this gallery.
This gallery has 2 photos.
Einen Kommentar schreiben:
-
So ein Teil wäre wirklich mal was... Ansonsten hier evtl. eine schnellere Alternative: http://www.amazon.de/SainSmart-Logik...logic+analyzer
Na zumindest finde ich es gut zu wissen, dass am Code nichts falsch zu sein scheint. RX habe ich an TX angeschlossen und umgekehrt. Wie gesagt, Senden geht ja.
Ich werde mal ein wenig rumprobieren, vielleicht bekomme ich den Mega2560 ja wieder hin.
Einen Kommentar schreiben:
-
Das hier bestellen: http://www.ebay.de/itm/24MHz-8CH-USB...8AAOSwyQtV6XEJ, vier Wochen warten (wg. China-Versand), nachschauen statt spekulieren.
Wer ein schlechtes Gewissen hat, nimmt das hier: http://elmicro.com/de/saleae-logic.html (Logic 4 oder Logic 8). Ist das gleiche, aber vom Original-Hersteller.
Oder Oszilloskop organisieren.
Max
Einen Kommentar schreiben:
-
Das Problem hatte ich auch. Hab es aber mangels Zeit nicht nachverfolgt. Mein Sketch läuft auf einem Mega einwandfrei.Zitat von Bonscha Beitrag anzeigenIch kann ja auch auf den Bus senden, nur der Empfang klappt nicht. Der Nano hat nur die "Serial".
Einen Kommentar schreiben:
-
Bist du dir sicher dass die RX-Leitung zum BCU korrekt angeschlossen ist?
Ich würde trotzdem mal den PC statt den BCU dran hängen. Nur um sicher zu gehen dass die RX-Seite funktioniert.
Einen Kommentar schreiben:
-
Bist du sicher dass "serialEvent()" korrekt ist? Je nach Arduino und Schnittstelle kann es auch "serialEvent1()" sein ... Wobei, dann müsstest du ja auch "Serial1" initialisieren, und nicht "Serial" ...
Würde an deiner Stelle erstmal prüfen ob die Serielle Schnittstelle sauber funktioniert. D.h. statt den BCU mal den Rechner dran hängen und mit dem Rechner daten schicken. Wenn das mit einer BCU Kompatiblen Baud-Rate funktioniert, kannst du wieder auf den BCU umschwenken.
Einen Kommentar schreiben:
-
Besitze zwar zwei ATMega2560, leider aber einer zerschossen und der andere nicht programmierbar.
Mein aktueller Code (Karduino-Library, läuft ansonsten auch) soll die LED anschmeißen, sobald SerialEvent getriggert wird:
Natürlich tut sich einfach nichts... Und da diese Funktion nicht mal aufgerufen zu werden scheint, benötige ich vermutlich auch keinen tiefergehenden Debug-Code?Code:#include <Arduino.h> #include <EEPROM.h> // für den KNX Zugriff #include <KnxTelegram.h> #include <KnxTpUart.h> #include <KnxDevice.h> KnxTpUart knx(&Serial, PA_INTEGER(1, 1, 199)); int LED = 6; void setup() { pinMode(LED, OUTPUT); // Setting up status LED Serial.begin(19200); UCSR0C = UCSR0C | B00100000; // Even Parity knx.uartReset(); knx.setListenToBroadcasts(true); knx.addListenGroupAddress(GA_INTEGER(15, 0, 0)); } void loop() { } void serialEvent() { digitalWrite(LED, HIGH); //Get Serial Event KnxTpUartSerialEventType eType = knx.serialEvent(); //Check Serial Event 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()); // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable target if (telegram->getCommand() == KNX_COMMAND_WRITE) { // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion if (target == "15/0/0") { } } } }
Einen Kommentar schreiben:
-
Mit dem Empfangen von Telegrammen (serialEvent) hatten schon einige probleme hier im Thread beschrieben. Bau dir mal ein bisschen debug-code ein wo du Landest mit den empfangenen programmen...
Einen Kommentar schreiben:


Einen Kommentar schreiben: