Per programmare non userò il classico IDE di Arduino, ma un programma di casa Atmel: AVR studio 6 che potete scaricare da QUI (dovete registrarvi).
Programmare arduino senza passare dall'IDE ufficiale hai il vantaggio che si può avere il pieno controllo del microcontrollore, e soprattutto è molto utile per capire a fondo come funziona questo micro, lo svantaggio è che è più difficile da programmare, ma con voglia e passione piano piano si impara, il mio obiettivo è di riuscire a fare con Atmel studio tutto quello che so fare con l'IDE ufficiale di Arduino.
Dopo aver installato il programma andare su file --> nuovo progetto
Poi selezioniamo il tipo di progetto: GCC C executable project, scegliamo un nome e facciamo OK.
Poi selezioniamo il modello del microcontrollore di Arduino UNO , l'ATmega328p:
Dovremo trovarci davanti ad una schermata come questa:
Bene, la parte più noiosa è terminata.
L'instruzione while(1), è una condizione sempre vera e corrisponde al void loop() nel linguaggio di Arduino.
Per le numerazioni dei pin del micro non dobbiamo riferirci ai nomi di Arduino, ma al seguente schema:
Nell'ATmega328p ci sono 3 tipi di porte:
- PORTB: comprende i pin digitali dal 8 al 13
- PORTC: comprende i pin analogici da A0 a A5
- PORTD: comprende i pin digitali dal pin 0 al 7
Per ogni "PORT" (B,C,D) ci sono altri 3 tipi di registri:
Esempio registri della PORTB |
- DDRx: Serve per impostare un pin come input (0) o come output (1), possono essere letti e scritti.
- PORTx: Serve per impostare il lo stato del pin (HIGH/LOW)
- PINx: Serve per leggere il valore digitale (0,1) di un pin.
Questo è il programma che ho scritto che andremo ad analizzare:
/*
* Blink ATmega328.c
*
* Created: 24/06/2014 12:40:41
* Author: Alessandro
*/
#define F_CPU_CPU 16000000
#include <util/delay.h>
#include <avr/io.h>
int main(void)
{
DDRB=0xFF;
while(1)
{
PORTB=0xFF;
_delay_ms(500);
PORTB=0;
_delay_ms(500);
}
}
Questo programma farà lampeggiare il led su tutti i pin della PORTB.
- La prima istruzione #define F_CPU_CPU 16000000 definisce il clock del micro di 16Mhz
- La libreria util/delay.h serve per la funzione di delay, mentrw avr/io.h è una libreria standard.
- L'istruzione DDRB=0xFF; dichiara tutti i pin sulla PORTB come output, 0xFF corrisponde a 255 in decimale.
- Nel ciclo infinito, while(1) vengono impostati come HIGH tutti i pin sulla PORTB.
- L'istruzione _delay_ms(500); corrisponde a delay(500); di arduino e mette in pausa il programma per mezzo secondo.
- PORTB=0; spegne tutti i pin sulla PORTB
Per compilare il programma basta premere F7, e il file .HEX verrà salvato nella cartella del progetto.
Per caricare il programma sull'Arduino uno dovete scaricare (da QUI) questo semplicissimo programma:
Selezionate il file .HEX, il tipo di Arduino, e la porta seriale.
Collegate un led dal pin 8 al 13 e dovrebbe lampeggiare ;)
Nei prossimi articoli vedremo come manipolare i registri in modo indipendente e come leggere un input da un pulsante.
In questo articolo ho preso spunto in parte da: questo sito
Nessun commento:
Posta un commento