Web site di Fabrizio Iacopetti
Risoluzione consigliata: 1024 x 768 Home Mail-me

Interprete di comandi via seriale
per PIC 16F87x - v. 1.0
Siete il visitatore n. (unavailable)
Contenuti dell'articolo

In questo articolo è brevemente illustrato un programma assembler per microcontrollori PIC - famiglia 35 istruzioni - per la ricezione di comandi da un host attraverso USART e l'esecuzione delle conseguenti azioni. Il programma si presta in particolare alla realizzazione di un sistema a microcontrollore controllato da PC. Tipiche applicazioni possono essere il controllo o la lettura delle porte di I/O del PIC, la generazione di una tensione tramite PWM, il controllo di motori passo-passo, e così via. 

Caratteristiche del firmware e hardware necessario

Il firmware descritto in questo articolo e richiedibile all'autore (gratuitamente) costituisce la base per la realizzazione di un programma assembler su microcontrollore PIC - famiglia 35 istruzioni - in grado di determinare l'esecuzione di azioni a basso livello da parte di un microcontrollore in base ai comandi di un host impartiti via USART.
I comandi possono essere a singolo byte o multibyte. Comandi a singolo byte possono determinare ad esempio l'impostazione a un dato livello logico di un determinato pin; tipico utilizzo il controllo di LED di segnalazione, il controllo di interruttori a stato solido, etc.. Comandi multibyte possono tipicamente contenere parametri dopo il codice del comando: in tal modo è ad esempio possibile impostare il periodo di una PWM e il suo duty cycle, impostare le uscite di una o più porte logiche, trasmettere dati ad altri dispositivi su porta parallela o via I2C, etc..
A seguito della ricezione e/o dell'esecuzione dei comandi, il microcontrollore può inviare all'host una risposta, che può essere semplicemente di "comando eseguito" o può contenere informazioni, ad esempio lo stato logico dei pin di input. In tal modo tramite host è possibile leggere lo stato logico di nodi di un circuito, rilevare il valore di una tensione tramite il convertitore ADC del microcontrollore, realizzare un analizzatore di stati logici, etc..
Il firmware è stato sviluppato per PIC 16F877 con sorgente di clock a 20 MHz, ma risulta adatto o adattabile senza particolari accorgimenti anche al PIC 16F877A, ad altri microcontrollori PIC 16F87x/xA e in generale ai microcontrollori Microchip con set di 35 istruzioni, anche con frequenze di clock diverse da 20 MHz.
La comunicazione seriale implementata è a 9600 bps, 8 bit dati, nessun bit di parità, 1 bit di stop. Tali  parametri non sono critici e possono essere modificati.
L'ambiente di sviluppo utilizzato è Microchip MPLAB IDE v. 7.40.
L'hardware strettamente necessario per il funzionamento del programma prevede, oltre al microcontrollore opportunamente alimentato, un quarzo per la generazione del clock con relativi condensatori, un pulsante di RESET (non indispensabile, ma consigliato), un host in grado di trasmettere con protocollo seriale. Nel caso si desideri utilizzare come host un PC che trasmette su porta seriale, o un PC con porta USB e adattatore USB-RS-232, risulta naturalmente necessario utilizzare un convertitore di livelli RS-232- TTL/CMOS.
Come sorgente di clock risulta indispensabile utilizzare un quarzo (anche un oscillatore ceramico o una sorgente esterna potrebbe essere adatti),  essendo la sua frequenza di oscillazione sufficientemente accurata e stabile al variare delle condizioni di lavoro (condizioni ambientali, invecchiamento). La generazione del clock tramite circuito RC non è generalmente accettabile, soprattutto per la sua scarsa stabilità al variare delle condizioni ambientali. La frequenza di oscillazione deve essere nota per l'impostazione dei registri che controllano la velocità della comunicazione seriale. Nel caso la frequenza di clock fosse sensibilmente diversa da quella nominale, infatti, la comunicazione seriale sarebbe soggetta a errori nella temporizzazione.
Le porte del PIC possono essere connesse ad altra circuiteria in base ai comandi che si desidera implementare.

^ Torna a inizio pagina

Riconoscimenti e avvertenze

La ideazione e realizzazione del firmware descritto sono interamente personali, sebbene certamente in rete sia possibile trovare codice analogo.
L'utilizzo del fimware è consentito per uso personale in ambito hobbistico o formativo.
Se in qualche modo si intende utilizzare il contenuto di questa pagina per scopi non puramente personali o non formativi, o in qualche modo divulgare il materiale in essa contenuto, è fatto obbligo di richiedere un permesso scritto all'autore di questo articolo (via e-mail).

