|
sorgenti di esempio e descrizione dei comandi
|
Il telecomando "virtuale" sullo schermo del PC funziona attraverso la porta seriale. I LED rossi visualizzano le uscite, i verdi gli ingressi, ed il display indica lo stato. |
La comunicazione seriale con il Nutchip avviene grazie ai piedini RX (ricezione dei comandi dal PC) e TX (trasmissione delle risposte del Nutchip). Questi piedini si collegano alla porta seriale del PC attraverso l'interfaccia che usiamo per programmare il Nutchip, che adatta le tensioni di + e - 12 volt usate dalla RS232 al livello di 0 e 5 volt richiesto dal Nutchip.
I comandi che il PC trasmette al Nutchip sono semplici parole di 4 lettere (4 byte). E' indispensabile usare solo lettere maiuscole, e non bisogna aggiungere caratteri di separazione (come ritorno a capo o spazi) fra un comando e l'altro.Il Nutchip risponde ad un comando trasmettendo sempre due byte. La porta seriale va settata a 9600,N,8,1.
Le risposte del Nutchip non sono lettere ma numeri binari che possono contenere il carattere NULL (valore binario zero).
Comando: INFR | ||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
Comando: RADI | ||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
Comando: KEY1 (ed anche: KEY2, KEY3, KEY4, KEY5, KEY6) | ||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
Comando: KEY? | ||||||||||||||||
|
||||||||||||||||
|
Attenzione a non confondere il KEY (usato per i comandi dal PC al Nutchip) con il codice del telecomando (usato per le risposte che il Nutchip restituisce al PC).
- Il primo (key) è un numero che varia unicamente da 1 a 6: in questo modo non occorre conoscere il con cui è stato programmato il Nutchip per poterlo comandare.
- Il secondo (codice) è un numero a più cifre, ed è dato dal codice trasmesso dal telecomando: in questo modo è possibile sfruttare il decodificatore del Nutchip per tutti i pulsanti di un telecomando.
Vediamo con degli esempi come il Nutchip risponde ai vari comandi. Per ogni comando abbiamo scritto la risposta del Nutchip in una tabellina, byte per byte, sia sotto forma di caratteri ASCII che come valori esadecimali e decimali.
Cominciando trasmettendo il comando INFR dal PC al Nutchip. Se usiamo l'interfaccia a transistor, che inserisce automaticamente l'eco dei caratteri, la stringa ricevuta in risposta dal Nutchip è di 6 caratteri: INFR**.
I primi 4 caratteri sono l'eco del comando trasmesso, gli ultimi due sono la risposta vera e propria e siccome non hanno un corrispondente visualizzabile sono indicati con degli asterischi.
stringa ricevuta | I | N | F | R | * | * |
in esadecimale | 49 | 4E | 46 | 52 | FF | FF |
in decimale | 73 | 78 | 70 | 82 | 255 | 255 |
Se rileggiamo il significato del comando INFR nel protocollo, notiamo che i 2 byte della risposta (FF, FF) sono il byte basso ed alto dell'ultimo codice infrarosso ricevuto: in questo caso, al numero $FFFF esadecimale corrisponde il codice 65535 indecimale.
Se premiamo il tasto azzurro P+ sul telecomando a infrarossi Visa Simplex e ripetiamo il comando INFR otterremo invece la risposta seguente:
stringa ricevuta | I | N | F | R | * | * |
in esadecimale | 49 | 4E | 46 | 52 | 20 | 10 |
in decimale | 73 | 78 | 70 | 82 | 32 | 16 |
Il tasto P+ trasmette il codice infrarosso 4128 = $1020 esadecimale. Questo numero, scomposto nel byte basso ($20 = 32 decimale) ed alto ($10 = 16 decimale), corrisponde a quello ricevuto dal Nutchip. Per ottenere il codice decimale basta fare:
codice telecomando ricevuto ricevuto = 32 + 16 * 256 = 4128
Vediamo ora cosa otteniamo inviando il comando KEY1. Questo bottone trasmette il comando KEY1 (per trasmettere gli altri comandi, da KEY2 a KEY6, basta selezionarle dalla finestrella adiacente al bottone).
stringa ricevuta | K | E | Y | 1 | * | * |
in esadecimale | 4B | 45 | 59 | 31 | C7 | 5 |
in decimale | 75 | 69 | 89 | 49 | 199 | 5 |
L'effetto di questo comando è identico a quello che otterremmo premendo il pulsante KEY1 sul telecomando.
Scartiamo le prime 4 lettere (l'eco del comando KEY1) e concentrandoci sugli ultimi 2 byte, che valgono rispettivamente $C7 esadecimale e 5.
Il primo dei due rivela lo stato logico degli ingressi e delle uscite del Nutchip: convertiamolo in binario.
$C7 = 199 decimale = 11000111 binario
I valori degli zeri e uno di questo numero binario rappresentano lo stato logico degli ingressi e delle le uscite dei piedini del Nutchip, secondo la corrispondenza seguente:
1
|
1
|
0
|
0
|
0
|
1
|
1
|
1
|
OUT4
|
IN4
|
OUT3
|
IN3
|
OUT2
|
IN2
|
OUT1
|
IN1
|
Quindi ora sappiamo che gli ingressi del Nutchip sono tutti alti, fuorchè IN3, mentre le uscite sono metà alte (OUT1 e OUT4) e metà basse (OUT2 e OUT3).
Concludiamo notando che l'ultimo byte ricevuto vale 5, quindi il Nutchip si trova nello stato st5.
Il programma che vi forniamo dispone di tre grandi pulsanti, premendoli si trasmette sulla seriale il comando corrispondente.
Cliccando il primo pulsante si invia il comando INFR, con il secondo il comando RADI. Il terzo pulsante invia il comando KEY1...KEY6 a seconda del numero selezionato nella finestrella adiacente al bottone.
Il programma mostra la risposta del Nutchip nella finestra sottostante, sia come stringa testo, che come elenco dei codici esadecimali e decimali di tutti i caratteri ricevuti.
Screenshot del programma di cui forniamo
i sorgenti nella pagina dei download:
questa immagine mostra la risposta del Nutchip al comando INFR (primo bottone
in alto).
I tre bottoni richiamano la subroutine nutchip_command, passando la stringa contenente al comando per il Nutchip.
Questa routine invia il comando sulla seriale e ne raccoglie la risposta nella stringa risp. Quindi passa la stringa alle funzioni che preparano l'output da mostrare sul video in formato ASCII, esadeciamale e decimale.
subroutine nutchip_command commentiPrivate Sub nutchip_command(s As String) il parametro s contiene il comando da impartire al Nutchip Dim risp As String la stringa risp conterrà la risposta del Nutchip al comando On Error GoTo errors prepariamoci per eventuali errori che si possono verificare con la porta seriale MSComm1.CommPort = cmbComNumber.ListIndex + 1 vediamo quale porta seriale ha scelto l'utente... MSComm1.PortOpen = True ...e proviamo ad impegnarla. Se questo fosse impossibile, si genererà un errore. risp = MSComm1.Input Altrimenti si prosegue facendo una lettura fittizia della seriale allo scopo di ripurirla da eventuali caratteri rimasti in precedenza. MSComm1.Output = s Si trasmette il comando sulla seriale... Sleep (15) ...e si attendono 15 mS per dare tempo al chip di rispondere. risp = MSComm1.Input Ora la risposta dovrebbe essere arrivata: memorizziamola nella stringa risp... MSComm1.PortOpen = False ...e liberiamo la porta seriale.
A questo punto, risp contiene la risposta del Nutchip e potete usarla a vostro piacimento.lblOutput.Caption = print_data(risp) & _
print_hex(risp) & print_asc(risp)Noi ad esempio, la visualizziamo in vari formati , usando una label.
Controllate sempre la lunghezza di risp, perchè non è detto che la risposta sia arrivata: il Nutchip potrebbe essere spento, la porta seriale sbagliata, e altro ancora...Exit Sub Usciamo dalla subroutine errors: Nel caso di un errore (il più tipico è dimenticarsi di scegliere la porta seriale o sceglierne una già usata da altri programmi)... MsgBox Err.Description, vbOKOnly, "Errori:" ...scriviamo il messaggio di errore corrispondente e abbandoniamo la subroutine. End Sub Fine routine. Notate come per ottenere una pausa precisa si sia chiamata una funzione dell API di Windows, che necessita della dichiarazione seguente:
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Nello stesso form bisogna inserire un controllo MsComm1 (controllo per la porta seriale) settato con le seguenti proprietà:
CommPort = 1
DTREnable = True
EOFEnable = False
HandShacking = 0InBufferSize = 1024
InputLen = 0
InputMode = 0
NullDiscard = FalseOutPutBufferSize = 512
RThreshold = 0
Settings = 9600,n,8,1
SThreshold = 0Valori consigliati per le proprietà del controllo MsComm
Pagine correlate
|
INTERFACCE CON ECO E SENZA ECO
|