Usare l'USB

PIC-USB connesso al bus USB, al PICkit e alla breadboard

In fase di sviluppo Stesura preliminare In fase di sviluppo

In questa pagina viene mostrato un esempio di codice per utilizzare un PIC18 come device USB. Microchip rende disponibile un framework USB all'interno della  Microchip Libraries for Applications (MLA) che semplifica, almeno in parte, la scrittura del software. In questa pagina non viene spiegato come funziona USB: si rimanda al materiale disponibile in rete e, nello specifico, a quello fornito da Microchip stassa. Consiglio di iniziare con USB_primer.pdf.

Nell'esempio qui presentato il PIC18 si limita ad accendere o spegnere un LED dopo aver ricevuto da un PC host, tramite terminale seriale, un 1 oppure uno 0. Dopo aver eseguito il comando, risponde con la stringa "Done!".

Un esempio più articolato di codice del PIC è fornito dal programma di test scaricabile dalla pagina PIC-USB. Un esempio di codice Java per l'host, forse compatibile con Linux, Windows e Mac, è scaricabile a fondo pagina

L'hardware

Il codice è stato sviluppato per essere utilizzato con il circuito stampato PIC-USB, ma è evidentemente possibile realizzare il circuito su breadboard, semplicemente seguendo lo schema. Più complesso invece l'adattamento ad un PIC18 diverso dal PIC18F25K50 in quanto è necessario riscrivere parti consistenti del codice di esempio.

Per dimostrare il funzionamento viene utilizzato un LED collegato al pin RA0 (il cavetto blu più a sinistra nella fotografia di apertura)

Il codice di esempio

Al solito il codice è disponibile a fondo pagina, diviso in due parti:

La configurazione è piuttosto macchinosa, consiglio quindi di seguire in modo rigoroso la procedura di seguito mostrata:

  1. Collegare al solito il PICkit al PIC18
  2. Creare un normale progetto MPLAB X (per esempio: USB)
  3. Estrarre il contenuto il contenuto delle MLA in una directory all'interno di MPLABXProjects. Consiglio di lasciare il nome proposto
  4. Copiare i file presenti nel file USB_code.zip nella directory del vostro progetto. Si tratta di cinque file sorgenti (.c) e sette header file (.h)
  5. Aggiungere al progetto, nella cartella Source i cinque file sorgenti (tasto destro  → Add Existing Item → Filtrare per Source file → selezionare e aggiungere)
  6. Aggiungere al progetto, nella cartella Header File i sette header file (tasto destro  → Add Existing Item → Filtrare per Header file → selezionare e aggiungere)
  7. Creare, all'interno della cartella Source una Logical Foder di nome qualunque (consiglio: framework, o qualcosa del genere)
  8. Aggiungere alla Logical Folder appena creata i due file usb_device.c e usb_device_cdc.c presenti nella directory ../MLA_v2015_08_10/inc. Il progetto dovrebbe presentarsi come di seguito:

    I file del progetto

  9. Esaminare velocemente alcuni dei file del progetto, scoprendo numerosissimi errori
  10. Selezionare attraverso la Dashboard le proprietà del progetto e, nella sezione del compilatore XC8, le directory da includere (vedere lo screenshot seguente)

    Le include directory

  11. Aggiungere le due cartelle ../MLA_v2015_08_10/inc (usare il pulsante browser) e ../USB.X (da digitare manualmente con il nome della directory del vostro progetto). Questo dovrebbe eliminare tutti gli errori presenti
  12. Compilare il programma (sono presenti numerosissimi warning ma nessun errore - Nota 2)
  13. Collegate il connettore mini-USB presente sullo stampato ad un PC Linux/Windows/Mac, che fungerà da hist (nota 3)
  14. Trasferire il programma sul PIC18 al solito modo ed eseguirlo. Non è necessario che il PICkit alimenti il PIC in quanto l'energia può essere fornita attraverso il cavo USB collegato all'host
  15. Il PC host dovrebbe rilevare la presenza di una nuova periferica seriale. Per esempio sulle macchine linux sarà presente un nuovo device tty:
    vv@vv-15rse:~$ ls -l /dev/ttyA*
    crw-rw---- 1 root dialout 166, 0 mag 2 22:39 /dev/ttyACM0
  16. Utilizzare un terminale seriale (per esempio PuTTY oppure, come nell'esempio, CuteCom) per collegarsi all'interfaccia seriale e poter inviare i due comandi 0 e 1 che, rispettivamente spengono ed accendono il LED collegato a RA0. Si noti la risposta dal PIC18 "Done")

    Esempio di funzionamento

Analisi del codice

Il codice è decisamente complesso per una analisi approfondita. Alcuni aspetti che è utile osservare almeno superficialmente:

Codice

Note

  1. L'ultima versione disponibile al momento della stesura di queste note è la 2.13, del 10 agosto 2015; essa è solo parzialmente compatibile con i settaggi predefiniti del compilatore XC8 c1.37 (la compilazione ha successo, ma vengono segnalati numerosi warning)
  2. Se la cosa vi "infastidisce", potete impostare il Warning level del compilatore ad un livello maggiore di -3
  3. Servono quindi due cavi USB, uno per il PICkit usato per la programmazione ed il debug ed un altro per la connessione device-host, gestito dal programma appena scritto. Probabilmente è utile usare due cavi USB di diverso colore e, se possibile, due PC separati
  4. Nel codice di esempio è semplicemente un place-holder
  5. Un aiuto alla comprensione di questa e altre funzioni è disponibile nei commenti del codice, cliccando sul nome della funzione mantenendo premuto <Ctrl>


Data di creazione di questa pagina: settembre 2014
Ultima modifica: 2 maggio 2016


Licenza Creative Commons Attribuzione 4.0 Internazionale


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima