Vous êtes sur la page 1sur 66

CursoMicrocontroladores

AtmelAVR
Tecnologico deMorelia
Departamento Electronica
talfaro2000@yahoo.com
FamiliaAVR
TINYAVR
8 32pin,microcontroladoresdeproposito
general
16miembrosdelafamilia
MEGAAVR
32 100pin,microcontroladoresdeproposito
general
23miembrosdelafamilia
ASSPAVRs
USB,CANyLCD
ControlMotoreiluminacion
Automotriz
AdministraciondeBaterias
8miembrosdelafamilia
Dispositivosconrangodesde1a256KB
Rangodelnumerodeterminalesdesde8a100
Compatibilidadtotaldecodigo
Caracteristica/Pincompatiblesentrefamilias
Unconjuntodeherramientasdedesarrollo
ArquitecturaAVR
ArquitecturaRISCconconjuntode
instruccionesCISC
ConjuntodeInstruccionespoderosoparaCy
ensamblador
Escalables
MismoNucleopoderosoentodoslos
dispositivosAVR
Execucionenunsolociclo
Unainstruccionporrelojexterno
Consumodepotenciabaja
32registrosdetrabajo
TodosconectadosdirectamentealaALU!
Nucleo(core)muyeficiente
20MIPS@20MHz
Altoniveldeintegracion
Costodelsistematotalbajo
Lasoperacionesconregistros
TomanunSOLOpulsodereloj
Enlaentradaexternadereloj
Tamano Codigo ytiempo deejecucion
Solucionenunsolocircuito
integrado
ATMEGA48
Caracteristicas
Encapsulados
PDIP
Diagrama
de Bloques
Variantes
PROGRAMACION DEL
MICROCONTROLADOR
ProgramacionusandoAVRDUDE
avrdude p cdigodemicro c usbasp e u U flash:w:nombrearchivo.hex
En una ventana de MSDOS introducir la siguiente linea de comando:
Donde codigodemicro es una identificacion para el microcontrolador
Que se quiere programar.
nombrearchivo.hex es el archivo (generado por winnAVR o Codevision
u otro compilador) que se quiere programar en el microcontrolador.
usbasp es el nombre del programador.
flash y w es para indicarle que se quiere escribir (w) en la memoria flash.
Para mas informacion consultar el manual de AVRDUDE.
CodigosdelosMicros
Microcontrolador cdigodemicro
AT90CAN128 c128
AT90PWM2 pwm2
AT90PWM3 pwm3
AT90S1200 1200
AT90S2313 2313
AT90S2333 2333
AT90S2343 (*) 2343
AT90S4414 4414
AT90S4433 4433
AT90S4434 4434
AT90S8515 8515
AT90S8535 8535
AT90USB646 usb646x
AT90USB647 usb647x
AT90USB1286 usb1286x
AT90USB1287 usb1287x
ATmega103 m103
ATmega128 m128
ATmega1280 m1280
ATmega1281 m1281
ATmega16 m16
ATmega161 m161
ATmega162 m162
ATmega163 m163
ATmega164 m164
ATmega168 m168
ATmega169 m169
ATmega2560 (**) m2560
ATmega2561 (**) m2561
ATmega32 m32
ATmega324 m324
Atmega325 m325x
ATmega329 m329
ATmega3250 m3250x
ATmega3290 m3290
ATmega48 m48
ATmega64 m64
ATmega640 m640
ATmega645 m645x
ATmega644 m644
ATmega649 m649
ATmega6450 m6450x
ATmega6490 m6490
ATmega8 m8
ATmega8515 m8515
ATmega8535 m8535
ATmega88 m88
ATtiny11 t 11
ATtiny12 t 12
ATtiny13 t 13
ATtiny15 t 15
ATtiny2313 t 2313
ATtiny24 t 24x
ATtiny25 t 25
ATtiny26 t 26
ATtiny261 t 61
ATtiny44 t 44x
ATtiny45 t 45
ATtiny461 t 461
ATtiny84 t 84x
ATtiny85 t 85
ATtiny861 t 861
LENGUAJE C
HerramientasdeProgramacion
Editor
Compilador(Compiler)
Enlazador(Linker)
Cargador(Loader)
Depurador(Debugger)
AmbientedeDesarrollo
Integrado(IDE)
Interfaceparalos
comandosbasicos
WinAVR
WinAVResunasuitedeherramientas
ejecutables,(opensourcesoftware)parael
desarrrollodeprogramacionde
microprocesadoresAtmelAVRpormediodela
plataformaWindows.Incluyeuncompilador
GNUGCCparaCyC++.
http://winavr.sourceforge.net/
ComentariosenC
/*Multi
Linea
Comentarios*/
//comentariosalfinaldelinea
Includes
Incluyeunarchivo tipicamenteunarchivode
cabecera(headerfile)conteniendodeclaracionesde
simbolos.
#include<avr/io.h>
Esteesunarchivoestandardelsistema
Elcompiladorestandardsabeenquecarpetasbuscarestearchivo
#include"mystuff.h"
Esteesunarchivoespecificodelproyecto
Elcompiladorbuscaenlacarpetadelproyectoestearchivo
Definiciones
#definesymbolloquesedesea
Esteesllamadounmacro
defineunsimbolocomounacadenadetexto
Cadaocurrenciadelsimboloesreemplazado
porlacadenadespuesdelsimbolo
EstoeshechoporelpreprocesadordeC
Variables
Especificanuntipo,ambiente,tiempodevida,y
nombre
Tipoeschar,int,float,etc
EnAVRtiposespecialescomouint8_t,int16_t,etc
Ambientees
Local(block) declaradasdentrodefunciones
Global(file) declaradasfueradefunciones
Program(external) Usedascomoenlacesentrevariosarchivos
Tiempodevidaes
Automatico(defaultparavariableslocales)(enlapila)
Estatico(defaultparavariablesglobalesydeprograma)(enram)
Dinamico(localidaddealmacenajecontroladoporprograma)(en
heap)
DeclaraciondeVariables
Las declaraciones de las variables se hacen de la siguiente forma:
Con signo o sin signo tipo nombre; //Comentarios
Ejemplos
unsigned char x,y,temperatura;
unsigned int var1; // Es una variable entera sin signo que
llamamos var1
TiposdeVariables
Tipo Tamaoenbits Rango
Char 8 127
Unsignedchar 8 255
signedchar 8 127
Int 16 32767
short int 16 32767
Unsignedint 16 65535
signedint 16 32767
longint 32 2147483647
Unsignedlongint 32 4294967295
signedlongint 32 2147483647
Float 32 1.75e3.402e38
Double 32 1.75e3.402e38
TiposdeDatos
Variableoconstante Formato
Decimal Nmero
Hexadecimal 0xnmerohexadecimal
Binario 0bnmerobinario
Octal 0nmerooctal
Caracter a
Cadena estaesunacadena
x=20; // x es 20 decimal
x=0x14; //x es 14 hexadecimal que convertido a decimal es 20 decimal
x=0b00010100; //x se manejado en binario que es equivalente a 20 decimal
x=024; //x se maneja en octal que es 20 decimal
Arreglos
Un arreglo es un conjunto de datos que pueden ser accesadoa travs de un ndice.
Su declaracin se hace as:
nombre del arreglo [nmero de elementos]={elemento1, elemento2,.. elemento n }
Ejemplo
char arreglo1 [3]={0x0a,0x38,0x23};
El primer elemento es el 0, en la declaracin anterior del arreglo ste se defini de tres elementos,
siendo el primer elemento el 0 y el ltimo elemento el nmero 2, vea el siguiente ejemplo:
x=arreglo1[0]; // x vale 0x0a ya que acces al primer elemento del arreglo
ArreglosMultidimensionales
Se puede declarar un arreglo de dos dimensiones que se interpretara
como fila y columna ejemplo:
char arreglo_multi_dim [2,3]= {1,2,3}, {,4,5,6}; // Es un arreglo de dos
//filas y tres columnas
Operadoresaritmeticos
Smbolo Operacin
+ Suma
- Resta
* Multiplicacin
/ Divisin
% DivisinMdulo, yel resultadoesel residuo
Operadoresparaelmanejodebits
Smbolo Descripcin
& AndBit aBit
| OR bit aBit
^ Or exclusivoBit aBit
<< CorrimientoalaIzquierda
>> Corrimientoaladerecha
~ Complementoaunos(inversindebits)
Operadoresderelacion
Operador Descripcin
> Mayor que
>= Mayor oigual que
< Menor que
<= Menor Igual que
== Igual que
!= Distintode
&& Y tambinsi
|| Osi
Estructuraif else
La estructura if else es: si se cumple el if se hace lo que est abajo del if
y sino se cumple se hace lo que est debajo del else
if (Var1==10)
{
Var1=0;
Var2=20;
x=14;
}
else
{
Var1=++;
x=20;
}
Estructuraelse if
Donde se cumpla la condicin rompe las siguientes comparaciones,
no evala todas, pero si se cumple hasta abajo habr evaluado
todas las comparaciones.
if (Var1==10)
Var1=0;
else if (Var1==09)
Var1=1;
else if (Var1==08)
Var1=2;
else
Var1=3;
Estructurawhile
El while evala lo que hay entre los parntesis y mientras se cumpla
ejecuta lo que est debajo del while.
while ((porta==0x01) &&(var1==0))
{
portb++ ; //Si porta=0 y Var1=0, se incrementa en uno el portb
}
Estructuradowhile
A diferencia del while, esta instruccin ejecuta por lo menos una vez lo
que est abajo del do, despus evala el while y si es vlido ejecuta
nuevamente lo que est abajo del do.
do
{
Portb++ ; //Si porta=0 y Var1=0, se incrementa en uno el portb
}
While ((porta==0x01) &&(Var1==0))
Estructurafor
La estructura del for es (inicio; condicin de paro; incremento del ndice)
for (i=0;i<=10000,i++)
{
var1++; //i tendra que ser declarado como int para que cumpla con el rango
}
RupturadeCiclosconBreak
Se puede terminar un ciclo for, while y do while mediante el break sin necesidad
de terminar las iteraciones o de que se vuelva falsa la condicin.
for (i=0;i<=10000,i++)
{
var1++;
if (var2==0) //Si var2=0 se rompe ciclo, quedando el i en donde se haya cumplido el var2
break;
}
var3=i;
Ciclosinfinitos
for(;;)
{
Se ejecuta infinitamente las instrucciones aqu colocadas
}
Otra forma de generar ciclos infinitos:
while(1)
{
Se ejecuta infinitamente las instrucciones aqu colocadas
}
Prototiposdefunciones
(encabezados)
Lasfuncionesdebensererdeclaradasantesdesuuso
Unadeclaracionessolamenteelencabezadodelafuncion
noelcuerpo
Lasdeclaracionesdefunciones(encabezados)normalmenteson
colocadasenarchivosinclude
Unadefiniciondeunafuncionincluyeelcuerpodela
funcion
voidfunction_name(int,float);//encabezado
Serequieretipodedatoderetorno;voidsignificaque
nadaesregresado
Tiposdelosargumentos
Main
CadaprogramaenCnesecitaunafuncionllamada
main
i nt mai n( voi d) {
i nt x; / / l ocal var
x = add( 3, 9) ; / / l l amada a una f unci on
r et ur n 0;
}
Elcuerpodelprogramavadentrodelosbraques
Estafuncionnormalmenteregresa0comocodigo
quesignificaquetodoestabien
Otrasfunciones
Lasdefinicionesdeotrasfuncionesson
colocadasdebajodemain(aunquesepueden
ponerarriba)oenunarchivoseparado
i nt add( i nt a, i nt b) {
r et ur n a+b;
}
Loas argumentos son
pasados por valor a los
parametros
OperacionesconBits
Interrupciones
sei()ycli()habilitaranodeshabilitaranlas
interrupciones
Parapreservarelestadoactual,usar
ui nt 8_t sr eg = SREG;
cl i ( ) ;

