Francesco Ficili pic webpage

Scheda di acquisizione pic

Il Firmware

 

Per lo sviluppo del firmware è stato utilizzato il Template USB-CDC, rilasciato in versione free dalla Microchip ©, e scritto in C18. Questo template implementa la classe CDC (Communication Device Class), e sfrutta la tecnica dell’emulazione seriale sul collegamento USB per il trasferimento dei dati. Questa tecnica riduce sensibilmente l’impatto dal punto di vista software derivante dall’impiego di un collegamento USB, non esiste infatti la necessità di sviluppare driver appositi per l’applicazione (vengono sfruttati driver già esistenti in ambiente Microsoft Windows XP), mentre per quanto riguarda il software d’interfacciamento, possono essere riadattati software già scritti per la gestione di una linea di comunicazione standard RS-232.

Il ciclo principale è stato sviluppato sul modello di una macchina a stati finiti, il cui schema a blocchi è rappresentato in figura 2.

 

Il blocco “Inizializzazione Registri” contiene le inizializzazioni dei registri delle varie periferiche utilizzate, come il modulo ADC, le periferiche di interrupt, i moduli Timer, il modulo di comunicazione USB, etc.

Il blocco “Gestione Comunicazione” contiene le routine principali, e consente un’operazione di reset (che riporta allo stato di start) ed una operazione di stop (che arresta la fase di acquisizione e consente di effettuare il soft detach del dispositivo dalla porta USB).

Com’è noto, per ottenere una buona digitalizzazione del segnale è necessario che gli intervalli di campionamento avvengano ad istanti ben definiti nel tempo. Questa necessità si scontra con la natura non deterministica del protocollo di trasmissione USB, che essendo centrato sull’host, e di conseguenza sul controller, demanda a quest’ultimo la gestione delle tempistiche di accesso al bus. Non è quindi possibile acquisire un campione, inviare una richiesta al controller per ottenere il controllo del bus ed inviare il dato, perché le richieste di accesso verrebbero soddisfatte con tempistiche diverse e non determinabili a priori. E’ necessario quindi ricorrere ad una tecnica ad interrupt per la gestione del campionamento, ed implementare un buffer circolare sfruttando la memoria interna del microcontrollore. Con questa tecnica gli intervalli di campionamento avvengono ad istanti ben definiti, i campioni vengono accumulati nel buffer e trasferiti in burst ogniqualvolta al device viene accordato un accesso al canale di trasmissione.

Figura 2