Home
Accesso / Registrazione
 di 

Usare i microcontrollori da zero

Iniziare con i microcontrollori

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

Emulatore real-time per microcontroller

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
http://it.emcelettronica.com/recensione-spyder-kit-usb-freescale
http://it.emcelettronica.com/iniziare-con-codewarrior-ide-della-freescale

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:

Come iniziare con i microcontrollori

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  

 

 

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
ritratto di Bazinga

In americano si usa dire

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.

ritratto di Emanuele

Mi sa che tu sei un pò

Mi sa che tu sei un pò Sheldon....

ritratto di Emanuele

Assegnato il primo Spyder USB

Affrettatevi, ne rimangono solo 2

Il primo vincitore è
http://it.emcelettronica.com/user/15361

ritratto di Giovanni Giomini Figliozzi

Grazie mille Emanuele! :)

Grazie mille Emanuele! :)

ritratto di DRK

L'importanza di condividere le proprie conoscenze..

Ciao anch'io ho scritto perchè mi piace l'elettronica e specialmente quella open source!

ritratto di StratoFranz

strato franz

Ciao anch'io ho scritto per voi

ritratto di toni93

Ciao, ho scritto anch'io il

Ciao, ho scritto anch'io il mio articolo

ritratto di Emanuele

Ecco il secondo

Ecco il secondo vincitore
http://it.emcelettronica.com/user/15837

ritratto di Trimix63

Questo è il mio

ritratto di Emanuele

Il terzo vincitore

ritratto di testato

postate per favore postare i

postate per favore postare i link al materiale pubblicato ? i link messi dei 3 vincitori non porta a nulla, appare il mio profilo.

ritratto di Emanuele

Eccezionalmente un quarto

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 :)

ritratto di Trimix63

Grazie mille

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

ritratto di Emanuele

Tutti e 4 i vincitori potete

Tutti e 4 i vincitori potete inviarmi in privato i vostri dati per la spedizione.

Spediremo domattina

ritratto di Trimix63

Come faccio a scriverti in

Come faccio a scriverti in privato?
Renzo

ritratto di Emanuele

Ciao Renzo, puoi contattarmi

Ciao Renzo, puoi contattarmi tramite il modulo contact del mio profilo

ritratto di brazov2

forse per fare lampeggiare un

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!

ritratto di Emanuele

Esatto!

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

ritratto di Emanuele

Spedizione Spyder USB

Abbiamo provato in 2 uffici postali di Roma, ma entrambi hanno i terminali bloccati.

Ci riproveremo nei prossimi giorni...

ritratto di Emanuele

Terminali bloccati alle Poste

Terminali bloccati alle Poste anche Venerdi 3 Giugno.... ci riproviamo oggi

ritratto di Emanuele

Problema

ritratto di Ionela

Anche oggi tutto bloccato...

Anche oggi tutto bloccato... ci riproverò domani

ritratto di monoblocco

Usare i microcontrollori da zero con Mac OS X

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!

ritratto di Emanuele

Microcontrollori con Mac OS

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

ritratto di Ionela

Ragazzi, le Poste hanno

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!

ritratto di mirko74

LISTATO

Scusate, ma non vedo la riga che definisce il valore DELAY_TIME = 500...

ritratto di Emanuele

Codice completo

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:
}
}

ritratto di Ionela

Finalmente ho spedito i

Finalmente ho spedito i pacchi! :)) Ce l'abbiamo fattaaaa!!! :)
In bocca al lupo a tutti i partecipanti di VINCI LeCroy!

ritratto di Giovanni Giomini Figliozzi

Il pacco mi è arrivato un

Il pacco mi è arrivato un paio di giorni fa! Grazie mille! :)

ritratto di toni93

Arrivato Martedi. Grazie.

Arrivato Martedi. Grazie. Appena ho un po di tempo lo metto in funzione

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 5 utenti e 47 visitatori collegati.

Ultimi Commenti