Home
Accesso / Registrazione
 di 

Un prototipo veloce residente su MCU ed uno sviluppo educativo comprensivo di chip wireless Zigbee

Un prototipo veloce residente su MCU ed uno sviluppo educativo comprensivo di chip wireless Zigbee

Il compito della sub-routine pedal è quello di muovere il pedale. La prima cosa che andremo a fare è quella di cancellare la posizione del pedale. Il pedale è largo 3 pixel, per cui abbiamo l'istruzione di rimozione 3JM. Ora andremo a calcolare la nuova posizione del pedale, tramite il sensore tilt, il convertitore da analogico a digitale, collegato all'accelerometro. La posizione è in metà scala a 1.65 volts. Il convertitore analogico digitale restituisce il valore in millivolts. Quindi andiamo a sottrarre 1650 e poi dividiamo per cento per ottenere un valore che va da -5 a +5 per conoscere di quanti pixel muovere il pedale, per poi aggiungere questo valore alla posizione corrente del pedale. Se la posizione del pedale andasse fuori limite, riportiamo la posizione del pedale dentro i limiti.

E' una matrice di LED 16x5. Andiamo a settare la nuova posizione del pedale semplicemente mostrando i 3 pixel nel punto giusto. Questo è ciò che compie la sub-routine ogni 50 millisecondi in modalità asincrona, gestendo la posizione del pedale mentre il programma main gestisce la posizione della palla.

Manca soltanto la sub-routine loose. Viene richiamata solo quando l'utente perde la partita. Innanzitutto, non dobbiamo mostrare il pedale mentre sta scorrendo il messaggio "you lose" e mentre si ascolta la musica. Quindi, nascondiamo il timer virtuale #1 così da interrompere il sub-routing pedal. Verrà mostrato alla fine quando riavviamo la sub-routine paddle di nuovo ogni 50 millisecondi per una nuova partita. Puliamo il display, cancelliamo ogni cosa attiva, portiamo via lo spostamento ed eseguiamo un suono. PArtiamo da 5000Hz e decrementiamo di una nota ogni 50 millisecondi finché non raggiungiamo i 400 Hz. Quindi portiamo a off l'audio mentre spostiamo il messaggio You Lose in modo asincrono. Dobbiamo attendere lo spostamento fuori dal display prima di far apparire un'altro messaggio e nascondere l'interrupt del timer per far continuare la sub-routine paddle. Poi, ritornando dalla sub-routine, interrompiamo il loop del filo d'ingresso, ritorniamo sul loop del filo d'uscita ed avviamo un nuovo gioco.

Okay. Facciamo una piccola demo wireless. Abbiamo la scheda badge collegata alla card 132OX RFC. Vi accorgerete che ci sono un paio di differenze. Innanzitutto, MCU comunica con il chip wireless Zigbee attraverso QSPI, un multiplex sullo stesso pin utilizzato per pilotare i LED. Il sistema operativo rileva che è presente il chip Zigbee e non trasmette il traffico LED su questi pin, ma quello QSPI. Inoltre qui abbiamo un prompt dei comandi.

Ma parliamo della scheda. Sul nodeid7 abbiamo lo Zigbee. Una scheda Ethernet 52233 con lo stesso sistema operativo sul nodeid3. Ora lo connettiamo in remoto, non avendo un cavo per la connessione ethernet, comunicheremo con una connessione wireless; andremo a scrivere un piccolo programma.

10 dim led as pin

Come uscita analogica creiamo una variabile limitata al pin dtin0 dove avremo il main LED, configurato come uscita analogica, con impulso a modulazione d'ampiezza. Quindi variando il ciclo di lavoro del PWM, varierà l'intensità dei LED.

20 while 1 do 30, endwhile

Questo è un loop infinito. E questo è solo la metà del programma e la scriviamo sul nodeid3. L'altra metà la scriviamo sul nodeid7. Sostanzialmente, il nodeid3 rimarrà così per sempre con una variabile limitata a un pin, e questa variabile viene modificata dall'altro nodo. Una volta completato il loop, premiamo Ctrl+D per tornare indietro verso l'altro nodo.

Notiamo che qui esiste già un programma. La prima cosa che compie è dimensionare una variabile di nome LED, nome già presente sull'altro nodo. Ma questa variabile non si trova qui. Si trova attualmente in remoto su nodeid3.

dim LED as remote on nodeid3

Ogni volta che modifichiamo questa variabile, inviamo con il Zigbee la richiesta all'altro nodo di modificare la variabile, la quale è limitata al pin in cui è presente il LED. In questo modo abbiamo realizzato un variatore di luce LED remoto.

Ora realizziamo lo stesso lavoro svolto in precedenza. Dichiariamo le variabili sleep e tilt, per poter comunicare con l'accelerometro, per poi avviare questo semplice loop ogni 100 millisecondi, prendiamo il valore tilt e lo assegniamo a LED il quale lo invia via wireless all'altro nodo, così quando mandi in tilt questa scheda, LED sull'altra scheda risponde con una variazione di luce e intensità.

Quindi possiamo avviarlo, mandiamo in tilt e vedremo che sull'altra scheda il LED cambia d'intensità quando muoviamo l'accelerometro. E' abbastanza interessante. Sono 3 linee sull'altra scheda, 8 su questa, per un totale di 11 linee per un programma di controllo del sistema wireless embedded. Ma ci vogliono meno linee per un semplice switch wireless.

Okay. Cosa vi mostrerò ora? Il viaggio nella mia casa non è completa se non visitate il mio forno per toast. Ha una termocoppia ed una realtà a stato solido. Sotto questo piccolo semplice circuito c'è un 52221 in esecuzione con sistema operativo, collegata in una breadboard senza saldature. E' in esecuzione Basic, ed un programma in Basic controlla il forno per toast. Ho montato una scheda Zigbee per il wireless, con tanto di batteria; possiamo anche ricostruire il PCB dell'intero forno.

Abbiamo visto abbastanza oggi. Abbiamo visto come il mio sogno diventa realtà. Questo è un vero computer in un chip, non soltanto un chip programmabile. Ha un sistema operativo, un editor, un compilatore, un debugger, tutto interattivo. Possiamo accedervi via USB o tramite Ethernet, o tramite Zigbee. Possiamo collegare una scheda sul retro. Abbiamo nodi di controllo per Zigbee. Abbiamo una piccola batteria CR2 di mantenimento. C'è un 52221 in esecuzione. Forse il 51JM28 è un pò eccessivo come costi, ma ha tutto ciò di cui avete bisogno per poter essere installato praticamente ovunque, sul vostro attico, o in cortile. Potete scrivere un programma senza leggervi le 500 pagine del manuale. Volete usare un convertitore analogico-digitale: una linea di codice. Volete usare un timer: una linea di codice. Volete usare periferiche: una linea di codice. Il vostro programma non dovrà occuparsi di gestire le periferiche. Tutto è connesso tra loro. Potete comunicare tra un nodo ed un altro, anche mentre il programma è in esecuzione. Potete realizzare il vostro interruttore di luce remoto con una manciata di righe di codice.

Il mio obiettivo è di portare lo sviluppo di sistemi embedded alla portata di tutti, per coloro che non vogliono leggersi 500 pagine di un manuale. La mia intenzione è quella di portare sistemi embedded nelle scuole, per arricchire le ricerche in laboratorio per l'acquisizione di dati o per il controllo degli stessi. Magari per controllare una stazione meteorologica senza installare un solo filo.

Con questi nuovi processori della Freescale, 51JM28, 52221 e 52233 non ci sono scue per non realizzare qualsiasi sistema embedded. Abbiamo tutto ciò di abbiamo bisogno con questi processori. Tutto ciò che dobbiamo fare è renderlo semplice nell'uso, esporlo al giusto utente, presentarlo come un un computer interattivo programmabile in un solo chip. Grazie.

Altre due cose. Sapete che questa base è ingegnosa. Potrebbe essere un semplice e dolce modo per realizzare rapidamente un prototipo, o qualcosa del genere. Ma non penserete mica che possa spedire qualcosa di così basilare? Non voglio lasciarlo basilare. Voi direte, puoi aiutarci? Certo. Ed ecco la seconda cosa: dove posso trovare altre informazioni? Bene. E' tutto sul sito web www.cpustick.com. E' un tipo di memory stick, solo che per cpu. Potete collegare la vostra USB, scrivere e salvare il vostro programma. potete immaginare ciò che volete collegare, ogni cosa. Su questo sito ci sono molte cose interessanti: ci sono le versioni dei sistemi operativi per il 51JM128, e quelli specifici per le schede badge con i requisiti per il boot loader della scheda badge. Ci sono le versioni per il 52221 USB e quelli 52233 per la Ethernet. Ci sono anche i sorgenti per i progetti skeleton, l'inizializzazione del codice usato dai sistemi operativi, come per la manipolazione dei pin e delle periferiche, incluse flash memory, il wireless Zigbee, timers, impulsi a modulazione d'ampiezza, generatori di frequenze, convertitori AD, ingressi e uscite digitali, qualsiasi cosa. E' tutto nei codici sorgenti dei progetti skeleton scritto in basic, e se volete, potete convertirli in codice per il linguaggio C così da realizzare la stessa cosa ma con un codice a basso livello, usato dal sistema operativo come un programma scritto in C.

Comunque, ciò che troverete in questo sito web è il mio sogno che diventa realtà, e penso che possiamo fare molte cose eccitanti, poiché questi processori stanno sempre più migliorandosi, e sono felice di farne parte. Grazie a tutti.

Leggi anche: CPUStick

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 0 utenti e 21 visitatori collegati.

Ultimi Commenti