L'interfaccia seriale asincrona è un "protocollo antico", ma ancora utilizzato sebbene in un contesto ben diverso da quello di 50 anni fa. In questa pagina vedremo come utilizzarla per trasmettere dati da un PIC18 ad un PC o ad un telefonino attraverso le interfacce USB oppure Bluetooth.
Innanzitutto esaminiamo la "forma" del segnale che il PIC dovrà trasmettere:
Quando è necessario trasmettere e ricevere, vengono utilizzati due fili separati: Tx (trasmissione) e Rx (ricezione), ma l'esempio mostrato si limita ad una comunicazione simplex.
Negli esercizi qui sotto proposti trasmettitore e ricevitore si sono accordati per trasmettere secondo i seguenti parametri (nota 3):
Dato il seguente segnale, codificato con i dati sopra riportati, riconoscere il byte trasmesso.
[Risposta: 0x35 - 0011 0101]
Dato il seguente segnale, codificato con gli stessi dati sopra riportati, riconoscere i byte trasmessi. Notare il cambiamento nella base dei tempi rispetto al diagramma temporale precedente.
Il circuito è particolarmente semplice in quanto verranno utilizzati (in alternativa) due moduli già assemblati, facilmente reperibili in commercio per pochi euro:
Entrambi gli adattatori sono disponibili con connettori facili da inserire in una breadboard, come quello visibile nella fotografia di apertura; il secondo è anche uno dei moduli opzionali già presenti su PICdemo R2.
Il collegamento tra PIC e modulo è estremamente semplice:
Il primo programma mostrato trasmette continuamente, circa 10 volte al secondo, ad un terminale USB oppure Bluetooth un saluto costituito da "Hi" seguito da un a capo (i due caratteri ASCII CR e LF).
Il nucleo del codice che trovate a fondo pagina è costituito da due subroutine:
Non è necessario comprendere nel dettaglio il funzionamento di queste due subroutine, piuttosto tecniche in quanto modificano molti bit in molti registri. E' invece necessario avere chiare le funzioni svolte ed essere in grado di utilizzarle.
A fondo pagina è presente anche un secondo codice nel quale viene mostrato come trasmettere una stringa. In esso sono presenti anche tecniche non elementari, quali l'uso di stringhe e di variabili inizializzate.
Un limite del codice mostrato è legato al fatto che, all'interno della subroutine invia_byte, è presente un ciclo che attende la trasmissione del byte inserito nel registro TXREG, perdendo tempo che potrebbe essere utilizzato per attività più utili. Per valutare questo aspetto potrebbe essere utile considerare che, nell'esempio mostrato:
Tale comportamento viene a volte indicato come codice bloccante in quanto blocca l'esecuzione del codice in attesa di un evento esterno determinato, in questo caso il termine della trasmissione di un byte. Per una possibile soluzione, si veda l'esercizio 1.
Prima di collegare un PC è bene collegare un oscilloscopio per osservare il segnale trasmesso dal PIC18. Se il segnale è corretto possiamo proseguire sapendo che il lato trasmissione funziona correttamente.
Innanzitutto è necessario collegare il modulo USB al PC. Appena collegato, anche a PIC spento, dovrebbe apparire il device /dev/ttyUSB0 (o qualcosa dal nome simile), per esempio;
vv@vv-inspiron:~$ ls -l /dev/tty*
crw-rw-rw- 1 root tty 5, 0 ago 10 10:20 /dev/tty
crw--w---- 1 root tty 4, 0 ago 10 10:20 /dev/tty0
...
crw-rw---- 1 root dialout 188, 0 ago 10 10:20 /dev/ttyUSB0
Verificare inoltre che l'utente appartenga al gruppo dialout (oppure tty):
vv@vv-inspiron:~$ groups
vv dialout cdrom floppy audio dip video
plugdev netdev bluetooth pico
Per leggere i caratteri inviati dal PIC occorre usare (o scrivere) un programma per visualizzare quanto ricevuto. Per esempio di seguito la configurazione e l'uso di PuTTY.
La procedura sopra descritta dovrebbe funzionare anche con MS Windows (non testato). L'interfaccia seriale in genere è identificata come COMxx
Occorre preliminarmente installare una App per gestire terminali Bluetooth, per esempio Bluetooth Terminal. Quindi si procede all pairing tra telefono e modulo Bluetooth HC-06 / HC-04 usando i normali strumenti Android. Se richiesto, il codice di default è 1234. Prima del pairing il LED sul modulo Bluetooth dovrebbe lampeggiare lentamente, dopo dovrebbe rimanere acceso fisso.
Infine di avvia l'App, e si seleziona il modulo
Data di creazione di questa pagina: marzo 2017
Ultima modifica: 18 aprile 2018
Assembly PIC18 - Versione 0.5 - aprile 2018
Copyright 2016-2018, Vincenzo Villa (https://www.vincenzov.net)
Assembly PIC18 di Vincenzo Villa è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale