PIC Clicker, semplice scheda di MikroElektronika con grandi potenzialità

PIC Clicker è il nome di una piccola scheda scheda di sviluppo ma anche una serie di relative board di espansione, prodotta da MikroElektronika, azienda apprezzata per i suoi prodotti per lo sviluppo software e hardware. Nell'articolo vi presento la mia esperienza con Pic Clicker e l'ambiente MikroC, nonchè un progettino che ho sviluppato con questi, facile da modificare, da cui potete partire per realizzare una semplice tastiera USB HID!

PIC Clicker è un prodotto che si colloca nella fascia di mercato (ormai abbastanza satura) delle development board destinate prevalentemente agli hobbisti e questa è più o meno allineata con la concorrenza come prezzo e caratteristiche. Quindi un'altra schedina di sviluppo piccola, senza tanti fronzoli, veramente facile da usare e che promette grandi prestazioni. Mi ricorda un po' la launchpad della Texas Instruments, con la differenza che questa costa un po' di più (e che è un PIC a 8 bit).

La scheda

Si chiama PIC Clicker, ed è una piccola schedina di sviluppo prodotta da Mikroelektronika che monta un microcontrollore PIC a 8 bit serie 18F.

La schedina è minimale: sul PCB troviamo solamente il microcontrollore, il regolatore di tensione, due pulsanti (più quello di reset), due LED e ovviamente il connettore USB. Lo stretto necessario per iniziare a scrivere un po' di codice.

Si trova già installato anche il bootloader USB. In alternativa sono presenti a lato i connettori per il programmatore. Nota dolente: la disposizione dei pin per il programmatore non è standard ICSP, quindi se volete usare il vostro programmatore Microchip o strumenti di debug (non presenti sulla scheda) dovete fare un po' di attenzione al collegamento. É solo una piccola noia, dovuta al fatto che Mikroelektronika ha un suo programmatore che usa una piedinatura diversa; tuttavia non capisco perché abbia dovuto cambiare la disposizione di un connettore così popolare come l'ICSP.

Il PIC

Come anticipato il PIC (precisamente PIC18F47J53) montato su questa scheda è veramente una bomba! Nonostante sia un microcontrollore ad 8 bit, è capace di 12 MIPS e ha ben 128 KB di memoria flash, oltre ad una lunga serie di periferiche integrate, compresa una USB 2.0 full speed! Vediamo con ordine alcune caratteristiche tecniche:

  • core 8 bit a basso consumo energetico;
  • 128 kB di flash e 3800 bytes di RAM;
  • connettività USB 2.0;
  • Peripheral Pin Select;
  • ADC a 12 bit e 13 canali;
  • RTC integrato;
  • periferica CTMU per la gestione di pulsanti touch capacitivi;
  • moduli PWM e Timers (8 e 16 bit);
  • varie periferiche di comunicazione SPI, I2C, UART (e c'è anche il DMA).

C'è veramente tutto, e con la semplicità dell'architettura 8 bit Microchip si riesce in poco tempo a sviluppare applicazioni interessanti.

Cosa possiamo farci

La scheda arriva in una bella confezione di cartoncino (niente buste antistatiche!) con un pieghevole che ne illustra brevemente le caratteristiche, e permette un getting started semplice ed immediato. Sul sito ufficiale invece troviamo un paio di esempi da caricare direttamente e un breve manuale. Caratteristica principale di questa scheda è il connettore mikroBUS, che raggruppa molte periferiche del PIC (troviamo le periferiche di comunicazione seriale/SPI/I2C, interrupt, ADC, PWM, IO) e sul quale montare schede di espansione, chiamate click boards. Mikroelektronika ne fornisce moltissime, ognuna con caratteristiche o connettività particolari. Si possono trovare click board con modulo Wi-Fi, Bluetooth, anche low energy, ricevitori IR, ADC, DAC, NFC, RTC, e molte altre; ce ne sono veramente tantissime, anche se per alcune il prezzo è un po' alto a mio parere. Il lato positivo è che si può montare comunque una millefori, opportunamente tagliata, e confezionare una scheda di espansione a casa! L'idea del connettore con tutti i bus di comunicazione è buona, e infatti si riesce ad attaccarci una infinità di click boards.

Appena l'ho ricevuta ho iniziato subito a pensare cosa potessi farci di bello, e dopo aver caricato i semplici esempi reperibili sul sito ufficiale, ho deciso che sarebbe diventato un dispositivo USB HID e quindi ho iniziato ad imparare come funziona la comunicazione USB classe HID. Per curiosità (visto che ho già usato l'ambiente MPLABX di Microchip) ho voluto provare qualcosa di nuovo e ho scelto quindi tra i compilatori forniti da MikroElektronika, ovvero mikroPascal, mikroBasic e mikroC. Ho scelto mikroC, perché non conosco il Basic, e il Pascal non mi piace, ma è doveroso segnalare che MikroE è famosa soprattutto per il MikroBasic che offre un compilatore Basic per PIC che non ha nulla di che invidiare ad altri compilatori.

L'IDE che fornisce mi ha sorpreso per velocità e leggerezza (si scarica solo un eseguibile da 27 MB!), ha un una discreta quantità di librerie che sembrano veramente semplici da usare, ed è molto user friendly a mio parere. Mancano alcune funzioni avanzate, presenti in ambienti di sviluppo professionali ma per progetti non troppo grossi e complicati va benissimo. La programmazione avviene in modo integrato tra codice e tool integrati nell'IDE. Per esempio non si trovano le classiche righe con le direttive include all'inizio di un file, poiché si sceglie da progetto quali librerie utilizzare e quali no. Inoltre, sempre tra le impostazioni di progetto, attraverso una finestra, si scelgono alcuni bit di configurazione per molte periferiche come watchdog, oscillatore, PLL, ADC. Questo approccio può piacere o non piacere, personalmente mi sembra un buon compromesso tra usabilità e flessibilità (e offre anche una portabilità eccezionale), anche se io sono più per il codice puro, poiché offre un maggiore controllo su ciò che si sta facendo (o meglio scrivendo). MikroC PRO è disponibile in versione gratuita con la limitazione di 4k work di programma.

schermata MikroC pro, con la finestra di impostazione del progetto

L'ecosistema MikroElektronika

Riassumendo, le cose che secondo me MikroElektronika ha fatto bene sono:

  • IDE/compilatore mikroC, veramente user-friendly, leggero, è pure ANSI-C, assolutamente da provare!
  • Librerie già pronte, quasi Arduino-style;
  • PIC Clicker, buona schedina, manifattura di ottima qualità, ma il merito è anche di Microchip che ha sfornato un microcontrollore veramente ben fatto e completo.

