# Tutorial AVR desde 0



## felixls (May 1, 2012)

Escribí un tutorial de programación de AVR para los que tienen conocimientos de C con la idea que sirva para dar los primeros pasos en esta familia estupenda de microcontroladores.







Estos son los temas tratados

Introducción
Herramientas necesarias
Mi primer programa
Mi primer circuito
Programación del firmware
Led ON
Blinking LED
Uso de entradas
Rebotes
Memorias
Flash
EEPROM
SRAM
Variables
Campos de bits (Bit Fields)
Uso práctico
USART
La especificación RS232
Inicializando la USART
Envío de datos
Recepción de datos
Ejemplo “ECO eco eco...”
Ejemplo control remoto
Diseño modular
ADC
Resolución y referencia de tensión
Configuración de registros
Circuito de prueba
Interrupciones
Consideraciones
Fuentes de interrupciones
Manejando una interrupción
Ejemplo: USART con interrupciones
Timers
Timer sin prescaler
Timer con prescaler
Modo CTC
Modo CTC con interrupciones
Modo CTC - Output Compare
PWM
Modo Fast-PWM
Registros de PWM
Modo Phase Correct
Modo Phase and Frecuency Correct
EEPROM
Rutinas comunes
Ejemplo de uso
Acceso por bloque
Modificador EEMEM
Estableciendo valores iniciales

Download
http://dl.dropbox.com/u/24861335/Felixls/tutoriales/TutorialAVRdesde0.pdf

Lectura online
http://issuu.com/felixls/docs/tutorialavrdesde0?mode=window&backgroundColor=#222222

Espero que le sirva a alguien.

saludos!


----------



## hamster (May 1, 2012)

Los AVR son buenísimos micros, gracias por el tutorial.


----------



## judex (May 2, 2012)

muy bueno el tutorial


----------



## R-Mario (May 2, 2012)

Gracias por compartir


----------



## felixls (May 3, 2012)

Muchas gracias, cualquier crítica es bienvenida para mejorar el material.

saludos!


----------



## R-Mario (May 3, 2012)

Por cierto en tus ejemplos no pusiste el #define F_CPU de la libreria delay.h, ¿a caso lo pone automaticamente el IDE?

por cierto que tal anda la ide de eclipse en linux, yo tengo instalado el CC Studio de texas, pero me es pesimo, tarda 5 minutos en abrirce, luego otros 5 para poder compilar y programar, y eso sin contar con sus muy a menudas caidas.

Voy probar IAR, lo malo es que no encuentro una version humm FULL "ya sabes a que me refiero"

Sabes que estaria bien, que al final agregaras un proyecto elaborado donde se muestre la potencia y facilidad de estos micros, porque veo que aca en forosdeelectronica casi no se habla de ellos, o al menos no tanto como los mugros y mis archienemigos  PICs


----------



## felixls (May 3, 2012)

Lo de F_CPU lo expliqué en el ejemplo LED On:

"*Para grabar el programa el proyecto debe tener configurado el micro destino en nuestro caso 
como ya se dijo es un ATmega8 y 1 Mhz de oscilador interno.*"

[gráfico del IDE con el seteo del micro y la velocidad ]

..
 y más adelante puse esto:
"
*El comando más importante ejecutado aquí es la compilación:

avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -
mmcu=atmega8 -DF_CPU=1000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"

El parámetro -mmcu=atmega8 y el define -DF_CPU lo obtiene de la definición previa (config. 
AVR/Taget Hardware).*"

El Eclipse en Linux funciona 10 puntos, no puedo quejarme en nada, y lamento no haber empezado por los AVR ya que tener un compilador de la potencia de gcc, con un IDE y todo gratuito es todo lo que siempre quise.

En cuanto al proyecto estaría bueno agregar algo, debería ser la suma de los temas vistos y de un nivel principiante-intermedio para seguir un hilo con el resto del tuto, se te ocurre alguno en especial?


----------