SREG = sr eg;
Apuntadores
Apuntadoressonvariablesquecontienenla
direcciondeundato
ui nt 8_t num= 5; //variableuint8
uint8_t * numPtr; //apuntadoralvaloruint8
OperadordeDireccion
numPt r = &num; //direcciondeunavariable
OperadordeDereferencia
PORTD = *numPtr; //datodeladireccionennumPtr
ArreglosyApuntadores
Losnomresdelosarreglossonapuntadoresa
constantes
Estoes,representanladireccionbasedelarreglo,
perosolamentecomounvalor
i nt 16_t number s[ 4] = {5, 7, - 2, 6};
i nt 16_t * aPt r ;
aPt r = numer os;
aPt r = &numer os;
Losultimos2sonidenticos
ParametrosporReferencia
LasfuncionesenCusan
solamentelallamadapor
valor
f unc_by_val ( a) ;
Sepuedepasaryrecibirla
direcciondeldato,dandopor
resultadolallamadapor
referencia
char a;
f unc_by_r ef ( &a) ;
voi d f unc( char * x) {
*x = ' $' ;
}
voi d f unc( char x) {
PORTB = x;
}
Cadenas
Lascadenassonimplementadasenarreglosde
caracteres
char p[ 6] ; //noinicializada
char q[ 6] = " J oe" ;
//Usa4delos6bytes
Losarreglospuedenserimplicitamentecreadosy
simplementeapuntadosa
char * n = "J oe";
00 65 6F 4A
n
?? ?? ?? ?? ?? ??
p
?? ?? 00 65 6F 4A
q
DatosenFlash
#i ncl ude <avr/pgmspace.h>
pr og_ui nt 16_t myDat a[ ]
= {874, 299, 14987, 37};
pr og_char someText [ ] = " Hel l o Wor l d" ;
Estocreadatosenlamemoriadeprograma(flash)
Debenperteneceralaclasedealojamientoestatico
(static)
Ladesventaja,esquesetienequeaccederaellosen
unaformaespecial
Haymacrosyrutinasespecialesdecaracteresparaacceder
alosdatosalmacenadosdeestaforma
ProgramDataMacros
ui nt 16_t x = pgm_read_word(myData+2);
f or ( i =0; i <3; i ++)
char y = pgm_read_byte(&someText[i]);
Estosmacrosrequierenladirecciondeldato
queseraaccesado
Elnombredeunarregloesunadireccion
myData+2eslomismoque&myData[2]
&someText[i]eslomismoquesomeText+i
Funcionesdecadenasenmemoriade
programa
Agregar_Palasfuncionesestandarsparausarlas
cadenasenmemoriadeprograma
i nt n = strlen_P( someText ) ;
Lascadenasdedestinodebenestarenram
strcpy_P( ramStr, someText ) ;
UsePGM_Pparadeclararunapuntadorauna
cadenaenmemoriadeprograma
PGM_P ppt r = someText ;
char c;
whi l e ( c = pgm_read_byte( ppt r ++) ) {. . .
Retardos(Delays)
#def i ne F_CPU 4000000UL / / 4 MHz
#i ncl ude <avr / del ay. h>
_del ay_us( 93) ;
Maxretardo:768us/F_CPUenMHz
_del ay_ms( 10) ;
Maxretardo:262.14ms/F_CPUinMHz.
_del ay_l oop_1( 24) ;
Usaconteode8bits,3ciclosporinteracion
Pasa0parainteracionesmaximas(256)
_del ay_l oop_2( 1039) ;
Usaconteode16bits,4ciclosporiteracion
Pasa0paraiteracionesmaximas(65536)
Numero de interacciones
de lazo (para implementar
el retardo) esta basado en
la velocidad del
procesador
math.h
Incluyetodaslasfuncionesmatematicas
necesarias
fabs,sqrt,sin,asin,ceil,floor,
Notarqueestostrabajanendatospuntoflotante,asi
queserequiere,porlamayoriadelosprogramasen
AVR,conversiondeyhaciaformatodeenteros
Funcionesdeatenciona
interrupciones
#i ncl ude <avr / i nt er r upt . h>
I SR( i nt er r upt name) {
//Elcodigodelarutinademanejovaaqui
//Noserequiereguardaryrestaurarestado esautomatico
//RETItambienesagregadaautomaticamente
}
Ademasdedefinirlarutinademanejo,serequiere
habilitar/deshabilitarlasinterrupciones
GI CR | = ( 1<<I NT0) ; / / por ej empl o
sei ( ) ;
ProyectosMultiarchivos
Agregarcadaarchivofuentealalistadel
proyecto
Cadaarchivoseracompilado/ensambladopor
separado
Usearchivosdecabeceraparacompartir
declaraciones
Losresultadossonenlazadosenunsolo
archivohexparaejecucion.
DosarchivosenC
//mainfile.c
#include <avr/io.h>
#include
"otherfile.h"
int main(void){
char x;
x = tc('B');
PORTB = x;
return 0;
}
//otherfile.h
#ifndef otherfile_h
#define otherfile_h
char tc(char);
#endif
DosArchivosenC
//otherfile.c
#include <avr/io.h>
#include "otherfile.h"
//toggle case
char tc(char x){
return x ^ _BV(5);
}
Elarchivodecabeceraes
incluidodondesea
declarado,yydondesea
definido
Elcompiladorpuedechecarel
usoydeclaracionpara
consistencia
MezclandoCyEnsamblador
Lenguajeensambladorenlinea
Tieneunasintasisespecialparapermitiraccesoalas
variablesenCytambienevitarproblemasconresgistros
usadosporcodigoenC.
asm("in%0,%1":"=r"(localvar):"I(_SFR_IO_ADDR(PIND)));
in r24,0x10 ;0x10esladirecciondePIND
std Y+9,r24 ;Y+9esladirecciondelocalvar
Llamandounafuncionenunlenguajedesdeotro
lenguaje
CyEnsamblador
//asmfile.S
#include <avr/io.h>
;void show (uint16_t * port,
uint8_t data)
.global show
;args: portaddr R25:R24
; data R22
show:
;tc needs its argument in R24
push r25 ;save port address
push r24
mov r24, r22
rcall tc ;toggle case
;r24 is case-toggled char
pop r30 ;get port address
pop r31
st Z, r24 ;out!
ret
Losarchivosenensamblador
requierenlaextension.S
Usaelestilodearchivosde
cabeceraenC
Declaraelpuntode
entrada(nombredelafuncion)
comoglobaldemeneraqueel
programaenCpuedaverla
CyEnsamblador
//mainfile.c
#include<avr/io.h>
#include"otherfile.h"
voidshow(volatileuint8_t*port,
char);
intmain(void){
charx='Z';
show(&PORTB,x);
show(&PORTC,'a');
return0;
}
Elprototipoesagregadoa
mainparalacompilacion
Macros
-Uso de Macros
(I<<n) puede ser reemplazado por:
#define BIT(n) (I<<n);
uso: (I<<5) =>BIT(5)
-Utiles para calculos de reloj:
#define set_counter_from_seconds(t) ((CF/CKDIV I)*(t))
Esta macro permite convertir facilmente numero de ciclos de reloj
a segundos.
Building
Elarchivoenlenguaje
ensambladoresagregadoal
listadodearchivosdelproyecto
ElcomandoBuildensamblaray
compilaralosarchivos
requeridos
Cadaunidadproduceunarchivo
objeto
Solamenteunarchivohexes
producido

Vous aimerez peut-être aussi