PIC e Microchip sono marchi regitrati. Il programma assembler è stato sviluppato con il software Microchip MPLAB v. 7.40 disponibile gratuitamente sul sito Microchip.

Le informazioni contenute in questa pagina e il firmware descritto sono forniti "così come sono", senza alcuna forma di garanzia. L'autore di questo articolo non si assume naturalmente alcuna responsabilità per danni diretti o indiretti a persone o a cose derivanti dalle informazioni in esso contenute. 

Struttura del firmware

Il listato del programma è ampiamente commentato, per cui a seguire saranno fornite solo alcune indicazioni su di esso.

Funzionamento del programma
Dopo l'inizializzazione delle porte e dei registri per la comunicazione seriale, il programma esegue un loop infinito in cui:
1) attende/verifica l'arrivo di un byte su USART;
2) verifica se tale byte corrisponda a un comando a singolo byte o al primo byte di comandi multibyte; in caso negativo restituisce all'host via seriale un messaggio di "Comando non riconosciuto";
3) nel caso di comandi a singolo byte, passa a eseguire la sezione di codice relativa alla gestione del comando; nel caso di comandi multibyte, attende di ricevere il numero di byte successivi previsti per tale comando, tipicamente argomenti del comando, e passa a eseguire la sezione di codice relativa alla gestione del comando;
4) al termine dell'esecuzione del codice relativo al comando, che può prevedere anche l'invio di dati all'host attraverso USART, passa nuovamente alla fase 1)

Comandi di esempio implementati
richiesta di stato al microcontrollore;
impostazione di pin a livello logico alto e basso;
invio di dati al microcontrollore;
richiesta di dati al microcontrollore.

Alcune avvertenze
Prima di utilizzare il firmware così com'è, si raccomanda di controllare se la configurazione come ingresso o uscita delle porte del PIC e l'effetto che hanno i comandi implementati possono risultare dannosi per eventuali circuiti o componenti collegati al vostro sistema: in particolare, l'esecuzione dei comandi di esempio che impostano alcuni pin del PIC a un dato livello logico potrebbe danneggiare eventuali componenti collegati a tali pin o il PIC stesso.
Si raccomanda inoltre di prestare attenzione nel collegare il vostro programmatore alla scheda con PIC nel caso questo sia connesso alla seriale di un PC o ad un altro dispositivo.
Prima di collegare la scheda al programmatore si raccomanda di analizzare lo schema elettrico della scheda stessa e il datasheet del programmatore utilizzato, in particolare per quanto riguarda l'alimentazione.

^ Torna a inizio pagina

Richiesta del firmware

E' possibile richiedere il firmware all'autore di questo articolo via mail o utilizzando il form in fondo alla pagina, dichiarando di accettare le condizioni a cui il software viene ceduto (riconoscimenti e avvertenze). Il software viene ceduto a titolo assolutamente gratuito.

Conclusioni

Il firmware descritto in questo articolo costituisce un esempio e una base per la realizzazione di un programma assembler su microcontrollore PIC - famiglia 35 istruzioni - per l'esecuzione di azioni di basso livello da parte di un microcontrollore in base ai comandi di un host impartiti via USART.
Il firmare qui presentato è tratto da una versione più completa da me personalmente utilizzata. Fra le funzionalità del codice descritto non è presente il controllo della consistenza dei pacchetti scambiati via seriale e la verifica di errori su seriale (overrun, etc.). Date le finalità del progetto, tali funzionalità non sono state inserite nel codice qui presentato. In ogni caso, in alcune applicazioni è necessario utilizzare pacchetti più piccoli possibile (es. 1 byte) per ridurre al minimo il ritardo fra l'istante in cui l'host invia il comando e l'inizio dell'esecuzione dell'azione associata. In tal caso il bit di parità può risultare assai utile nel ridurre la probabilità di eseguire un comando errato a causa di problemi di comunicazioe.

Per ogni domanda potete scrivermi.
Buon lavoro.

Se volete, potete utilizzare il form a seguire per inviare i vostri commenti (anche in forma anonima) o per richiedere l'invio del codice. In quest'ultimo caso saranno prese in considerazione solo le richieste complete di nome, cognome, Paese e indirizzo mail, e in cui nel campo testo risulti presente una richiesta sensata.
 
Il vostro Paese

Eventuali commenti o richieste

Se desiderate una risposta inserite qui il vostro indirizzo e-mail

 


Se volete contattarmi potete farlo al seguente indirizzo:
f_iacopetti@libero.it