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.
Danke, Thorsten.
Ich denke, wenn ich es mit den Spannungsteilern mache, wie oben, ist es auch einfach aufgebaut mit 3.3V. Das Risiko möchte ich jetzt nicht mehr eingehen, nachdem ich den Post von hismastervoice auf deine Frage gelesen habe.
Ich hab gerade den Lieferschein herausgesucht: ich habe einen "IAQ-CORE C-ND" - wie im Link am Anfang des Threads bei Digikey bestellt...
Geliefert im Oktober 2015... läuft bis heute :-)
@Wagoklemme: kann dich verstehen... und bin Froh das wir hier im Forum ein anderes Niveau haben B-)
Das ist seltsam...vielleicht hat AMS ja einen internen Spannungsregler zur Sicherheit verbaut (um genau das Szenario zu verhindern, schließlich sind die IAQ-Engine seit 2016 abgekündigt und es kommt vielleicht jemand auf die Idee, den Core als drop-in-replacement zu benutzen).
Vielleicht ist es aber halt auch nur Glück und irgendein Schutzmechanismus im Innern greift...ich würde das jedenfalls nicht so lassen. Halbleiter sind nunmal extrem undankbar, was ein Betrieb außerhalb der Spec angeht (Lebensdauer)....normalerweise geht ein für maximal 3,3V (bzw. 3,4V) spezifiziertes Bauteil innerhalb kürzester Zeit defekt, wenn man da 5V draufbrät. Der IAQ kostet ja immerhin um die 40€.
Das ist nicht normal. Von OK auf Warmup darf der nicht springen, eigentlich geht das umgekehrt :-)
Hört sich nach einem Spannungsproblem an (kurze Unterbrechung oder nicht stabil), denn dann geht er erstmal in die Aufwärmphase...Du betreibst ihn aber an 3,3V, gelle? :-)
Ist auch nur ein Testaufbau, vielleicht wars ein Wackler. Wenn ich ihn jetzt anblase, geht er schön rauf und wieder runter (Fenster offen). Nun scheint alles ok zu sein.
Das Projekt reisst mich echt vom Hocker !
Inzwischen ist der iAQ auf Lochraster und auf Siemens.
Leider funktioniert der Bus nicht. Es kommt mir so vor als ob die Kummunikation zwischen dem Pro Mini 3.3V und der Siemens BCU irgendwie gestört läuft.
Es geht damit los, dass er erstmal das Senden des VOC-Werts komplett unterschlagen hat. Der Serialevent scheint anzuspringen, aber es wurde keine Leseanforderung abgeschickt. Nehme ich den SerialEvent komplett raus, dann kommen nur Statuswerte und nach einiger Zeit gar nix mehr, der Kommunikation steht:
#include "I2Cdev.h"
#include "IAQ2000.h"
//KNX
#include <KnxTpUart.h>
#define KNX_PHYSICAL_ADRESS "1.1.2"
#define KNX_WRITE_GROUPADRESS_STATUS "7/0/200"
#define KNX_WRITE_GROUPADRESS_CO2 "7/0/201"
#define KNX_WRITE_GROUPADRESS_TVOC "7/0/202"
#define KNX_MEASSURE_INTERVAL_MS 10000 // Messintervall alle 30 sekunden
#define KNX_SEND_INTERVAL_MS_STATUS 10000 // senden des Status mindestens alle 30 minuten
#define KNX_SEND_INTERVAL_MS_CO2 10000 // senden des CO2 Werts mindestens alle 30 minuten
#define KNX_SEND_INTERVAL_MS_TVOC 10000 // senden des VOC Werts mindestens alle 30 minuten
#define watchdog_time 3600000 // Watchdog = 1 Stunde
const int ledpin = 13;
//Initialize KNX
KnxTpUart knx(&Serial, KNX_PHYSICAL_ADRESS);
// class default I2C address is 0x5A
// specific I2C addresses may be passed as a parameter here
// but this device only supports one I2C address (0x5A)
IAQ2000 iaq;
uint16_t airQuality;
uint8_t iAQstatus;
uint16_t airTvoc;
unsigned long startTime;
unsigned long watchdog;
unsigned long sendTimeStatus;
unsigned long sendTimeCO2;
unsigned long sendTimeVOC;
uint16_t oldairQuality;
uint8_t oldiAQstatus = 255;
uint16_t oldairTvoc;
bool result;
void setup() {
// join I2C bus (I2Cdev library doesn't do this automatically)
Wire.begin();
//initialize connection to KNX BCU
Serial.begin(19200);
while (!Serial) {
; // wait for serial port to connect
}
UCSR0C = UCSR0C | B00100000;
// Reset UART
knx.uartReset();
startTime = millis();
watchdog = millis();
// initialize device
delay(1000);
iaq.initialize();
iaq.testConnection() ? result = knx.groupWrite1ByteInt(KNX_WRITE_GROUPADRESS_STATUS, 2) : result = knx.groupWrite1ByteInt(KNX_WRITE_GROUPADRESS_STATUS, 3);
delay(1000);
// VOC Status
// 0 = OK
// 1 = BUSY
// 2 = VOC Verbunden (*)
// 3 = VOC nicht verbunden (*)
// 16 = WARMUP
// 127 = Neustart / Reset (*)
// 128 = ERROR
// (*) = Status 2, 3 und 127 kommen vom Sketch
ADCSRA = ADCSRA & B01111111; // Disable ADC, ADEN bit7 to 0
ACSR = B10000000; // Disable analog comparator, ACD bit7 to 1
DIDR0 = DIDR0 | B00111111; // Disable digitale inputbuffer, set analoge input pins 0-5 to 1
// Lese-Addressen registrieren
// knx.addListenGroupAddress(KNX_WRITE_GROUPADRESS_STATUS);
// knx.addListenGroupAddress(KNX_WRITE_GROUPADRESS_CO2);
// knx.addListenGroupAddress(KNX_WRITE_GROUPADRESS_TVOC);
}
void loop() {
// Wenn unterhalb des messintervalls: nichts tun
if (millis() - startTime < KNX_MEASSURE_INTERVAL_MS) {
delay(1);
return;
}
startTime = millis();
digitalWrite(ledpin, HIGH); // Set LED State to visualize progess
delay(1000);
digitalWrite(ledpin, LOW);
// Wenn überhalb des sendeintrvalls
if (millis() - sendTimeStatus > KNX_SEND_INTERVAL_MS_STATUS) {
oldiAQstatus = 255; // undefinierter wert - damit beim nächsten befehl gesendet wird
}
// Wenn überhalb des sendeintrvalls
if (millis() - sendTimeCO2 > KNX_SEND_INTERVAL_MS_CO2) {
oldairQuality = 10; // undefinierter wert - damit beim nächsten befehl gesendet wird
}
// Wenn überhalb des sendeintrvalls
if (millis() - sendTimeVOC > KNX_SEND_INTERVAL_MS_TVOC) {
oldairTvoc = 10; // undefinierter wert - damit beim nächsten befehl gesendet wird
}
// Wenn über Watchdog-time: Fehler auf BUS senden, reboot
if (millis() - watchdog > watchdog_time) {
result = knx.groupWrite1ByteInt(KNX_WRITE_GROUPADRESS_STATUS, 127);
delay(1000);
asm volatile (" jmp 0");
return;
}
// read sensor status
iAQstatus = iaq.getIaqstatus();
if (iAQstatus != oldiAQstatus) {
oldiAQstatus = iAQstatus;
result = knx.groupWrite1ByteInt(KNX_WRITE_GROUPADRESS_STATUS, iAQstatus);
sendTimeStatus = millis(); // define last Status send time
watchdog = millis(); // set Watchdog
}
delay(100);
// read seansor TVoc
airTvoc = iaq.getIaqtvoc();
if (airTvoc >= (oldairTvoc + 10) || airTvoc <= (oldairTvoc - 10)) {
oldairTvoc = airTvoc;
result = knx.groupWrite2ByteInt(KNX_WRITE_GROUPADRESS_TVOC, airTvoc);
sendTimeVOC = millis(); // define last VOC send time
watchdog = millis(); // set Watchdog
}
delay(100);
// read seansor CO2
airQuality = iaq.getIaqpred();
if (airQuality >= (oldairQuality + 10) || airQuality <= (oldairQuality - 10)) {
oldairQuality = airQuality;
result = knx.groupWrite2ByteInt(KNX_WRITE_GROUPADRESS_CO2, airQuality);
sendTimeCO2 = millis(); // define last CO2 send time
watchdog = millis(); // set Watchdog
}
delay(100);
}
void reboot() {
}
Achja, ich habe hier zwei Setups. 1 auf Breadboard und 1 siehe oben. Verhalten ist bei Beiden gleich.
Kann es an dem Spannungsteiler liegen. Ich hatte statt dem 2kohm nur einen 2.2kohm da ?
Der iAQ-Testcode funktioniert perfekt. Ich habe nur ein Problem auf der KNX-Seite. 2017-06-04 10_41_48-COM10.png
Zuletzt geändert von WagoKlemme; 04.06.2017, 09:42.
Zum Versenden ist dies nicht zwingend notwendig, nur wenn du eine Rückmeldung haben möchtest, ob der ARDUINO dies intern verarbeitet hat. Der Rückgabewert funktioniert aber nicht immer, weil der Kompilierer diesen gerne wegoptimiert.
Mit dieser "Library" mache ich wiederkehrende Abläufe. Die Genauigkeit hängt von der inneren "Uhr" des ARDUINO ab.
Nachtrag:
Zum Senden von Daten aus dem ARDUINO auf den KNX brauchst du kein
Code:
serialEvent()
, dass benötigst du nur zum Empfangen von Daten vom KNX her. Natürlich auch um auf eine Leseanfrage, den aktuellen Status der Gruppenadresse schicken zu können. Ich glaube du bringst da etwas durcheinander oder täusche ich mich?
Viel Spaß damit.
Zuletzt geändert von Mag Gyver; 04.06.2017, 14:11.
Gleich am Anfang gehts - zweimal. Dann nicht mehr, gleiches Ergebnis. Und jetzt geht gar nix mehr.
Als ob die serielle Schnittstelle stirbt. Ist sie aber nicht, da der FTDI nach wie vor Sketsche laden kann und Monitor geht auch, natürlich ohne KNX. Dann kann sie doch nicht zerschossen sein. Bin ratlos.
Und wenn ich dann das Testprogramm von iAQ runterspiele, geht alles perfekt. Problem ist also die KNX-Seite.
Nur wird mir das zu eng auf Lochraster, da ich auch noch einen BME280 später draufmachen wollte. Dann warte ich lieber auf Platinen zum Aufstecken. Bin schon mit Stefan in Kontakt.
Ich hatte mal was von Störungen der Bus-Kommunikation beim Pro mini aus China gelesen, finds aber nicht mehr. Vielleicht ist das die Ursache, zumindest passts zum Fehlerbild. Der Pro mini stört, kommt aus dem Tritt und Kommunikation bleibt stehen - passt.
Das mit dem SerialEvent hatte ich testweise herausgelöscht, da die Störung per Geisterhand einen Serialevent regelmässig ausgelöst hatte. Auch hierin ist die Kommunikationsstörung zu erkennen. Eine Leseanfrage hat es nie gegeben.
Mit dem ARDUINO NANO gibt es auch Probleme, aber nur beim Empfangen. Liegt daran das der FTDI-Chip direkt über Widerstände an der UART-Schnittstelle hängen und nur nach mechanischer Trennung oder den FTDI-Chip über Pin 19 des FTDI-Chips im Reset halten, solange man die UART-Schnittstelle nicht zum Upload braucht. Also Faktum für Bastler ungeeignet.
Bei Klonen allgemein sollte man darauf achten, dass kein CH340 ... -Chip für die USB-Kommunikation verbaut ist, ansonsten auch nicht brauchbar. Nur eine mechanische Endlösung möglich.
Am besten geeignet ist der ARDUINO PRO MINI, der ARDUINO UNO und der ARDUINO MEGA.
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