Hi,
ich habe für die Anbindung eines Miele Dunstabzugs (DA31[6|9]0) an den KNX Bus eine Spezialversion des Controllers entwickelt.
Diese basiert auf der LPC Sende/Empfangsstufe + dem AVR RF Controller Board + Teile des 8out app boards + Teile des 8 in app boards.
Die Eagle files sind im Anhang zu finden.
Die Steuerung des Dunstabzuges selbst übernimmt eine weitere Platine welche über I2C (mit PCA9600 tranciever) an den Hauptcontroller angebunden ist.
Soweit so gut, leider habe ich mit der knx Library auf dem 8 out teil ein problem mit den ausgängen 5 - 8 (später über i2c, die leds sind nur für den status), nach spätestens ein paar Schaltvorgängen, je nach parametrierung auch schon noch einmal schalten (wenn 5 - 8 alle auf die gleiche gruppenadresse zum testen parametriert sind) bekomme ich PERR oder FERR auf der seriellen Konsole und der UC fängt an komisch zu reagieren (kein "zurücksetzen" über bus mehr möglich, relais von 1 - 4 schalten nur teilweise, leds von 5 - 8 schalten nur teilweise, parametrierung aus ETS nicht möglich). Nach einem power cycle ist alles wieder normal. Die verwendeten Controller sind 328P, die sourcen sind vom git und aktuell, in der fbrf-atmega168p.h habe ich die IO's entsprechend für meine Änderungen angepasst (macht aber keinen unterschied, habs auch mit den original pins probiert). PWM habe ich ebenfalls aus dem Source code auskommentiert zum testen, keine änderung. Den PSU Teil auf der PCB hab ich ebenfalls mittlerweile deaktivert und hänge mit den UC's am Labornetzteil und Störungen in der Spannungsversorgung auszuschließen!!
Code:
V2.0
EEPROM:
0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
CRC
0010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0040: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0100: FF FF FF 00 04 20 60 01 FE 11 40 00 00 FF E0 63
0110: A7 25 9A 00 00 00 07 11 08 28 0D 2B 00 2B 01 2B
0120: 07 2B 09 48 05 14 06 00 06 01 06 02 06 03 FE 04
0130: FE 05 FE 06 02 07 FE 08 FE 09 FE 0A FE 0B FE 0C
0140: FE 0D FE 0E FE 0F 03 10 04 11 05 12 01 13 FF FF
0150: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0160: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0170: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0180: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
0190: FF FF FF FF FF FF FF FF FF FF 14 D6 54 9F 00 55
01A0: 97 00 56 97 00 57 97 00 58 93 00 59 93 00 5A 93
01B0: 00 5B 97 00 5C 93 01 5D 93 01 5E 93 01 5F 93 01
01C0: 60 C3 00 61 C3 00 62 C3 00 63 C3 00 64 C7 00 65
01D0: C7 00 66 C7 00 67 C7 00 00 00 00 00 00 00 00 00
01E0: 00 00 05 00 00 00 00 00 00 00 01 00 03 00 00 00
01F0: 00 00 00 00 00 00 55 55 CD 00 00 00 00 00 00 FF
ADR:07
G00:1108
G01:280D
G02:2B00
G03:2B01
G04:2B07
G05:2B09
G06:4805
ASOC:14
AG:06O00
AG:06O01
AG:06O02
AG:06O03
AG:FEO04
AG:FEO05
AG:FEO06
AG:02O07
AG:FEO08
AG:FEO09
AG:FEO0A
AG:FEO0B
AG:FEO0C
AG:FEO0D
AG:FEO0E
AG:FEO0F
AG:03O10
AG:04O11
AG:05O12
AG:01O13
COMM:14
O00F9FP54T00L00
O01F97P55T00L00
O02F97P56T00L00
O03F97P57T00L00
O04F93P58T00L00
O05F93P59T00L00
O06F93P5AT00L00
O07F97P5BT00L00
O08F93P5CT01L00
O09F93P5DT01L00
O0AF93P5ET01L00
OL00
O0DFC3P61T00L00
O
O10FC7P64T00L00
O11F13FC7P67T00L00
SET PIN00 +++ 00 +++ O07W
OBJ_07 00 00 OFF Sw SWITCH 00 TO 00 +++ 00 +++ O07W
OBJ_07 ss Sw SWITCH 00 TO 80 +++ 80 +++ O07W
OBJ_07 00 00 O
F Sw SWITCH 80 TO 00 +++ 00 +++ O07W
OBJ_07
ss Sw SWITCH 00 TO 80 +++ 80 +++ O07W
OBJ_07
sF Sw SWITCH 80 TO 00 +++ 00 +++ O07W
OBJ_07 ¾ Sw SWITCH 00 TO 80 +++ 80 +++ O07W
OBJ_07
sF Sw SWITCH 80 TO 00 +++ 00 +++ O00W
O01W
O02W
À
OBJ_00 01 01 TIMER
OBJ_01 01 01 ON
OBJ_02 01 01 ON
OBJ_03 01 01 ON Sw SWITCH 00 TO 0F +++ 0F +++ TIMEOUT Sw SWITCH 0F TO 0E +++ 0E +++ O07W
OBJ_07
s Sw SWITCH 0E TO 8E +++ 8E +++ O07W
OBJ_07
ssF Sw SWITCH 8E TO 0E +++ 0E +++ O07W
OBJ_07 s Sw SWITCH 0E TO 8E +++ 8E +++ O07W
OBJ_07 ssF Sw SWITCH 8E TO 0E +++ 0E +++ PERR
O00W
O01W
O02W
O03W
OBJ_00 00 00 OFF
OBJ_01 00 00 OFF
OBJ_02 00 00 OFF
OBJ_03 00 00 OFF Sw SWITCH 0E TO 00 +++ 00 +++ O00W
O01W
O02W
O03W
OBJ_00 01 01 TIMER
OBJ_01 01 01 ON
OBJ_02 01 01 ON
OBJ_03 01 01 ON Sw SWITCH 00 TO 0F +++ 0F +++ TIMEOUT Sw SWITCH 0F TO 0E +++ 0E +++
Das +++ ist nur zum debuggen eingefügt... es scheint aber als würde der Teil des codes im Fehlerfall nicht mehr immer ausgeführt:
Code:
void switchPorts(uint8_t port, uint8_t oldPort) {
DEBUG_PUTS("SWITCH ");
DEBUG_PUTHEX(oldPort);
DEBUG_PUTS(" TO ");
DEBUG_PUTHEX(port);
DEBUG_SPACE();
// Disable PWM only if we switch an IO to high, release a relay does not need power.
// if((oldPort ^ port) & port) {
// /* change PWM to supply relays with full power */
// DEBUG_PUTS("DISABLE PWM ");
// alloc_timer(&app_dat.pwmTimer, PWM_DELAY_TIME);
// SET_STATE(PWM_TIMER_ACTIVE);
// ENABLE_PWM(0xFF); // --> This is 100% negative duty cycle (active low)
// }
IO_SET(1,(uint8_t)(port & 1<<0));
IO_SET(2,(uint8_t)(port & 1<<1));
IO_SET(3,(uint8_t)(port & 1<<2));
IO_SET(4,(uint8_t)(port & 1<<3));
IO_SET(5,(uint8_t)(port & 1<<4)); //Port 5 and 6 is reserved for I2C Bus
IO_SET(6,(uint8_t)(port & 1<<5)); //Port 5 and 6 is reserved for I2C Bus
IO_SET(7,(uint8_t)(port & 1<<6)); //Port 6 & 7 could be used but are on the I2C Receiver as well
IO_SET(8,(uint8_t)(port & 1<<7)); //Port 6 & 7 could be used but are on the I2C Receiver as well
DEBUG_SPACE();
DEBUG_PUTS(" +++ ");
DEBUG_PUTHEX(port);
DEBUG_PUTS(" +++ ");
DEBUG_SPACE();
//i2c_send_daten(port);
Meine Frage: was bedeutet PERR bzw. FERR, wie kann ich hier mit der closed source weiter debuggen, hat jemand eine Idee was das Problem sein könnte.
PS: Zum compillieren und coden verwende ich AVR studio 6.1.2562
https://www.dropbox.com/s/at4wraa8ztyf0wy/controller-pcb.jpgIch hoffe jemand kann mir helfen!!!!
