SCSgate

SCSgate è un modulo di interfaccia tra il bus SCS Ticino 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 – SCS è un bus “proprietario” che non è lecito replicare con dispositivi commerciali.

Scopo del modulo è di consentire a dispositivi esterni (computers, Arduino, …) tramite porta seriale o USB di ricevere e inviare messaggi sulla rete SCS (accendere e spegnere luci, tapparelle, ecc...) - l'interfaccia si riferisce SOLO ai moduli di automazione, non alla trasmissione dati (citofonia, video, ecc...).

Interfaccia SCSgate: Connessioni

                                       

 

Oppure

La scheda ha 3 connettori:

-        Il connettore di destra va collegato al bus SCS rispettando le polarità indicate + e – .

-        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: con il connettore SCS collegato al bus domotico ed il circuito alimentato, il trimmer va tarato per avere su questi pin 0,3 Volts (positivo a sinistra, negativo a destra)

 

-        Il connettore di sinistra a 5 o 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=non usato

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

Sui pin 2 e 3 del connettore di sinistra va fornita una alimentazione stabilizzata a 5V 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 connettore a 4 pin:

La versione con USB grande (a 5 pin) va collegata facendo combaciare il pin 1 di mcp2200 con il pin 1 di scsgate (vedi freccia), il pin 6 di SCSGATE rimane libero.

La versione con USB piccolo (a 4 pin) va collegata facendo combaciare il proprio pin 1 con il pin 2 di SCSGATE, il pin 1 e il pin 6 di SCSGATE rimangono liberi.

 

 

 

Test con il PC

Può essere effettuato collegando la scheda MCP2200 al connettore a 5 pin da un lato, 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, va utilizzata l’utility di configurazione per MCP2200 per impostare la velocità di 115200 baud (se lo avete acquistato da me è già programmato).

Attraverso la schedina MCP2200 collegate il dispositivo SOLO al PC: il led deve lampeggiare.

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

SCSgate V 18.04

@M[A|X] : modo ascii | hex

@F[0|1|2|3|4] : filtro

@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ì:

SCS[0]: A8 32 00 12 01 21 A3

SCS[1]: A5

SCS[2]: A8 B8 32 12 01 99 A3

SCS[3]: A8 B8 32 12 01 99 A3

SCS[4]: A8 B8 32 12 01 99 A3

 

SCS[5]: A8 32 00 12 00 20 A3

SCS[6]: A5

SCS[7]: A8 B8 32 12 00 98 A3

SCS[8]: A8 B8 32 12 00 98 A3

SCS[9]: A8 B8 32 12 00 98 A3

 

SCS[0]: A8 31 00 12 01 22 A3

SCS[1]: A5

SCS[2]: A8 B8 31 12 01 9A A3

SCS[3]: A8 B8 31 12 01 9A A3

SCS[4]: A8 B8 31 12 01 9A A3

Le spiegazioni di quello che vedete le trovate sul documento di analisi del protocollo SCS. Il secondo byte della prima riga è l’indirizzo del dispositivo acceso o spento (nel nostro esempio 31).

Provate ad accendere e spegnere il dispositivo con i comando “@w131” e “@w031” – se il dispositivo risponde siete a posto!

 

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

Il colloquio avviene tramite porta seriale con livelli TTL (0-5V) 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 un po’ di esempi di utilizzo con Arduino. Sono esempi dimostrativi e vanno adattati alle proprie esigenze.


 

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”).

 

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 (0xA5) vengono ignorati.

3 : comprende sia il filtro “1” che il filtro “2”.

4 : i messaggi di ACK e i messaggi di stato vengono ignorati.

 

Risposte possibili: <k> : tutto ok <E> : errore

 

@D<valore> [dalla versione 18.30]

Permette di impostare il valore del byte di “numero rete” nei messaggi – se il comando non viene mai inviato o se il valore è 0x20 (blank) il numero di rete viene individuato dai messaggi che transitano in rete.

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

<valore> : sempre e solo un carattere (ascii o esadecimale puro) da '0' a 'F' che rappresenta il comando da inviare al dispositivo ('0' accendi, '1' 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 dispositivo abbia ricevuto dalla rete almeno un telegramma dal momento dell'accensione – in caso contrario usa alcuni valori di default come indirizzi di rete.

Risposte possibili: <k> : tutto ok <E> : errore

 

Dalla versione 18.30 i valore impostati con i comandi @M, @F, @D vengono memorizzati nella eeprom del PIC e rimangono impostati anche spegnendo e riaccendendo il dispositivo.

 

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. Dalla versione 18.30 anche in modalità HEX.

Risposta : <k>  seguito dalla VERSIONE : tutto ok

 

@l

Attiva un log a video dei messaggi ricevuti e trasmessi – solo in modalita ASCII. Dalla versione 18.30 anche in modalità HEX.  In modalità HEX il formato dei dati ricevuti è il medesimo del comando  @r.

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

 

 

@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