7° progetto (PIC18F45K50) – USB-Seriale PL2303

Eccoci al settimo progetto per il nostro PIC18F45K50!

Qui troverai la guida per realizzare un monitor seriale, per microcontrollori, attraverso un semplicissimo ed economico convertitore USB-Seriale, più precisamente il PL2303. Il monitor seriale in questione ci permetterà di visualizzare lo stato di un led, il quale potrà essere cambiato dalla pressione di una lettera nella tastiera del nostro pc.

Progetto completo.

PL2303.

Il PL2303 è un compatto ed economico convertitore USB-Seriale che consente di realizzare una semplice comunicazione tra microcontrollore e PC. Il risultato ottenuto dall’utilizzo di questo dispositivo è un monitor seriale, simile a quello ‘incluso’ in Arduino.

Per funzionare, questo dispositivo necessita del driver (qui) che va scaricato ed installato sul PC.

Necessita inoltre anche di un terminale in grado di gestire la comunicazione seriale, personalmente mi sono trovato molto bene con Terminal anche se non è aggiornato da tempo, svolge tutte le funzioni principali ed è di facile utilizzo. Esistono anche tante altre alternative, come Putty ad esempio.

Dettagli pratici del sensore.

Il sensore dispone di quattro pin:

  • VCC – Il pin fornisce 5V in uscita
  • GND – Il pin fornisce 0V ed è la massa dell’alimentazione
  • TXD – Il pin che invia il dato seriale
  • RXD – Il pin che riceve il dato seriale

Fasi realizzazione progetto (dopo la sua creazione).

  1. Configurazione del PIC
  2. Stesura del codice:
    1. Creazione del ciclo while infinito
    2. Settaggio iniziale (pin e dispositivi)
    3. Progettazione e stesura del programma
    4. Verifica del codice e programmazione del PIC
  3. Montaggio del circuito elettrico
  4. Test su breadboard

Configurazione del PIC.

Questa può essere fatta tramite il tool descritto nel primo progetto (qui) o configurando manualmente cioè ‘scrivendo a mano’ soltanto le configurazioni cambiate.

Stesura del codice.

N.B. A differenza del primo progetto, qui, alcuni passaggi verranno descritti superficialmente e per eventuali spiegazioni vi rimando alla lettura di esso.

Il progetto in questione necessita di una libreria in grado di controllare la porta seriale del PIC18F45K50. La libreria non sarebbe strettamente necessaria, perchè con le configurazioni di pochi registri si otterrebbe lo stesso risultato, ma dato che ce l’abbiamo usiamola!

Creazione del ciclo while infinito.

Per funzionare, il programma ha bisogno di un while infinito entro cui noi andremo a scrivere le istruzioni che verranno svolte in continuazione.

void main(void){
    while(1){
    }
}
Settaggio iniziale (pin e dispositivi).
PINComponente
RC6RXD (PL2303)
RC7TXD (PL2303)
RD1+ (LED)

Il PL2303 necessita, come abbiamo visto nella parte iniziale, di essere collegato al micro attraverso due pin soltanto: il pin RXD e il pin TXD. Essi vanno configurati rispettivamente come ingresso e uscita per le motivazioni elencate sopra.

All’interno della libreria esiste una funzione che inizializza completamente la porta seriale, settando anche questi pin. La funzione in questione gestisce anche la velocità di comunicazione della seriale (baud) e abilita o meno l’interrupt sulla porta.

L’unica cosa da fare non rimane che settare il led e decidere i parametri della seriale (9600 baud di velocità e l’interrupt disabilitato).

// Registri di configurazione del clock interno (riferimento al datasheet)
 OSCCON = 0b01110010;
 OSCTUNE = 0b00000000;
 // Registro per la configurazione dei pin (INPUT-1, OUTPUT-0)
 TRISDbits.RD1 = 0; // Pin collegato al led
 // Registro per la congigurazione del tipo di pin (ANALOGICO-1, DIGITALE-0)
 ANSELD = 0x00;
 // Inizializzo la seriale a 9600 baud e senza interrupt su di essa
 InizializzaUSART(9600, 0);
  • InizializzaUSART(Baud, AbilitazioneInterrupt) – la funzione inizializza completamente la porta seriale (per più informazioni vi rimando alla funzione), configurandola in base ai due parametri necessari.
 Progettazione e stesura del programma.
while (1) {
 while (USART_DatoRicevuto() == 0);
 Dato = USART_LeggiDato();
 if (Dato == 'a') {
 PORTDbits.RD1 = !PORTDbits.RD1;
 if (PORTDbits.RD1 == 1)
 USART_ScriviStringa("Led ON");
 else
 USART_ScriviStringa("Led OFF");
 }
 }
  • unsigned char USART_DatoRicevuto() – Restituisce 1 se è stato ricevuto un dato sulla seriale viceversa, se non è stato ricevuto alcun dato sulla seriale restituisce 0.
  • unsigned char USART_LeggiDato() – Restituisce il dato ricevuto dalla seriale.
  • void USART_ScriviStringa(Stringa) – Scrive una stringa sulla seriale (che verrà stampata a monitor)

Verifica del codice e programmazione del PIC.

Una breve ricontrollata generale a tutto il codice unita a una buona riuscita nella compilazione del progetto ci permetteranno poi di programmare il nostro microcontrollore.

Montaggio del circuito elettrico.

Fatto questo non ci resta altro che montare il circuito.

 

Mi raccomando prestate particolare attenzione alle varie alimentazioni perchè la mancata attenzione su ciò potrebbe portare alla rottura di diversi componenti.

L’alimentazione, in questo caso, viene fornita dal modulo per cui non si necessita di alcuna alimentazione esterna.

Test su breadboard.

Download.

La cartella del progetto completo, compilato (con XC8 v.1.43) e funzionante la potete scaricare qui  PIC18F45K50_USB-Seriale.X.zip

 

Lascia un commento