Controllo radio per tabellone segnapunti - Software e firmware principale

Data la necessità di controllare in modo rigido la temporizzazione e la relativa semplicità del compito da svolgere, il software del trasmettitore è stato scritto in assembly.

L’ambiente di sviluppo utilizzato è stato PIC Simulator IDE, dotato di editor, compilatore assembly, simulatore di CPU e di periferiche.

Per permettere il corretto funzionamento del programma, i fuses vanno impostati nel modo seguente:

Brown-out reset: abilitato
Flash program memory code protection: disabilitato
Data EEPROM memory code protection: disabilitato
Power-up timer: abilitato
Watchdog timer: disabilitato
Low voltage in-circuit serial programming: disabilitato
RA5/MCLR pin function select: digital input
Oscillator selection: XT

La struttura del programma è riassunta nel diagramma di flusso seguente:

Viene attivata un’uscita alla volta e sono letti gli ingressi. Se un ingresso è attivo viene salvato il codice corrispondente nel registro W. Questa operazione è ripetuta per ognuna delle 5 uscite dopodiché, se il codice in W non è uguale a 0, significa che è stato premuto un tasto. In questo caso al radiotrasmettitore vengono inviati il codice ed il suo complementare. Segue una breve pausa e poi la routine riparte da capo.

(clicca sull'immagine per vederla più grande)

Il tasto Funzione, pur facendo parte della tastiera, non viene controllato durante la sua lettura ma è gestito semplicemente incrementando di 1 il comando da inviare nel caso sia premuto. Per poter permettere quest’operazione tutti i codici corrispondenti ai pulsanti sono multipli di 2, come si vedrà nel codice sorgente.

Se si attiva il tasto funzione da solo, non viene inviato nessun comando.

Per inviare un comando alternativo è necessario premere e mantenere premuto il pulsante Funzione per poi attivare il secondo tasto della combinazione.

Il PIC ricevitore assocerà il codice del tasto alla sua funzione primaria ed il codice del tasto aumentato di 1 alla procedura da eseguire quando quel pulsante viene premuto insieme al tasto Funzione.

Se desiderassimo che la pressione del tasto Funzione e del tasto ±1’’ decrementasse di un secondo il timer, potremmo implementarlo facilmente senza dover modificare il codice anche sul trasmettitore.

Se il codice corrispondente a ±1’’ fosse 4, premendo quel tasto da solo si invierebbe 4 ma, tenendo premuto il tasto Funzione e premendo quel pulsante, si invierebbe il comando 5.

All’interno del ricevitore il comando 5 sarà dedicato alla diminuzione dei secondi del timer.

Qui di seguito puoi scaricare il codice sorgente in assembler o il file esadecimale già compilato.


Codice Sorgente