Introduzione ad AVR attraverso un semplice programma

Come programmare un AVR

L'AVR è un microcontrollore di base RISC della ATMEL. Come esempio ho usato ATMEGA8. Contiene porte digitali I/O, convertitori ADC, porte seriali, PWM, temporizzatori, oscillatori esterni e diversi SPI. Ha una grande memoria flash programmabile, di circa 8K.

ATMEGA8

Per la programmazione di un AVR è necessario avere due software ed un programmatore ISP. Il software è liberamente scaricabile presso il seguente sito:

 

Uso di WinAVR e AVR Studio

A questo punto prima si installa WinAVR e dopo AVR Studio. In AVR Studio è possibile programmare sia usando Assembly che C.
Aprire AVR studio cliccando su New Project > AVRGCC for C, quindi selezionare il controller dalla lista, la maggior parte si trova in AVR Simulator o AVR Simulator 2.

La schermata dovrebbe essere la seguente:

Software di Simulazione

Scriveremo un semplice programma che vada a spegnere e accedere le cnnessioni led sul primo piedino della PortB (PB0) con un intervallo di 25ms. Il programma è il segue:

#include< avr\io.h >
#include< util\delay.h >
int main()
{
DDRB=(1 << PB0); //Set the data direction register to be output
while(1)   //This is an infinite loop
{
PORTB=0×01;    //Write 1 to PB0 (first pin on port B)
_delay_ms(25); //no explanation needed!
PORTB=0×00;   //Write 0 to PB0 (first pin on port B)
}
return 1;   //This line is never reached,
//just a requirement of the
//software as we have set the
//return type to be as integer
}

Il simbolo " << " è un operatore shift di sinistra. Fondamentalmente serve a spostare il n numeri di bit a sinistra.
Se in AVR vogliamo usare una porta come output, si scriva semplicemente 1 al bit specifico nel registro di DDR della porta specifica. In questo caso si vuole rendere il primo piedino una portB di uscita. Perciò noi ci scriveremo 1. PB0 è un valore definito in . Ad esempio:

#define PB0 0

La linea:

DDRB=(1 << PB0)

significa:

DDRB = ( 1 << 0 )

ovveo “shift 1, zero volte verso sinistra”. La sequenza finale di bit è così:

0000 0001

Il comando:

DDRB = ( 1 << 3 )

diventa:

0000 1000

ovvero "shift 1(0×01), tre volte verso sinistra".

 

La prossima linea è:

PORTB=0 ×01;

Questo vuole dire semplicemente girare PB0 verso l’alto. La funzione di intervallo è data in millesimi di secondi e la prossima linea gira la PB0 in basso. L’intera (1) funzione è un ciclo infinite simile a for(;;)

 

Per simulare il codice cliccare su Build -> Build and Run nel Menu. Il risultato simulato si può vedere nella finestra I/O.

Source: Come programmare un AVR

Scarica subito una copia gratis
Tags:, ,

Scrivi un commento

Send this to a friend