## R-Mario (May 3, 2012)

A entonces si jala el dato desde la IDE, en fin, la verdad no se me ocurre algo que involucre a la mayoria de los perifericos pero lo pensare


----------



## edwars (May 4, 2012)

muy bueno el tuto voy a leerlo,, aprender a programar micros en general xq no se nada acerca del tema, y así le doy un buen uso a mi pc, q s prácticamente la pc d un vago.


----------



## Meta (May 7, 2012)

Buenísimo, haber con el tiempo con tus manuales y futuros manualistas de AVR, vendrán los listillos hacer sus propios libros al castellano como si fueran ideas suyas. Ha pasado con PIC y dsPIC.

Buen trabajo.


----------



## santysxmn (Jul 1, 2013)

te felicito muy bueno el tutorial, porfavor necesito su ayuda de paso estoy haciendo una cerradura electronica (en avr), consiste en que metes una clave de 3 digitos (584) y se encendaera un led (puerto c) que que te indica que la clave es correcta, la clave  esta grabada en los codigos del programa, pero ahora el problema es que debo cambiar la clave con el teclado y de lo que e leido eso se hace grabando los datos en la memoria eeprom pero no se como usar o acceder (osea grabar y leer datos) a la memoria porfavor cualquier idea sirve gracias de antemano........aqui les adjunto lo que tengo porfavor ayudenme...... a y estoy usando este programa "Code Vision AVR evaluacion V.2.05.0".............GRACIAS DE ANTEMANO


----------



## R-Mario (Jul 1, 2013)

Estaba a punto de bajar tu codigo para verlo pero veo que esta en code vision y yo no uso eso, solo gcc. Leer y grabar en la eepom es tan facil como solo 5 lineas de codigo en GCC. De hecho en los manuales en la seccion de "Memorias" ahi detalla como leer y grabar en la eeprom, es mas si lo copias y pegas tal cual funciona, nuevamente esto para gcc.

No se porque se empeñan en usar Mikro C, Code vision etc, si para eso esta Atmel Studio.


----------



## StrySG (Sep 9, 2013)

Eh buen tutorial,

Me tome la libertad de compartirlo en una web estática que hice  
Este tutorial es de utilidad para los que utilizan GNU/linux y quieren usar micros AVR...   
aunque personalmente no utilizo eclipse (trabajo desde CodeBlocks IDE con Trisquel GNU/Linux), te felicito por tomarte el tiempo de redactarlo y compartir información.

PD: La licencia CC que usaste mejora aún más el tutorial...


----------



## kervy (Nov 21, 2013)

Hola!, soy nuevo en microcontroladores y estoy pensando usar un pulsador que encienda un led pero con interrupciones ; sin embargo que interrupcion utilizo int0 o pcint0? ...

estoy utilizando atmel


----------



## R-Mario (Nov 21, 2013)

kervy dijo:


> Hola!, soy nuevo en microcontroladores y estoy pensando usar un pulsador que encienda un led pero con interrupciones ; sin embargo que interrupcion utilizo int0 o pcint0? ...
> 
> estoy utilizando atmel


 


Dejame decirte que INT0 tiene preferencia sobre PCINT, asi que tu dime ¿que tan urgente es que se atienda la dichosa interrupcion?, si es de suma importancia entonces usa INT0 de lo contrario usa PCINT.

Luego te dire que INT0 tiene mas modos de deteccion de interrupcion
1.- Flanco de subida
2.- Flanco de bajada
3.- Cambio de estado

Por su parte PCINT solo detecta cambios de estado

Por ultimo, bajate los manuales que el compañero hizo y de buena fe los compartio, veras que ahi vas a ver muchas respuestas a tus dudas


----------



## kervy (Nov 25, 2013)

hola! respecto al codigo que iria dentro de la interrucpcion PCINT0 comenzaria con:
"ISR (PCINT0_vect)"??


----------



## R-Mario (Nov 25, 2013)

Si........................................


----------