Le cose che invece mi sono piaciute poco sono:

  • supporto solamente per il loro programmatore, tale mikroProg, costo 99$. Il supporto al PicKit in realtà ci sarebbe (ma non come debugger), impostandolo dal menu strumenti ma non è altro che una chiamata al tool esterno di programmazione;
  • connettore per la programmazione non in standard ICSP;
  • costo, abbastanza alto per alcune Click Boards (anche il PIC Clicker se vogliamo è un po' overpriced).

In definitiva è un po' un ambiente chiuso quello di MikroElektronika, le librerie ci sono, e si riesce a sviluppare parecchio, anche cose complesse. La documentazione però poteva essere fatta meglio soprattutto per il fatto che i sorgenti delle librerie non sono visibili all'utente, e ciò è limitante a mio parere. Inoltre, per lavorare senza noiosi intoppi bisognerebbe restare all'interno del seminato MikroE, e dotarsi, quindi, del loro strumento di debug, delle loro schede e ovviamente del compilatore (quello non costa poi molto, 250$ per un compilatore di livello professionale non sono molti).

Ne approfitto qui per segnalare che proprio mentre scrivo queste righe si celebrano i 10 anni della nascita dei compilatori MikroElektronika: buon compleanno!

Applicazione USB HID

Dunque come vi dicevo l'applicazione che ho sviluppato è stato il pretesto per imparare qualcosa sulla comunicazione USB HID. Praticamente si tratta dell'hello world della comunicazione HID: la tastiera. Modificando il progetto già presente tra gli esempi sono riuscito a mandare al PC i caratteri che volevo, simulando di fatto la pressione dei tasti di una tastiera “virtuale”.

In poche parole, la comunicazione USB funziona attraverso dei descrittori, che non sono altro che delle serie di byte, che servono per far sapere all'host con chi e come sta parlando: host e device si scambiano i descrittori chiamati device descriptor (uno solo per ogni device), configuration descriptorinterface descriptor e infine endpoint descriptor. Questi, come dice proprio il nome, descrivono il comportamento di ogni dispositivo USB. Nei dispositivi HID vi sono poi dei descrittori supplementari: il descrittore HID e il report. In verità il report non è un vero e proprio descrittore ma contiene i dati relativi al tipo di dispositivo, quindi il “tipo” di dati trasmessi. É proprio grazie al report (in verità non solo ma in maggior parte) che il PC riconosce una tastiera e non la scambia, per esempio, con un mouse o un joystick. Una volta scritti tutti i descrittori e il report è semplice comunicare con il PC attraverso la chiamata di una semplice funzione della libreria USB di MikroC, HID_Write, che spedisce al PC il contenuto di un buffer. Ovviamente però dobbiamo spedire dati conformi a quanto precedentemente “dichiarato” nel report.

Poichè questo non è un tutorial sul funzionamento dell'USB HID, per altri dettagli vi lascio ai documenti sui quali ho studiato:

  • pagina per gli sviluppatori su USB.org, qui trovate la maggior parte delle informazioni di cui si può aver bisogno per lo sviluppo di applicazioni HID;
  • USB Complete è il supercompleto libro di Jan Axelson (diciamo pure una lettura leggera!);
  • Corso PIC USB sono invece una serie di articoli, un po' datati ma utili per capire il funzionamento della comunicazione USB.

Sul documento che riporta le HID usage table, si trova anche l'usage table specifica della tastiera, che ci servirà per sapere come vengono codificati i dati che inviamo dal PIC al PC: in pratica troveremo i codici che corrispondono ad ogni tasto della tastiera.

Ora che siamo completamente operativi non ci resta che decidere cosa fare con la nostra tastiera virtuale: si può fare un dispositivo che, alla pressione di un tasto, invia in serie i caratteri di una password che non ci ricordiamo mai (per la verità non è il modo migliore di assicurare la nostra password: sconsiglio questo utilizzo, ma è sempre una idea, che sviluppata adeguatamente, può diventare sicura).

Si può fare un dispositivo con dei tasti corrispondenti a diverse "MACRO" come CTRL+C, CTRL+V, oppure altre scorciatoie relative a programmi di grafica, o qualsiasi altro programma (o gioco).

Su sistemi UNIX sono presenti anche i codici per funzioni multimediali (che non ho testato), dunque si può implementare un semplice telecomando multimediale (in Windows questo richiede un report diverso da quello della tastiera, dunque bisogna modificare il progetto in maniera più “pesante”).

Nel progetto base che vi lascio è implementata la semplice operazione di copia-incolla tramite pressione di CTRL+C e CTRL+V simulati dal PIC attraverso la pressione di due pulsanti ma, come dicevo, potete modificare i codici per simulare qualsiasi altro tasto della tastiera.

Negli allegati trovate tutti i sorgenti del progetto in MikroC. Ho incluso anche un breve estratto dei codici tastiera (quelli dell'usage table di cui parlavo sopra) per una modifica più rapida, ma vi consiglio ugualmente di riferirvi sempre alla documentazione ufficiale, che è sicuramente corretta, precisa e completa.

Fateci sapere cosa fate con la vostra tastiera virtuale!

Allegato

USB

5 Commenti

  1. Adriano Gandolfo adrirobot 25 gennaio 2015
  2. dantave dantave 31 gennaio 2015
  3. dantave dantave 31 gennaio 2015
    • pietro.tosato pietro.tosato 31 gennaio 2015

Scrivi un commento