Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ok, wenn niemand antwortet, muss ich das selber tun 😉
Mein Problem war, dass Uno und Nano beide ihr USB auf den RX/TX pins haben. Der USB chip hat offensichtlich soviel vom Eingangssignal "weggefressen", dass es nicht mehr für die Signalerkennung ausreichte. Ich hatte das dann mit dem Oszi auch gemessen, da blieben nur noch knapp 3 Volt übrig, von den 4.5V, die das TPUART liefert. Jetzt habe ich zwei Inverter eines 7404 TTL chips vor den RX input gehängt, und jetzt geht es. Das ist nicht wirklich eine praktikable Lösung, aber fixt das Problem. Die Lösung sind hoffentlich die Arduino Pro Minis, die demnächst kommen ...
Hey,
ich bin aktuell auch dabei mich mit dem Thema zu beschäftigen. Senden auf den Bus klappt, jedoch das Empfangen nicht.
Ich hab einen Arduino Nano (5V), bei hm geht die RX LED an, jedoch anwtortet er nicht auf die Telegrame.
Aus deinem Post oben und dem von Mag Gyver heißt es, dass der Arduino Nano von "Natur" aus nicht auf Leseanfragen antworten kann, da der USB-Chip dies verhindert?
Und ma kann dies lösen indem man entweder einen 7404TTL vor dem RX hängt oder den CH340 auslötet und dann mit Hilfe eines USB-zu-TTL Konverter Moduls den Arduino beschreibt?
Ein einfaches Ja reicht mir
Hallo alle miteinander, habe wiedermal ein kleines problemchen. habe seit etlichen monaten die Siemens BCU mit ProMini und nem DHT22 am laufen und wollte nun endlich die geschichte in ein gehäuse basteln. Aus Platzmangel habe ich den Busankoppler zerlegt und wollte den Connector ablöten und habe dabei den TX zerstört :-(.
Hat jemand einen Schaltplan davon oder weiß jemand an welcher stelle ich TX abgleifen kann.
edit 2:
Noch eine Frage wenn ich einmal da bin und im thema stecke. Ich habe gelesen das nicht alle Arduinos auf "Anfragen" antworten können.
Ich habe einen Pro-Mini im Einsatz und würde gern ein Relais daran betreiben und der Schaltbefehl kommt via KNX.
Würde das gehen oder oder doch lieber Schaltaktor? Der Strom übers Relais ist auch nicht so groß (12V Türsummer für 5sek.)
Nochmal zum defektem TX Pin auf meiner Siemens Platine also am TPUART IC lässt es sich sehr bescheiden löten und aus Angst es völlig zu zerstören lasse ich es. Aber was sind das für 4 Kontakte (siehe Foto)
You do not have permission to view this gallery.
This gallery has 1 photos.
Und ma kann dies lösen indem man entweder einen 7404TTL vor dem RX hängt oder den CH340 auslötet und dann mit Hilfe eines USB-zu-TTL Konverter Moduls den Arduino beschreibt?
Das mit dem Auslöten habe ich nicht probiert, klingt aber auch nach einer Lösung (dann musst Du aber eine Alternative zum sketch-upload haben). Sicher gibt's noch andere Treiber als ein 7404, vielleicht ist das auch für den dann inoch vorhandenen CH340 ein Problem, dass sein Ausgang hochgezogen wird, hat aber bei mir funktioniert (wie auf dem Bild).
Ich habe ein Problem mit KnxTpUart von ThorstenGehrig, anfangs hat alle Problemlos funktioniert als ich mein Sketch denn erweitert habe schafft die bib es wohl nicht mehr richtig die middleGroup per substring zu lesen. Somit generiert er immer eine 0 statt einer wie angegebenen 1.
Code:
#include <Arduino.h>
#include <KnxTpUart.h>
#include <EEPROM.h>
#include <Adafruit_NeoPixel.h>
#include <ColorConverterLib.h>
#define LED_STRIP_PIN 6
#define LED_PIN 13
#define NUMPIXELS 500
#define DEBUG_MODE false
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, LED_STRIP_PIN, NEO_GRB + NEO_KHZ800);
KnxTpUart knx(&Serial1, "1.1.77");
boolean WohnzimmerTrafoState;
String WohnzimmerColorState;
String BadColorState;
char testListener[][20] = {
{1, 1, 1}
};
char listener[][20] = {
"6/1/1", //Wohnzimmer Schalten 0
"6/1/2", //Bad Schalten 1
"6/1/14", //Wohnzimmer Dimmen 2
"6/1/16", //Bad Dimmen 3
"6/1/20", //Wohnzimmer Color Schalten 4
"6/1/23", //Bad Color Schalten 5
"6/1/50" //Wohnzimmer Trafo Schalten 6
};
char statis[][20] = {
"6/4/1", //Wohnzimmer Status
"6/4/2", //Bad Status
"6/4/14", //Wohnzimmer Dimmen Status
"6/4/16", //Bad Dimmen Status
"6/4/20", //Wohnzimmer Color Status
"6/4/23", //Bad Color Status
"6/4/50" //Wohnzimmwe Trafo Status
};
void addingListener()
{
for (size_t i = 0; i < sizeof(listener) / sizeof(listener[0]); i++)
{
knx.addListenGroupAddress(listener[i]);
}
for (size_t i = 0; i < sizeof(statis) / sizeof(statis[0]); i++)
{
knx.addListenGroupAddress(statis[i]);
}
}
void readListener()
{
knx.groupRead(listener[6]);
}
boolean writeEEProm(byte index, byte value)
{
//only needed for short if
//disable by debug mode
if (!DEBUG_MODE)
{
EEPROM.write(index, value);
}
return true;
}
void checkEEPOM()
{
/*
EEPROM 1 = Wohnzimmer State
EEPROM 2 = Wohnzimmer Brightness
EEPROM 3 = Wohnzimmer R
EEPROM 4 = Wohnzimmer G
EEPROM 5 = Wohnzimmer B
EEPROM 10 = Bad State
EEPROM 11 = Bad Brightness
EEPROM 12 = Bad R
EEPROM 13 = Bad G
EEPROM 14 = Bad B
EERPOM 20 = Trafostate
*/
delay(1000);
// Wohnzimmer EEProm write
EEPROM.read(1) == 255 && writeEEProm(1, 0);
EEPROM.read(2) == 255 && writeEEProm(2, 30);
EEPROM.read(3) == 255 && writeEEProm(3, 153);
EEPROM.read(4) == 255 && writeEEProm(4, 4);
EEPROM.read(5) == 255 && writeEEProm(5, 100);
//Bad EEProm write
EEPROM.read(10) == 255 && writeEEProm(10, 0);
EEPROM.read(11) == 255 && writeEEProm(11, 30);
EEPROM.read(12) == 255 && writeEEProm(12, 153);
EEPROM.read(13) == 255 && writeEEProm(13, 4);
EEPROM.read(14) == 255 && writeEEProm(14, 100);
// Trafo EEPROM write
EEPROM.read(20) == 255 && writeEEProm(20, 0);
}
void initilaizeStates()
{
//Wohnzimmer Trafo State
WohnzimmerTrafoState = EEPROM.read(20) == 0 ? false : true;
EEPROM.read(20) == 0 ? knx.groupWriteBool(listener[6], false) : knx.groupWriteBool(listener[6], true);
//Wohnzimmer Status
EEPROM.read(1) == 0 ? knx.groupWriteBool(listener[0], false) : knx.groupWriteBool(listener[0], true);
EEPROM.read(1) == 0 ? knx.groupWriteBool(statis[0], false) : knx.groupWriteBool(statis[0], true);
//Wohnzimmer Dimm Status
knx.groupWrite2ByteInt(listener[2], EEPROM.read(2));
knx.groupWrite2ByteInt(statis[2], EEPROM.read(2));
//Wohnzimmer Color State
WohnzimmerColorState = String(EEPROM.read(3)) + String(EEPROM.read(4)) + String(EEPROM.read(5));
knx.groupWrite14ByteText(listener[4], WohnzimmerColorState);
knx.groupWrite14ByteText(statis[4], WohnzimmerColorState);
//Bad Status
EEPROM.read(10) == 0 ? knx.groupWriteBool(listener[1], false) : knx.groupWriteBool(listener[1], true);
EEPROM.read(10) == 0 ? knx.groupWriteBool(statis[1], false) : knx.groupWriteBool(statis[1], true);
//Bad Dimm Status
knx.groupWrite2ByteInt(listener[3], EEPROM.read(11));
knx.groupWrite2ByteInt(statis[3], EEPROM.read(11));
//Bad Color State
BadColorState = String(EEPROM.read(12)) + String(EEPROM.read(13)) + String(EEPROM.read(14));
knx.groupWrite14ByteText(listener[5], WohnzimmerColorState);
knx.groupWrite14ByteText(statis[5], WohnzimmerColorState);
}
void setup()
{
pinMode(LED_PIN, OUTPUT);
Serial1.begin(19200, SERIAL_8E1);
checkEEPOM();
knx.uartReset();
initilaizeStates();
addingListener();
delay(1000);
readListener();
pixels.begin();
}
void loop()
{
}
void showLeds(int startIndex, int maxIndex, uint8_t red, uint8_t blue, uint8_t green, int EEPromBrightness)
{
Serial.print(EEPROM.read(EEPromBrightness));
for (int i = startIndex; i <= 500; i++)
{
pixels.setPixelColor(i, pixels.Color(red, blue, green));
pixels.setBrightness(EEPROM.read(EEPromBrightness) );
pixels.show();
}
}
void showWohnzimmer()
{
uint8_t red;
uint8_t green;
uint8_t blue;
ColorConverter::HexToRgb(WohnzimmerColorState, red, green, blue);
EEPROM.read(3) != byte(red) && writeEEProm(3, byte(red));
EEPROM.read(4) != byte(green) && writeEEProm(4, byte(green));
EEPROM.read(5) != byte(blue) && writeEEProm(3, byte(blue));
showLeds(0, 237, red, blue, green, 2);
}
void showBad()
{
uint8_t red;
uint8_t green;
uint8_t blue;
ColorConverter::HexToRgb(BadColorState, red, green, blue);
EEPROM.read(12) != byte(red) && writeEEProm(12, byte(red));
EEPROM.read(13) != byte(green) && writeEEProm(13, byte(green));
EEPROM.read(14) != byte(blue) && writeEEProm(14, byte(blue));
showLeds(238, 370, red, green, blue, 11);
}
void serialEvent1()
{
//Aufruf knx.serialEvent()
KnxTpUartSerialEventType eType = knx.serialEvent();
//Evaluation of the received telegram -> only KNX telegrams are accepted
if (eType == KNX_TELEGRAM)
{
KnxTelegram *telegram = knx.getReceivedTelegram();
String target =
String(0 + telegram->getTargetMainGroup()) + "/" +
String(0 + telegram->getTargetMiddleGroup()) + "/" +
String(0 + telegram->getTargetSubGroup());
// Evaluation of group address of the received telegram and caching in variable "target"
if (telegram->getCommand() == KNX_COMMAND_ANSWER)
{
// Evaluation of the received KNX telegram with response to read request (flag) -> action
if (target == listener[6])
{
WohnzimmerTrafoState = telegram->getBool();
if (WohnzimmerTrafoState && (EEPROM.read(1) == 0 || EEPROM.read(10) == 0))
{
//Trafo aus wenn keine leds an
knx.groupWriteBool(listener[6], false);
}
else
{
if (EEPROM.read(1) == 1)
{
showWohnzimmer();
}
if (EEPROM.read(10) == 1)
{
showBad();
}
}
}
}
//Write to bus
if (telegram->getCommand() == KNX_COMMAND_WRITE)
{
Serial.print(target);
//Wohnzimmer LED Status
if (target == listener[0])
{
Serial.print(EEPROM.read(20));
if (EEPROM.read(1) != telegram->getBool())
{
telegram->getBool() ? writeEEProm(1, 1) : writeEEProm(1, 0);
}
if (telegram->getBool())
{
EEPROM.read(20) == 0 && knx.groupWriteBool(listener[6], true);
delay(1000);
showWohnzimmer();
}
if (!telegram->getBool())
{
knx.groupWriteBool(listener[0], false);
knx.groupWriteBool(statis[0], false);
if (EEPROM.read(20) == 1 && EEPROM.read(10) == 0)
{
knx.groupWriteBool(listener[6], false);
}
}
}
//BAD LED Status
if (target == listener[1])
{
if (EEPROM.read(10) != telegram->getBool())
{
telegram->getBool() ? writeEEProm(10, 1) : writeEEProm(10, 0);
}
if (telegram->getBool())
{
EEPROM.read(20) == 0 && knx.groupWriteBool(listener[6], true);
delay(1000);
showBad();
}
if (!telegram->getBool())
{
knx.groupWriteBool(listener[1], false);
knx.groupWriteBool(statis[1], false);
if (EEPROM.read(20) == 1 && EEPROM.read(1) == 0)
{
knx.groupWriteBool(listener[6], false);
}
}
}
//Wohnzimmer Trafo Status
if (target == listener[6])
{
byte result = telegram->getBool() ? 1 : 0;
if (EEPROM.read(20) != result)
{
telegram->getBool() ? writeEEProm(20, 1) : writeEEProm(20, 0);
}
if (result)
{
if (EEPROM.read(1) == 1)
{
showWohnzimmer();
}
if (EEPROM.read(10) == 1)
{
showBad();
}
}
}
//Wohnzimmer Dimmen Status
if (target == listener[2])
{
writeEEProm(2, telegram->get1ByteIntValue());
if (telegram->get1ByteIntValue() > 0)
{
if (EEPROM.read(1) == 0)
{
knx.groupWriteBool(listener[0], true);
knx.groupWriteBool(statis[0], true);
}
showWohnzimmer();
}
else
{
knx.groupWriteBool(listener[0], false);
knx.groupWriteBool(statis[0], false);
}
}
//Wohnzimmer Color Status
if (target == listener[4])
{
if (WohnzimmerColorState != telegram->get14ByteValue().substring(1))
{
WohnzimmerColorState = telegram->get14ByteValue().substring(1);
showWohnzimmer();
}
}
//Bad Dimmen Status
if (target == listener[3])
{
writeEEProm(11, telegram->get1ByteIntValue());
Serial.print(EEPROM.read(11));
if (telegram->get1ByteIntValue() > 0)
{
if (EEPROM.read(10) == 0)
{
knx.groupWriteBool(listener[1], true);
knx.groupWriteBool(statis[1], true);
}
showBad();
}
else
{
knx.groupWriteBool(listener[1], false);
knx.groupWriteBool(statis[1], false);
}
}
//Bad Color Status
if (target == listener[5])
{
if (BadColorState != telegram->get14ByteValue().substring(1))
{
BadColorState = telegram->get14ByteValue().substring(1);
showBad();
}
}
}
//answer to read request
if (telegram->getCommand() == KNX_COMMAND_READ)
{
//Wohnzimmer Trafo Status
if (target == listener[6])
{
knx.groupAnswerBool(listener[6], WohnzimmerTrafoState);
}
if (target == statis[6])
{
knx.groupAnswerBool(statis[6], WohnzimmerTrafoState);
}
//Wohnzimmer Status
if (target == listener[0])
{
EEPROM.read(1) == 0 ? knx.groupAnswerBool(listener[0], false) : knx.groupAnswerBool(listener[0], true);
}
if (target == statis[0])
{
EEPROM.read(1) == 0 ? knx.groupAnswerBool(statis[0], false) : knx.groupAnswerBool(statis[0], true);
}
//Wohnzimmer Dimmen Status
if (target == listener[2])
{
knx.groupAnswer2ByteFloat(listener[2], EEPROM.read(2));
}
if (target == statis[2])
{
knx.groupAnswer2ByteFloat(statis[2], EEPROM.read(2));
}
//Wohnzimmer Color Status
if (target == listener[4])
{
knx.groupAnswer14ByteText(listener[4], "#" + WohnzimmerColorState);
}
if (target == statis[4])
{
knx.groupAnswer14ByteText(statis[4], "#" + WohnzimmerColorState);
}
//Bad Status
if (target == listener[1])
{
EEPROM.read(10) == 0 ? knx.groupAnswerBool(listener[1], false) : knx.groupAnswerBool(listener[1], true);
}
if (target == statis[1])
{
EEPROM.read(10) == 0 ? knx.groupAnswerBool(statis[1], false) : knx.groupAnswerBool(listener[1], true);
}
//Bad Dimmen Status
if (target == listener[3])
{
knx.groupAnswer2ByteFloat(listener[3], EEPROM.read(11));
}
if (target == statis[3])
{
knx.groupAnswer2ByteFloat(statis[3], EEPROM.read(11));
}
//Bad Color Status
if (target == listener[5])
{
knx.groupAnswer14ByteText(listener[5], "#" + BadColorState);
}
if (target == statis[5])
{
knx.groupAnswer14ByteText(statis[5], "#" + BadColorState);
}
}
}
}
das währe der Sketch. Ist noch nicht fertig da ich noch mit case switch das ganze abarbeiten wollte.
Das Problem besteht schon in der initilaizeStates Methode wo er die werte eigentlich setzten sollte das er sie mit der falschen middelgroup an den Bus sendet.
Hat jemand eine idee wo da mein fehler liegen könnte?
ich hab jetzt bei meinem Projekt einen Arduino pro Mini in Gebrauch.
Das senden der Daten von ihm funktioniert auch, das Empfangen von einer Antwort (KNX_COMMAND_READ) klappt auch bis einschließlich Hauptgruppe 15.
Ich würde jedoch gerne über die HG 31 kommunizieren, hier macht der Arduino jedoch nichts bei den Anfragen.
Hatte jemand schon diesen Fall?
Meine erste Vermutung war der IP Router, hier hab ich die weiterleitung für alles schon aktiviert. Hat jedoch nichts gebracht.
bin neu hier, Arduino- und KNX-Anfänger, aber langjähriger und begeisterter Bastler.
Ich bastel gerade an einem kleinen Projekt rum. Dabei geht es um einen KNX gesteuerten, MP3 fähigen Türgong.
Letztendlich hängt ein Arduino Pro Mini an einem TP-Uart und lauscht den KNX-Bus ab. Bei der passenden Gruppenadresse gibt er einen Steuerbefehl über Softwareserial an ein MP3-Player-Modul (Mini-DF-Player). Daran hängt eine kleine Class-D Endstufe und ein Einbaulautsprecher.
Folgendes Problem bekomme ich nicht gelöst:
Benutze ich einen 3,3V 8Mhz Arduino Pro Mini startet er mehrmals kurz nacheinander den Player beim Empfang der Gruppenadresse. Der abzuspielende Jingle beginnt mehrmals von vorne bis er dann komplett abgespielt wird.
Spiele ich den selben Sketch auf einen 5V 16Mhz Arduino Pro Mini funktioniert alles wie es soll. Telegramm kommt rein, Steuerbefahl geht raus, Jingle wird einmal abgespielt.
Hier ist der Sketch (im Prinzip das Beispiel etwas umgeschrieben):
// 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/2/2") {
int received_2_2_2 = telegram->getBool();
if (received_2_2_2) {
execute();
}
}
}
}
}
Wäre super wenn jemand mal überprüfen könnte, ob das ein generelles Problem ist, oder ob ich was falsch mache.
Über Hilfe würde ich mich sehr freuen. Schon mal vielen Dank.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar