
Usare i microcontrollori è più semplice di quanto possiate pensare. Con uno starter kit economico e possibile iniziare subito con i microcontrollori. 3 di questi tools di sviluppo subito in omaggio!
Iniziare con i microcontrollori è molto semplice sia per l'hobbista che per lo studente che si avvicina per la prima volta al real-world! I concetti esposti in questo articolo valgono per tutti i microcontrollori programmabili (detti anche flash) che possono essere cancellati e riprogrammati con un semplice click di mouse
Tali concetti sono validi sia per microcontrollori pic, che per microcontrollori avr, anche se nell'esempio userò microcontrollori freescale. Un minimo di teoria dovete averla, ma vi assicuro che passare dalla teoria alla pratica è facilissimo.
La prima cosa che dovete avere a mente è che l'hardware è lo schema elettrico con il microcontrollore ed il firmware è il programma, da voi scritto, che gestisce il microcontrollore e che il sistema di sviluppo comprende un software per PC (in questo caso il Codewarrior) che comunica con una scheda di sviluppo (in questo caso Spyder USB) in grado di programmare il microcontrollore ed eseguire istruzione per istruzione il firmware (programma per microcontrollers). In questo modo una volta scritto il firmware in assembler oppure in linguaggio c, potete verificarne passo passo il funzionamento (debug).
E' sicuramente piu semplice a farsi che a dirsi!
Esempio accensione led con microcontrollore: se dovete accendere un led dovrete operare sia a livello hardware che a livello software (firmware). Hardware microcontroller: collegare un pin del microcontrollore ad una resistenza e poi la resitenza ad un led collegato poi a massa (gnd), il valore della resistenza dovrà essere calcolato in base alla tensione di uscita del pin del micro, per ora considerate R=1K.Firmware: per semplicità lanciare uno dei firmware demo, già con tutte le configurazioni per il microcontrollore usato e scrivere l'istruzione in assembler o C che attiva il pin della porta dove abbiamo collegato il led. Attivare un pin, significa metterlo a on, quindi significa metterlo a 1 logico e quindi in uscita si avrà la stessa tensione di alimentazione del microcontroller, in genere 5V oppure 3,3V. Tale tensione, attraverso la resistenza di prima, permetterà lo scorrere della corrente nel circuito ed il LED si accenderà!
Vi assicuro che fate prima a farlo che a leggere quanto scritto
Schema elettrico dello Starterkit per microcontrollori
Tramite lo schema proposto potete realizzare la vostra applicazione sfruttando il connettore I/O e costruendo su di esso il vostro schema, che può essere anche una resistenza ed un led.
Nel nostro caso, sfrutteremo il led già a bordo della scheda di sviluppo usb. Infatti come potete verificare, il led è collegato al pin 0 della porta A denominato PTA0.
Programma del kit di sviluppo per microcontrollori
Una volta scricato il programma Codewarrior (gratuito) dal sito Freescale, potete fare delle simulazioni, oppure installare anche il plugin per lo spyder usb, disponibile nella confezione con il kit.
Una volta lanciato il Codewarrior dovete caricare il progetto demo.mcp e poi avviare il debug tramite l'icona con la freccia verde e partirà il real-time debug per avere il pieno controllo del microcontrollore. Ecco un esempio semplice semplice di codice scritto in linguaggio c per far lampeggiare un led, il led montanto sul pin PTA0, appunto.
///////////////////////////////////////////////////////////////////////////////////////// // MAIN // /////////////////////////////////////////////////////////////////////////////////////// void main(void) //la parte principale del programma, il main { unsigned int i; // definisco la variabile i EnableInterrupts; // abilito gli interrupt PeriphInit(); // abilito gli interrupt da periferica, mi serve per il timer for(;;) // ciclo infinito, il programma rimane sempre qui dentro { PTAD ^= 0x01; // cambio stato al pin, se era 1 diventa 0 e viceversa for (i=0; i<DELAY_TIME; i++) // ciclo definito dal DELAY_TIME Delay_100us(10); // 1 ms delay } // ottengo un ritardo di 1/2 secondo } // quindi il led lampeggerà ogni 1/2 secondo (500mS)
Facile no! Ora puoi modificare il firmware a tuo piacere, riprogrammare il micro, testare passo passo il codice da te scritto con semplici comandi, come START (F5) SINGLE STEP (F11) HALT (F6) RESET
Ti invito anche a leggere alcuni articoli tecnici di approfondimento
Inizia subito a sperimentare, puoi farlo con il sistema che vuoi, questi concetti sono universali, oppure provare a vincere uno starterkit USB Spyder! Ecco come:
Vuoi ricevere gratuitamente uno dei 3 Starter Kit USB per Microcontrollori? Dimmi perche? E perche ti piace L'Elettronica e L'Elettronica Open Source!
Ma dimmelo tramite il tuo blog!
1) Scrivi un post nel tuo blog
2) Condividi il post con i tuoi amici di Facebook, Twitter e Linkedin
3) Segnalami quanto fatto tramite il modulo contact del mio profilo
I 3 migliori verranno premiati con uno starterkit usb, che riceverete direttamente al vostro indirizzo, spese di spedizione comprese! Non hai un blog? Leggi qui!
Allora, se vuoi imparare in pochissimo tempo ad usare i microcontrollori, e ricevere una chiavetta usb starterkit in omaggio, non aspettare, corri subito a scrivere sul tuo blog!
ATTENZIONE: per accontentare il maggior numero di utenti possibile, a questo contest NON possono partecipare i 5 vincitori di FTPmicro della scorsa settimana. Perdonatemi, ma con tutti i premi che abbiamo messo e che metteremo in palio nei prossimi giorni, saprò farmi perdonare

In americano si usa dire “from scratch”, molto famosa come affermazione dopo “for dummies” credo.
La traduzione in “partendo da zero” mi trova in accordo anche se personalmente preferirei qualcosa di più, ma è giusto dare spazio a tutti.
Condivido anche il divieto ai vincitori di ftpmicro, in quanto dovrebbero già evidentemente conoscere i microcontrollori e quindi dare spazio a chi parte da zero.
Affrettatevi, ne rimangono solo 2
Il primo vincitore è
http://it.emcelettronica.com/user/15361
Ciao anch’io ho scritto perchè mi piace l’elettronica e specialmente quella open source!
Grazie mille Emanuele! 🙂
Ciao anch’io ho scritto per voi
Ciao, ho scritto anch’io il mio articolo
Ecco il secondo vincitore
http://it.emcelettronica.com/user/15837
http://trimix63.blogspot.com/2011/05/elettronica-open-source.html
saluti
Il terzo vincitore è
http://it.emcelettronica.com/user/15883
Eccezionalmente un quarto vincitore
http://it.emcelettronica.com/user/13902/edit
Mi sono arrivati quasi in contemporanea gli ultimi 2 messaggi, quindi ho dato priorità a chi mi ha postato prima, per pochi secondi….
ma mi dispiaceva e cosi cerca cerca,
sono riuscito a reperire un altro spyder usb, questo non è imballato ma lo avevamo aperto per fare delle foto in occasione del review4u, è comunque nuovo.
Spero di averti accontentato 🙂
Colgo l’occasione per segnalarvi questo gruppo di fb
http://www.facebook.com/home.php?sk=group_187434481274740
Per il momento non è molto attivo ma spero di incrementare gli interventi.
Saluti Renzo
Tutti e 4 i vincitori potete inviarmi in privato i vostri dati per la spedizione.
Spediremo domattina
postate per favore postare i link al materiale pubblicato ? i link messi dei 3 vincitori non porta a nulla, appare il mio profilo.
Mi sa che tu sei un pò Sheldon….
Come faccio a scriverti in privato?
Renzo
Ciao Renzo, puoi contattarmi tramite il modulo contact del mio profilo
forse per fare lampeggiare un LED, basta sapere un po’ di C, avere dimestichezza con l’ambiente di sviluppo/programmazione e sapere che cosa e’ un’uscita push-pull o open drain … , ma i micro che ci sono oggi sul mercato hanno al loro interno periferiche di tutti i tipi, SD-MMC, I2C, SPI, UART, camera interfaces, DAC, Comparatos, ADC, memorie di tutti i tipi, DMA, Timers, diverse sorgenti di clock, pinout dove ogni pin ha 3/4 differenti funzionalità con applicazioni svariate e una mare di librerie C per applicazioni dal motor control al touch sensing. Tra gli ICs penso che siano tra i piu’ complessi da un punto di vista delle infinite funzionalità. Sicuramente tutte queste schede di sviluppo spero che avvicinino i giovani fin dall’età scolare al mondo dei sistemi elettronici in maniera concreta. Spero che i docenti delle scuole di vario ordine e grado siano in grado di affrontare queste tematiche in continua evoluzione. I sistemi come la robotica avvicinano al ragionamento, ma hanno basi teoriche profonde dalle quali alla fine non si puo’ prescindere!
Il primo passo è comunque sempre far lampeggiare un led. Il famoso Hello World!
Poi le periferiche puoi anche iniziare ad usarle uno alla volta, man mano che ti capita l’occasione. Ad sempio io non ho mai usato un DAC interno al micro, non ne ho mai avuto la necessità, o non ho avuto a disposizione un micro col DAC oppure ho risolto con il PWM.
L’importante è coprendere i concetti base (il famoso ecosystem), poi si può iniziare ad accendere la UART (le periferiche si accendono e si spengono via programma, per chi non lo sapesse) ad esempio ed iniziare a scrivere HELLO WORLD sul PC tramite la seriale RS232 e HyperTerminal o Minicom per Linux
Abbiamo provato in 2 uffici postali di Roma, ma entrambi hanno i terminali bloccati.
Ci riproveremo nei prossimi giorni…
Terminali bloccati alle Poste anche Venerdi 3 Giugno…. ci riproviamo oggi
Problema nazionale
http://roma.repubblica.it/cronaca/2011/06/03/news/poste-17163939/index.html
Anche oggi tutto bloccato… ci riproverò domani
Esistono prodotti che permettano la programmazione di microcontrollori, eprom ecc. col Mac magari potendo utilizzare XCode ed evitando emulatori Windows e USB-serial adapter?
Grazie in anticipo!
Considerando che il tool di sviluppo presentato in questo articolo è Freescale parliamo di Codewarrior (software di sviluppo).
Esiste una versione Mac OS del Codewarrior anche se non sembra essere più supportata.
Puoi comunque provarla e darci le tue impressioni
http://www.freescale.com/webapp/sps/site/overview.jsp?code=CW_UPDATES_MAC
Ragazzi, le Poste hanno ripreso il servizio solo che c’è tanta tanta gente (oggi avevo una cinquantina di persone davanti a me). Dai che lunedì li spedisco! I promise!
Scusate, ma non vedo la riga che definisce il valore DELAY_TIME = 500…
Hai ragione,
ho dato alcune cose per scontato
pubblicando solo il MAIN
ma. partendo da zero, non bisogna mai dare nulla per scontato.
(anche come regola generale)
//
// MC9S08QG4 sample for USBSPYDER08
//
// This program continuously blinks the USBSPYDER08 LED
//
// ————————————————————————————–
//
// This project has been written for CodeWarrior 5.1 for HC(S)08
// and uses Registers Files MC9S08QG4.H and MC9S08QG4.C, version 2.87.095
//
// ————————————————————————————–
// Copyright (c) 2006 SofTec Microsystems
// http://www.softecmicro.com/
//
/////////////////////////////////////////////////////////////////////////////////////////
#include
#include “derivative.h”
#define FREQ_BUS 8000000 // 8 MHz
#define NUM_BUS_CYCLES (FREQ_BUS * 100)/1000000
#define DELAY_X_VALUE (((((NUM_BUS_CYCLES – 6)*10)/4)+5)/10)-1
#define DELAY_TIME 500 // ms
// ICSTRM location in Flash
unsigned char ICSTRM_FLASH @0xFFAF;
// Flash security (NVOPT Register)
const unsigned char FLASH_SECURITY @0xFFBF = 0xFE;
/////////////////////////////////////////////////////////////////////////////////////////
// PeriphInit
// ————————————————————————————–
// Initializes various registers and peripherals
/////////////////////////////////////////////////////////////////////////////////////////
void PeriphInit(void)
{
// Disables COP
SOPT1 &= 0x7F;
// Configures PTA0 as output LED
PTAD = 0x00;
PTADD = 0x01;
// Configures ICS clock. Selects FLL Engaged Internal Mode (Divides ICSOUT by 1)
// fBUS about 8 MHz
ICSTRM = ICSTRM_FLASH;
ICSC2 = 0x00;
ICSC1 = 0x04;
// Waits until output FLL is selected (CLKST=00)
while (ICSSC & 0x0C)
;
}
/////////////////////////////////////////////////////////////////////////////////////////
// Delay_100us
// ————————————————————————————–
// This subroutine performs a specified delay in multiples of 100 us
/////////////////////////////////////////////////////////////////////////////////////////
void Delay_100us (unsigned char hundreds_us)
{
asm
{
lda hundreds_us
beq exit
delay_us:
ldx #DELAY_X_VALUE ; [2]
loop:
dbnzx loop ; [4]
dbnza delay_us ; [4]
exit:
}
}
Finalmente ho spedito i pacchi! :)) Ce l’abbiamo fattaaaa!!! 🙂
In bocca al lupo a tutti i partecipanti di VINCI LeCroy!
Il pacco mi è arrivato un paio di giorni fa! Grazie mille! 🙂
Arrivato Martedi. Grazie. Appena ho un po di tempo lo metto in funzione