KNXgate 18.43
KNXgate è un modulo di interfaccia tra il bus Konnex e una porta seriale
UART a 115200 baud; è un dispositivo amatoriale autocostruito e come tale privo
di qualsiasi garanzia in merito al corretto funzionamento ed interfacciamento –
KONNEX è un bus “proprietario” che non è lecito replicare con dispositivi
commerciali senza le dovute autorizzazioni.
Scopo del modulo è di consentire a dispositivi esterni (computers, Arduino,
…) tramite porta seriale o USB di ricevere e inviare messaggi sulla rete KONNEX
(accendere e spegnere luci, tapparelle, ecc...) - l'interfaccia si riferisce
SOLO ai moduli di automazione, non alla trasmissione dati (citofonia, video,
ecc...).
Il modulo è stato testato su di un bus Vimar BY-ME, tale sistema pur non essendo
marcato “konnex” utilizza di fatto il medesimo sistema trasmissivo ed il
medesimo protocollo di base.
Il firmware è aggiornabile sia tramite i programmatori standard “Microchip”
con uscita ICSP (es. pickit3) sia attraverso l’interfaccia seriale/usb MCP2200
con un software apposito (windows) da me realizzato.
Al momento non sono previsti futuri rilasci, potranno esserci nuove versioni
sia per miglioramenti delle funzionalità sia per richieste o segnalazioni
pervenutemi.
Interfaccia
KNXgate: Connessioni
La scheda ha 3 connettori:
-
Il connettore
di destra va collegato al bus KNX rispettando le polarità indicate - in alto e
+ in basso (!). Prima di collegarlo al
bus controllate con un voltmetro. Il collegamento serve solo per i segnali di
ingresso e uscita, non alimenta la scheda.
-
Il connettore
centrale (TP) serve a tarare i livelli di input – se avete acquistato questo
dispositivo è già tarato. In caso
contrario: con il connettore KNX collegato al bus domotico il trimmer va tarato
per avere su questi pin 0,5 Volts (positivo a sinistra, negativo a destra)
-
Il connettore
di sinistra a 6 pin serve sia a programmare il PIC che a fornire ingresso e
uscita verso arduino o verso il PC:
o Programmazione: connettore ICSP Microchip
standard collegabile, ad esempio, a pickit3: 1=/reset 2=positivo 5V 3=negativo
4=PGD 5=PGC 6=
o Arduino:
1=/reset o non collegato
2=positivo 5V (alimentare da arduino)
3=negativo 4= ingresso seriale
(RX) da collegare all’uscita seriale di arduino 5= uscita seriale (TX) da collegare
all’ingresso seriale di arduino 6= non
usato
o PC: la schedina di interfaccia con MCP2200 va
connessa qui e provvede un’interfaccia USB verso il PC contemporaneamente
all’alimentazione
Sui pin 2 e 3 del connettore di
sinistra va fornita una alimentazione stabilizzata da 5V a 3,3V in caso di
connessione ad arduino o ad un programmatore Microchip – invece in caso di
connessione con la schedina MCP2200 l’alimentazione proviene direttamente dalla
USB.
Il dispositivo va programmato
almeno la prima volta con un programmatore Microchip che possa programmare
PIC18F26K80 (io uso pickit3), successivamente il PIC può essere riprogrammato
attraverso la connessione MCP2200 – USB con un mio programmino VB6.
Modello 141113
(firmware 18.4x)
Questo nuovo modello si
differenzia dal precedente per non avere il trimmer di taratura ed il diodo
zener. La taratura è interna al firmware
e può essere effettuata tramite appositi comandi. Il vantaggio consiste in una migliore
tolleranza di escursione termica a cui il diodo zener è soggetto.
La taratura tramite firmware è
già effettuata e predisposta per l’alimentazione a 5 volt; nel caso dobbiate
alimentare il dispositivo a 3,3 volt va inviato l’apposito comando di ri-taratura
@3; per tornare alla taratura originale si usa il comando @5.
ATTENZIONE ! Non tutti i
dispositivi sono adatti al funzionamento a 3,3 Volt – chiedete prima di
acquistare.
Il test-point (TP) è stato
mantenuto e può essere collegato ad un oscilloscopio per verifica. Il pin di
destra deve avere un livello di circa 3 volt con bus collegato e mostrare i
segnali del bus con impulsi bassi ampi circa 1 volt; il pin di sinistra emette
uno spike di sincronismo per ogni impulso rilevato.
Connessione con
MCP2200
Se avete comprato da me
l’interfaccia MCP2200, potreste avere la versione con presa USB grande o mini.
La versione con USB grande ha il connettore a 5 pin, quella con USB piccolo ha
il commettore a 4 pin:
La versione con USB grande (a 5
pin) va collegata facendo combaciare il pin 1 (vedi freccia), il pin 6 di
KNXGATE rimane libero.
La versione con USB piccolo (a 4
pin) va collegata facendo combaciare il proprio pin 1 con il pin 2 di KNXGATE,
il pin 1 e il pin 6 di KNXGATE rimangono liberi.
Test con il PC
Può essere effettuato collegando
la scheda MCP2200 come sopra descritto, al pc porta USB dall’altro.
Preliminarmente il PIC deve
essere programmato (se lo avete acquistato da me è già programmato), vanno
installati i driver per MCP2200 scaricabili dal sito Microchip.
Se avete autocostruito
l’interfaccia MCP2200 va utilizzata l’utility di configurazione per MCP2200 per
impostare la velocità di 115200 baud (non necessario se l’avete acquistata da
me).
Attraverso la schedina MCP2200
collegate il dispositivo SOLO al PC: il led deve lampeggiare.
Il led lampeggia ogni secondo
oppure ogni volta che sul bus KNX transitano degli impulsi.
Utilizzate un programma di
comunicazione seriale (tipo Putty) a 115200 baud: aprite una sessione e
digitate “@MA” (modalità ascii). Il dispositivo deve rispondere “k” (ok).
Digitare “h” (minuscolo). Il dispositivo deve rispondere con una sorta di
menu/help con le opzioni principali. La conversazione completa a video sarà
circa così:
@MAkh
KNXgate V 18.04
@M[A|X] : modo ascii | hex
@F[0|1|2|3|4]
: filtro
@D[value]:
dest line/sector
@q :
query version
@b :
buffer clear
@r : read
immed.
@R : read
defer.
@c :
cancel def.
@W[0-F][data]
write
@w[value][destin] write
A questo punto attivate il log a
video con il comando @l – il dispositivo risponde “k”. Provate ad accendere e
spegnere qualche luce, a video dovreste vedere così:
KNX[4]: B4 10 0C 0B 15 E1 00 80 28
KNX[5]: CC
Le spiegazioni di quello che
vedete le trovate sui documenti ufficiali konnex, riassumo brevissimamente:
B4: control byte (iniziatore del telegramma)
10: indirizzo del dispositivo che invia il
telegramma (linea e settore)
0E: indirizzo del dispositivo che invia il
telegramma (device)
0B: indirizzo del dispositivo di destinazione
(linea e settore)
15: indirizzo del dispositivo di destinazione
(device)
E1: network protocol data unit – il semibyte di
destra (1) è la lunghezza dei “dati”
00: transport protocol data unit
80: dati (lunghezza sopra specificata) .
81=accendi 80=spegni
28: check byte
CC: è la risposta (acknowledge) del dispositivo
che si è acceso o spento
Prendete nota del quarto byte (0B
nell’esempio sopra) – è l’indirizzo di linea e settore dei vostri attuatori –
se è diverso da 0B (impostato in
knxgate) dovrete utilizzare il comando @D per re-impostarlo in knxgate (vedi sotto).
Prendete nota del quinto byte (15
nell’esempio sopra) – sarà diverso per ogni dispositivo che accendete o
spegnete. Sui bus konnex generalmente i dispositivi non sono marcati con
etichette e per leggerli dovrete loggare i comandi.
Provate ad accendere e spegnere
il dispositivo con i comando “@w11D” e “@w01D” – se il dispositivo risponde
siete a posto!
Altri brand
Un utilizzatore del mio
dispositivo mi ha gentilmente fornito il log rilevato su di un impianto knx
“Tebis ts” di Hager technologies.
BC 01 03 08 14 E2 00 80 12 2D
CC
BC 01 03 08 14 E2 00 80 10 2F
CC
BC 01 03 08 13 E2 00 80 02 3A
CC
BC 01 03 08 13 E2 00 80 00 38
CC
BC: control byte (normal
priority telegram)
01: address of sender device (sector)
03: address of sender device
08: address of destination device (sector)
14: address of destination device
E2: network protocol data unit – data length is 2
00: transport protocol data unit
80: data byte 1
12: data byte 2
2D: check byte
CC: acknowledge from receiving device
Rispetto al log Vimar esistono
alcune differenze:
-
Il control byte
è 0xBC invece che 0xB4 (cambiano i bit che indicano la priorità del messaggio).
-
Network
protocol data unit vale 0xE2 invece che 0xE1 (la lunghezza dati è dichiarata 2
bytes)
-
Data byte
invece di 0x81 (accendi) o 0x80 (spegni) vale 0x8012 (accendi) o 0x8010
(spegni) o 0x8002 (accendi) o 0x8000 (spegni)
Da notare che fino ad oggi
(versione firmware 18.31) la lunghezza dati di 2 bytes non è implementata nel
comando breve di scrittura @w. Lo sarà in futuro.
Aggiornamento del
firmware
L’ultima versione del firmware la
potete ottenere contattandomi via email e consiste in un file .hex
Può essere aggiornato in 2 modi:
1) Utilizzando uno dei programmatori Microchip
(o clone) tipo Pickit3
2) Collegando la scheda MCP2200 o analoga
interfaccia verso una porta COM1-2-3-4 di un PC con Windows (XP/7/8) ed
utilizzando l’apposito programmino VB che potete scaricare da qui.
Utilizzo con
Arduino o con Raspberry
Il colloquio avviene tramite
porta seriale con livelli TTL (0-5V oppure 0-3V) alla velocità di 115200 baud.
Nel paragrafo successivo sono
elencati i comandi leciti, esistono altri comandi non ancora documentati, utili
soprattutto per i test del dispositivo.
Sul mio sito sono pubblicati
alcuni esempi di software utilizzabili per la connessione e l’utilizzo tramite
Arduino.
Il firmware
Lo scambio di dati viene sempre sollecitato da un comando inviato al
dispositivo – ogni comando ha il seguente formato (i simboli < e >
vengono utilizzati come separatori):
<@><comando><valore><dati
opzionali>
Il modulo risponde sempre ma in vario modo a seconda del comando.
@I<valore> [non implementato]
Imposta il tipo di interfaccia hardware utilizzata; i valori possono essere
i seguenti:
0 : TP-UART infineon (default)
1 : FZE1066G infineon
2 : comparatore interno al PIC
3 : comparatore esterno
Risposte possibili: <k> : tutto ok <E>
: errore
@M<valore>
Imposta la modalità di comunicazione sulla porta seriale; i valori possono
essere i seguenti:
X : esadecimale (default): i
dati vengono scambiati in esadecimale puro (bytes da 0x00 a 0xFF)
A : ascii: i dati vengono
scambiati con caratteri ascii, per esempio l'esadecimale 0x2A va inviato con 2
caratteri, il carattere '2' seguito dal carattere 'A'. In modalità ascii la
lunghezza effettiva dei dati inviati risulta quindi doppia rispetto alle
lunghezze specificate che sono quindi lunghezze logiche. La modalità ascii è
utile per fare test diretti con programmi standard di interfaccia seriale (tipo
“putty”).
Il valore impostato viene memorizzato nella
eeprom del PIC e rimane valido anche spegnendo e riaccendendo il dispositivo.
Risposte possibili: <k>
: tutto ok <E> : errore
@F<valore>
Permette di applicare un filtro sui messaggi SCS per ignorare quelli che non
interessano; i valori espressi sempre in ascii possono essere i seguenti:
0 : nessun filtro
1 : i messaggi doppi o tripli
vengono trasmessi in seriale una volta sola.
2 : i messaggi di ACK (0xCC)
vengono ignorati.
3 : comprende sia il filtro “1”
che il filtro “2”.
4 : i messaggi di ACK e i
messaggi di stato vengono ignorati.
Il valore impostato viene memorizzato nella
eeprom del PIC e rimane valido anche spegnendo e riaccendendo il dispositivo.
Risposte possibili: <k>
: tutto ok <E> : errore
@D<valore>
Permette di impostare il valore del byte di “linea e settore” del
dispositivo di destinazione nei messaggi –
inizialmente questo valore è impostato a 0B.
Il valore impostato viene memorizzato nella
eeprom del PIC e rimane valido anche spegnendo e riaccendendo il dispositivo.
Risposte possibili: <k>
: tutto ok <E> : errore
@r
Permette di leggere dal dispositivo il successivo telegramma ricevuto e
bufferizzato; la lettura lo rimuove dal buffer. Il dispositivo ha un buffer in
grado di contenere fino a 10 telegrammi; la mancata lettura dei messaggi
provoca un overflow del buffer con conseguente perdita dei telegrammi più
vecchi.
Risposta:
<lunghezza> : sempre e
solo un carattere (ascii o esadecimale puro) da '0' a 'F'
che indica la lunghezza logica dei dati rimanenti (se vale '0' significa che
non ci sono telegrammi in attesa di scodamento)
<dati> : i dati del
telegramma in esadecimale puro oppure in ascii a seconda del modo operativo
@R
Permette di leggere dal dispositivo il successivo telegramma ricevuto e bufferizzato;
la lettura lo rimuove dal buffer. Il dispositivo ha un buffer in grado di
contenere fino a 10 telegrammi; la mancata lettura dei messaggi provoca un
overflow del buffer con conseguente perdita dei telegrammi più vecchi. Se il
buffer non contiene messaggi la risposta viene differita: la risposta avrà
luogo solo quando il buffer conterrà un telegramma.
Risposta:
<lunghezza> : sempre e
solo un carattere (ascii o esadecimale puro)
da '0' a 'F' che indica la lunghezza
logica dei dati rimanenti (non può essere 0)
<dati> : i dati del
telegramma in esadecimale puro oppure in ascii a seconda del modo operativo
@c
Permette di uscire dallo stato di attesa innescato dal comando @R.
Risposta: <k>
@W<valore><dati>
Permette di trasmettere al dispositivo un telegramma da inviare in rete
<valore> : sempre e solo
un carattere (ascii o esadecimale puro) da '0' a 'F'
che indica la lunghezza logica dei dati rimanenti
<dati> : i dati del
telegramma in esadecimale puro oppure in ascii a seconda del modo operativo
Risposte possibili: <k> : tutto ok <E> : errore
@w<valore><dati>
Modalità rapida per mandare un telegramma da inviare in rete. Attenzione:
questa modalità si basa su di una serie di valori di default che vanno
sicuramente bene per reti Vimar by-me ma che potrebbero non funzionare su altre
reti KONNEX. Si consiglia quindi di usare per tali scopi il comando @W.
<valore> : sempre e solo
un carattere (ascii o esadecimale puro) da '0' a 'F'
che rappresenta il comando da inviare al dispositivo ('1' accendi, '0' spegni)
<dati> : indirizzo
dell'attuatore in esadecimale puro (1 byte) oppure in ascii (2 bytes) a seconda
del modo operativo
Per poter utilizzare correttamente questa
modalità è indispensabile che il valore di linea e settore del dispositivo
ricevente sia stato precedentemente memorizzato nella eeprom del pic (vedi
comando @D).
Risposte possibili: <k>
: tutto ok <E> : errore
@3
Imposta il comparatore interno al PIC a valori adeguati ad una alimentazione
di 3,3Volts.
Comando
disponibile sono con firmware 18.4x ed hardware 141113,
ATTENZIONE ! Non tutti i
dispositivi sono adatti al funzionamento a 3,3 Volt – chiedete prima di
acquistare.
Risposte possibili: <k>
: tutto ok <E> : errore
@5
Imposta il comparatore interno al PIC a valori adeguati ad una alimentazione
di 5Volts.
Comando
disponibile sono con firmware 18.4x ed hardware 141113,
Risposte possibili: <k>
: tutto ok <E> : errore
Comandi di test e
debug
@b
Pulisce tutti i buffers di ricezione.
Risposta : <k> : tutto ok
@h
Espone un menu di help – solo in modalità ASCII.
@q
Query version – solo in modalità ASCII.
Risposta : <k>
seguito dalla VERSIONE : tutto ok
@l
Attiva un log a video dei messaggi ricevuti e trasmessi – solo in modalita
ASCII.
Risposte possibili: <k>
: tutto ok <E> : errore
@c
Pulisce lo stato di attesa - solo in modalita ASCII.
Risposte possibili: <k>
: tutto ok <E> : errore
@d
Dump di tutti i buffers di ricezione – solo in modalita ASCII.
Risposte possibili: <k>
: tutto ok <E> : errore
@s
Sbilancia l’indice dei buffers di ricezione simulando una ricezione di
messaggio – solo in modalita ASCII-
Risposte possibili: <k>
: tutto ok <E> : errore