Francesco Ficili pic webpage

Scheda di acquisizione pic

Il ciclo principale del firmware sarà quindi composto da due funzioni, una di background che si occupa della gestione della comunicazione e la seconda, prioritaria rispetto alla prima, che viene invocata ad intervalli regolari attraverso una richiesta di interruzione. Per la temporizzazione delle richieste di interruzione viene utilizzato il modulo Timer0.

Il codice in C18 che implementa la funzione di gestione dell’acquisizione è riportato in figura 3:

Come si vede all’interno dell’interrupt viene gestito in polling il controllo sul bit GO/DONE, che viene utilizzato per dare inizio alla conversione e per segnalare un’acquisizione completata. Nel passaggio successivo il contenuto dei 2 registri ADRESL e ADRESH (risultato della conversione) viene immagazzinato nelle due variabili di servizio sample e sample2. A questo punto si passa alla fase successiva, ossia lo stoccaggio dei dati nei buffers di trasferimento.

La struttura dati scelta per implementare il sistema di trasferimento è un doppio buffer di 100 elementi. Ogni campione occupa nel buffer 3 byte, due sono utilizzati per contenere i 10 bit del campione, e una contiene il valore fisso 255, e serve come flag per indicare l’inizio del blocco dati. Ad ognuno dei due buffer sono associati due puntatori, count1 e count3. Il primo punta il primo byte di ogni campione, il secondo punta uno dei due buffer. Il valore di count3 è incrementato ogni volta che un buffer viene trasferito, e all’inizio di ogni ciclo di stoccaggio dei campioni sul buffer viene controllato se il suo valore è pari a 2 ed in caso positivo la variabile viene azzerata. In questo modo il campo di valori ammessi per count3 è 0 o 1, e la variabile cambia di stato ogni volta che un buffer è pronto per il trasferimento.

 

Figura 3