SlideShare una empresa de Scribd logo
Qué son los microcontroladores y para qué sirven
Respondiendo a la primera parte, un microcontrolador (µC o MCU para abreviar) es un
circuito integrado programable capaz de llevar a cabo una determinada tarea. El tipo de
tarea vendría a ser la segunda parte.
Si alguien nos preguntara qué es lo que hace una computadora personal, le
responderíamos de todo, según el programa que le instalemos. De igual modo, un
microcontrolador, como un “micro computador" que es, puede hacer casi de todo (dentro
de sus posibilidades, claro está), según el programa grabado en su memoria.
La analogía de un microcontrolador con una computadora va más allá de su programación.
Los microcontroladores son circuitos integrados que encierran en un solo chip un CPU
(unidad central de procesamiento), las memorias ram y rom, los diversos periféricos
especiales y los puertos de entrada/salida.

Diagrama de bloques de un microcontrolador
Si echamos un vistazo a nuestro alrededor, podremos notar que estamos cada vez más
rodeados de los microcontroladores: los periféricos de nuestras computadoras, como las
impresoras, teclados, ratones, monitores y demás, tienen incorporados uno o más
microcontroladores.
Los electrodomésticos, cada vez más modernos, como equipos de sonido, televisores LCD,
reproductores de DVD, etc., sin duda tienen microcontroladores que guían sus funciones.
Los aparatos de entretenimiento como los reproductores de MP3 y MP4 portátiles también
tienen microcontroladores en su parte cerebral.
Los teléfonos celulares, las cámaras digitales, etc., etc. De hecho, los microcontroladores se
han infiltrado en todos los campos de la vida moderna, desde los pasatiempos hasta la
industria robótica, de telecomunicaciones, automovilística... En fin, ¿todavía quieres saber
para qué sirven?

Características de los AVR
Los productos estrella de Atmel son sus microcontroladores AVR. Comparado con otros
microcontroladores, en distintos modelos por supuesto, pueden tener memoria de
programa flash reprogramable, capacidad ISP (In System Programming), puertos
configurables como E/S pin a pin, interfaces de comunicación serial RS232 e I2C, módulos
generadores de onda PWM, etc.
Yo pienso que una de las razones por las que la gente novel no empieza por los AVR es su
set de 130 instrucciones; una cantidad que los haría desistir.
Este hándicap inicial se invierte cuando se utiliza un compilador de alto nivel, ya que los
AVR fueron diseñados para un óptimo trabajo con el lenguaje C. Por si fuera poco, la gente
del software libre ha desarrollado el poderoso compilador AVR GCC, el cual está disponible
en sus versiones para Windows y Linux. Así que, si de herramientas para desarrollar
proyectos se trata, los AVR toman la delantera y se convierten en serios competidores de
los actuales monarcas de Microchip.
Las características de cada AVR son descritas con todo detalle en el capítulo Arquitectura
interna de los AVR.

Microcontroladores con Arquitectura Harvard
Como todos los microcontroladores modernos, los AVR fueron diseñados con arquitectura
Harvard. Con esta estructura los microcontroladores AVR disponen de dos memorias, una
que contiene el programa y otra para almacenar los datos. De este modo el CPU puede
tener acceso simultáneo a ambas memorias utilizando buses diferentes. Más
específicamente, el CPU puede leer la siguiente instrucción de programa mientras está
procesando los datos de la instrucción actual.

Arquitectura Harvard de un microcontrolador
Antiguamente los microcontroladores tenían una arquitectura Von Neumann. Como se ve
en el diagrama de abajo, estos microcontroladores usaban una memoria única que
constituía tanto el segmento de memoria de programa como el de datos. Con un solo bus
de comunicación entre dicha memoria y el procesador no es posible realizar diversos
accesos a la vez.

Arquitectura Von Neumann de un microcontrolador

Microcontroladores con Instrucciones RISC
RISC es sigla de Reduced Instruction Set Computer. También es una característica propia
de los microcontroladores actuales como los AVR. Estos microcontroladores cuentan con
instrucciones sencillas y en un número mínimo. En muchos casos ello permite que la
programación en ensamblador sea una labor cómoda y esté al alcance de todos.
Sin embargo, cuando se desarrollan proyectos mucho más complejos, el uso del lenguaje
ensamblador se torna cada vez más engorroso. Entonces se prefiere optar por los
compiladores de alto nivel, para los cuales un set CISC no es obstáculo.
CISC significa Complex Instruction Set Computer y era un distintivo de los primeros
microcontroladores que aparecieron en el mundo, los cuales estaban inspirados en los
procesadores de los grandes computadores de la época. Es complejo porque consta de
muchas instrucciones, complicadas y difíciles de recordar a la hora de programar en
lenguaje ensamblador. Además, al crecer el número de instrucciones también crecerán los
códigos de las instrucciones, lo cual deriva en una mella en la eficiencia del
microcontrolador.

Características de los AVR
Algunas de las características y recursos generales y comunes a casi todos los AVR son:
Están fabricados con tecnología CMOS. Aunque los dispositivos CMOS son más lentos que
los TTL, son ideales para los microcontroladores porque requieren de menor consumo de
energía. Es posible implementar sistemas que solo se alimenten de baterías corrientes. La
tecnología CMOS, como sabemos, también significa que los transistores, al ser mucho
menos, ocupan mucho menor espacio en el chip.
Memorias de programa (FLASH o ROM), memoria de datos estática (SRAM) y memoria
EEPROM internas.
Puertos de E/S bidireccionales configurables independientemente pin por pin.
Suministro de alta corriente en los puertos de E/S.
Timer‟s. Temporizadores de alta precisión o contadores de pulsos externos. También
funcionan como generadores de ondas PWM (Pulse Width Modulation), particularmente
útiles para controlar la velocidad de los motores DC.
WatchDog. Monitoriza que el AVR funcione adecuadamente a lo que se esperaba y no se
cuelgue.
ISP (In System Programming). Permite realizar la programación del AVR utilizando una
interface serial con muy pocos pines.
Fuses y Lock bits, permiten establecer un determinado modo de funcionamiento del AVR,
como el tipo de oscilador que utilizará o si el código grabado podrá o no ser leído después
de la programación.
Otros recursos, más avanzados, son específicos a cada familia de AVR y pueden ser:
Conversores Analógico-Digital, ADC. Para recibir señales del mundo analógico.
Módulos SPI. Para la comunicación con dispositivos que utilizan el bus SPI.
Módulos TWI. Para la comunicación con dispositivos que utilizan el bus I2C.
USART, Transmisor Receptor Síncrono Asíncrono Universal. Para comunicarse mediante los
protocolos RS232 con cualquier dispositivo que también lo soporte. Por ejemplo, podemos
conectar nuestro AVR al puerto serie del PC o a cualquier otro microcontrolador con USART.
Módulo Comparador Analógico. Nos puede ahorrar un OP-AMP y algo más.
Módulo CAN. Para facilitarle al AVR su conexión con otros microcontroladores en una
pequeña red LAN con un protocolo robusto para trabajar en condiciones extremas.
Módulo USB. Casi todos los dispositivos digitales modernos presentan interface USB. Con
esto podemos diseñar sistemas que no tengan nada que envidiarles.
Etc., etc.

Clasificación de los AVR. ¿Con qué AVR empezar?
Cuando la gente va a trabajar con una nueva familia de microcontroladores como los AVR
revisa primero su clasificación para saber con cuál puede empezar. Normalmente esta
gente ha tenido alguna experiencia previa con otros microcontroladores como los PIC y
suele pensar que para programar los AVR primero hay que empezar por lo más básico así
como el PIC16F84 en el mundo de los PICs. y seguir avanzando con el PIC16F877 y luego
con el PIC18F4550 y así... Bueno, no los puedo culpar, pues yo mismo pensaba así :) Aquí
descubriremos por qué esa idea es errónea.
Pero volviendo al tema, en el mundo de los AVR hay 4 familias de ellos: los tinyAVR,
los megaAVR, losXMEGA y los AVR32.
A la vez, puede haber varias decenas de AVR dentro de cada familia, pero las diferencias
entre ellos son cada vez menores, como tener algunos pines de E/S más o menos, tener
algo de memoria más o menos, tener un Timer más o menos, emplear otro tipo de
memoria, y demás detalles de ese tipo.

Clasificación de los AVR (fuente: atmel.com).

Los tinyAVR
Son los "tiny toons" de los AVR, son los microcontroladores de Atmel con menos recursos
de memoria y periféricos posibles. Sin embargo, son muy veloces, alcanzando a operar a
20 MIPS (millones de instrucciones por segundo). Así que tampoco los deberíamos
subestimar y no se te vaya ocurrir equipararlos con un PIC16F84 o similar. Es
tranquilamente factible usar un tinyAVR para conectarse al puerto USB de una
computadora con todo el firmware implementado a nivel software. Por ejemplo,Limor
Fried uso un ATtiny2313 para su programador USBtinyISP. ¿Crees que un PIC16F84A
podría hacer eso? Muy difícil, ¿verdad? Yo no conozco aplicaciones similares ni siquiera con
un PIC16F877A (Debe ser mi ignorancia).
Inicialmente todos eran muy pequeños en tamaño, por lo general de 8 pines, pero
últimamente están apareciendo modelos que llegan a los 20 pines. Lo que varía muy poco
es su set de cerca de 130 instrucciones, que es el mismo set base de
los megaAVR y XMEGA. Es decir, que sean los más limitados no significa que sean los más
fáciles de programar.

Los megaAVR.
Popular e inapropiadamente conocidos como ATmegas, son los microcontroladores de 8 bits
más sobresalientes de Atmel. Detesto hacer estas comparaciones pero creo que son un
buen referente para conocer de forma rápida los AVR. Pero bueno, yo diría que en general
los megaAVR son como losPIC18 de Microchip. Claro que habrá diferencias a favor y en
contra: los PIC18 tienen mayor variedad de ejemplares (personalmente me confunde más)
y los megaAVR trabajan un poco más veloz, y etc., etc... No voy a abrir un debate aquí.
Todos los megaAVR tienen más de 130 instrucciones, la mayoría de 16 bits, y pueden llegar
a velocidades de 20 MIPS. Sus memorias flash pueden alcanzar 256 kB para almacenas
hasta 128k instrucciones y sus memorias RAM pueden alojar hasta 4 kB de datos
temporales.
En general, en ellos se pueden encontrar casi todos los recursos hardware buscados en un
microcontrolador de 8 bits, por eso se suele tomar de aquí algunos modelos como punto de
partida de aprendizaje.
Ahora bien, dentro de la familia de los megaAVR todavía debemos distinguir dos grupos:
Los clásicos megaAVR, que ahora Atmel denomina los viejos AVR, como los ejemplares
cuyos nombres empiezan con AT90S (AT90S8535, AT90S2313, etc.) e incluso los no tan
antiguos ATmega8, ATmega16, ATmega32, ... y demás.
Los nuevos megaAVR. Bueno, eso de "nuevos" lo puse yo, por si acaso, solo para darles
cierta distinción. No es que estos AVR hagan la gran revolución por el hecho de que puedan
trabajar hasta a 20 MIPS en lugar de los 16 MIPS de sus antecesores o porque sus Timers
puedan generar 2 canales de ondas PWM cada uno.
En cursomicros.com trabajamos con los nuevos megaAVR, en especial con los de la
serie ATmegaXX8 yATmegaXX4, que son los megaAVR más potentes que se pueden
conseguir en empaques DIP de 28 y 40 pines respectivamente. Los otros megaAVR son
más grandes en cuanto a numero de pines y por tanto solo vienen en empaques TQFP,
QFN, etc. Sus periféricos son básicamente los mismos, solo suelen diferenciarse por tener
más puertos de E/S.
No digo que lo viejos AVR no sirvan para nada. Si bien es cierto que pueden tener
pequeños bugs (como cualquier microcontrolador de cualquier otra marca), los miles de
proyectos disponibles enAVRfreaks.net e incluso los primeros Robots de Dale
Heatherington demuestran que se pueden hacer maravillas con ellos. Yo solo digo que si
podemos elegir entre un buen producto y otro un poco mejor, ¿por qué no tomar el mejor?

Los XMEGA
Son microcontroladores de 8 bits pero con injertos de un típico microcontrolador de 16 bits
que elevan su performance hasta equipararse con los verdaderos microcontroladores de 16
bits como algunos dsPIC de Microchip. Solo que a diferencia de ellos, ningún Xmega viene
en empaque DIP, lo cual dificulta su empleo para fines de experimentación de un
principiante.
Los AVR XMEGA alcanzan velocidades de hasta 33 MHz pero solo operan a tensiones de
hasta 3.3V. Su memoria de programa flash llega a 384 kB. Debido a su renovada
arquitectura presentan muchas instrucciones nuevas pero su set básico sigue siendo
compatible con las 130 instrucciones de losmegaAVR y tinyAVR.

Los AVR32
Son los microcontroladores AVR de 32 bits. Aquí hay dos grupos: los de la serie UC3 y los
de la serieAP7. Son AVRs que para los noveles diseñadores deberían ser descartados como
punto de partida.

Otros Microcontroladores
Hay muchas marcas de microcontroladores en el mercado. De ellas solo mencionaré las que
creo más populares. A veces un mismo tipo de microcontrolador lo suelen proveer diversos
fabricantes, por lo que ésta no es una clasificación estrictamente metódica
En esta presentación las descripciones se hacen teniendo en cuenta solo a los
microcontroladores de 8 bits. En este sentido, salvo el caso peculiar de los Basic Stamp,
personalmente no encuentro diferencias notables en el hardware interno de cada
microcontrolador que me hagan optar por uno u otro para un proyecto en específico. No
puedo decir lo mismo sobre la disponibilidad de herramientas de desarrollo software y
hardware.

Los Microcontroladores PICmicro o PIC de Microchip
Sin lugar a dudas, son los microcontroladores que han fascinado al mundo en los últimos
años. Su facilidad de uso, comodidad y rapidez en el desarrollo de aplicaciones, abundante
información y libre disposición de herramientas software proporcionada por Microchip le
han permitido ganar terreno rápidamente en el mercado de los microcontroladores a nivel
mundial, hasta convertirse en los microcontroladores más vendidos en la actualidad.
Los buenos resultados que le dieron a Microchip la estrategia de proveer libremente a los
usuarios de muchas herramientas software para el desarrollo de proyectos con sus
productos hicieron que los otros fabricantes de microcontroladores también la adoptaran,
aunque parece que la ventaja de Microchip en el mercado está ya marcada y tal vez se
acentúe más en el futuro.

Por qué empezar con los PICS
Por su fácil adquisición. Se pueden conseguir en casi cualquier tienda de electrónica.
Por su pequeño set de instrucciones, que no logra ser igualado por ningún otro
microcontrolador. Es casi mágica la forma cómo se pueden implementar fácilmente casi
cualquier algoritmo de programa con solo sus 35 instrucciones básicas.
Por su bajo costo. Los PICs son tal vez los microcontroladores más baratos con las
características que poseen.
Por su fácil aprendizaje. Los PICs cuentan con el menor conjunto de instrucciones, y no por
ello menos eficientes, que los convierten de lejos en los de mejor aprendizaje.
Por la disponibilidad de herramientas. Las herramientas de hardware y software son de
amplio alcance. Eso nos permitirá empezar muy pronto con la experimentación sin la
preocupación por mayores recursos.

Los Microcontroladores de Freescale
Hasta no hace muchos años Motorola era uno de los fabricantes de microcontroladores con
mayores ventas en el mundo. En esos tiempos el trabajo con microcontroladores era una
actividad casi exclusiva de los considerados gurúes de la microelectrónica y que contaban
con suficientes medios para acceder a las herramientas necesarias. Lo cierto es que con el
tiempo Motorola empezó a perder su liderazgo y ha preferido ceder la franquicia a
Freescale.
Freescale continúa con la producción de microcontroladores basados en la arquitectura los
viejos productos de Motorola y dotándoles de todo el arsenal tecnológico de la actualidad.
Salvo el prestigio legado no tienen nada nuevo en su hardware que no se pueda hallar en
otros microcontroladores.

Los Microcontroladores 8051 de Intel
Intel era otro de los gigantes de los microcontroladores y µPs. Sus productos más
conocidos eran los famosos 8051, 80151 y 80251, pero actualmente ya no tiene interés en
fabricarlos. En su lugar, fueron otras compañías, como Atmel, Philips, Infineon, Dallas,
entre otros, las que tomaron la posta y fabrican algunas partes compatibles. Cabe
mencionar que, salvo raras excepciones (como los PICs), el resto de los microcontroladores
fueron inspirados en la arquitectura de estos procesadores de Intel.
Por lo demás, no tiene caso especificar sus características porque no hay diferencias
grandes respecto de los otros productos. En este sentido, no se puede afirmar qué marca
de microcontrolador es mejor o peor. Es decir, si tomamos un microcontrolador cualquiera,
siempre podremos encontrar un modelo de otro fabricante que pueda sustituirlo en una
determinada aplicación.

Los Módulos Basic Stamp de Parallax
Los Basic Stamp nos son una nueva familia de microcontroladores; son módulos montados
sobre otros microcontroladores. Cuentan con un microcontrolador, un circuito oscilador, el
circuito de interface con el puerto serie de la computadora, una memoria externa para
almacenar el programa y un regulador de tensión; todo en una pequeña tarjeta directa y/o
fácilmente conectable a las computadoras. Una vez cargado el programa, el módulo está
listo para ser insertado en el circuito de aplicación, incluso si está armado en un simple
breadboard.
Los programas se desarrollan íntegramente en un lenguaje Basic adaptado. El programa se
carga en la EEPROM serial y el microcontrolador del Basic Stamp tiene que interpretarlo.
Constitución de un módulo Basic stamp
Constitución de un módulo Basic Stamp
Por ejemplo, el BS2sx mostrado arriba cuenta con un microcontrolador que está pre
programado específicamente para trabajar como intérprete, esto es, para leer las
sentencias de comando de la EEPROM serial, decodificarlas y ejecutar las instrucciones que
representan. El microcontrolador no se puede reprogramar, viene así de fábrica.
Aunque el intérprete opera a toda su potencia, la mayor parte del tiempo la "desperdicia"
leyendo la EEPROM serial y decodificando sus comandos. Por tanto, el campo de aplicación
de los Basic Stamp es más bien de carácter didáctico y de entrenamiento; no son para
grandes proyectos.
Actualmente solo hay tres familias de Basic Stamp, cada una con muy pocas variantes,
referidas básicamente a la velocidad de operación, capacidad de memoria y cantidad de
pines de I/O. En realidad, el tercer grupo está formado por los Javelin Stamp, que
interpretan código Java en vez de Basic.
Si después de todo aún tuvieras interés por estos módulos, los circuitos de hardware y las
herramientas software están a libre disposición en la web de la
firma http://www.parallax.com/.

Programadores de microcontroladores AVR
Conseguir las herramientas software siempre es la tarea más fácil comparada con la parte
hardware. Podemos incluso trabajar con las versiones demo de los programas y ver por
nosotros mismos cuál nos resultará más conveniente. Pero con el hardware no podemos
darnos el lujo de ir probando los que queramos. Así que debemos informarnos bien antes
de gastar dinero en una compra inadecuada y/o de perder tiempo construyendo un
programador que más tarde nos pueda decepcionar.
Pero como en ninguna otra marca de microcontrolador que haya conocido, los
programadores de AVR son tan diversos que mucha gente novata se estanca buscando un
buen programador por no saber exactamente lo que quiere, gente que mientras más busca
en Internet, más opciones y términos nuevos encuentra que al finalmente queda más
confundida. Así que si eres nuevo en esto, no pienses que la lectura de este extenso
capítulo puede frenar tu progreso. Todo lo contrario, despacio se llega lejos.

Esquema de la programación de un AVR.
Para evaluar a priori la utilidad y calidad de un producto tenemos que comparar sus
características. En el caso de un programador de AVR nosotros vamos a considerar
su interface con la PC, su interface con el microcontrolador y el software de computadora
con el que lo utilizaremos. La siguiente tabla nos muestra los programadores más
reconocidos. Por supuesto que existen muchos otros, pero como veremos luego, la mayoría
de ellos son variaciones o derivados de estos.
Tabla Programadores de AVR

Programador

Interface con
Interface con el AVR
la PC

Software

Boot Loader

USB,
COM

USART, USB,…

AVRDUDE,
AVROSP, FLIP,...

USBasp

USB

SPI y TPI

AVRDUDE

USBtinyISP

USB

SPI

AVRDUDE, Studio 6

AVR Doper

USB

SPI y HVSP

AVRDUDE, Studio 6

HVProg

COM

SPI, HVSP y HVPP

AVRDUDE, Studio 6
Tabla Programadores de AVR

Programador

Interface con
Interface con el AVR
la PC

Software

AVRminiProg

USB

SPI, JTAG, HVSP y HVPP

AVRDUDE, Studio 6

ArduinoISP

USB

SPI

AVRDUDE

FTDI

USB

SPI

AVRDUDE

SI-Prog

COM

SPI

AVRDUDE

DASA

COM

SPI

AVRDUDE

BSD

LPT

SPI

AVRDUDE

AVR910

COM

SPI

AVRDUDE, AVROSP

AVRISP

COM

SPI

AVRDUDE, Studio 6

STK500

COM

SPI, HVSP, y HVPP

AVRDUDE, Studio 6

AVRISP MkII

USB

SPI, PDI y TPI

AVRDUDE, Studio 6

STK600

USB

SPI, PDI, TPI, TPI-HV, JTAG,
aWire, HVSP y HVPP

AVRDUDE, Studio 6

AVR Dragon

USB

SPI, PDI, JTAG, aWire, HVSP y
HVPP

AVRDUDE, Studio 6

JTAGICE MkII

USB

SPI, PDI, JTAG y aWire

AVRDUDE, Studio 6

AVR ONE!

USB

SPI, PDI, JTAG y aWire

AVRDUDE, Studio 6

Si te preguntas por qué en nuestra tabla de comparación no hemos considerado la cantidad
o el tipo de microcontroladores que cada programador soporta, es porque está indicado de
forma implícita. Es decir, eso depende de la interface de programación del AVR. Por
ejemplo, si vamos a trabajar con un AVR XMEGA, debemos saber que ellos tienen interface
de programación PDI y por tanto en ese caso necesitaremos un programador como
el AVRISP MkII. Simple, ¿verdad? En principio sí, pero los AVR pueden tener más de una
interface de programación, unas con más alcance que otras. Enseguida las explicamos.
Programación Serial y Paralela
La interface entre el programador y el microcontrolador puede ser Serial y Paralela. En la
tabla de arriba la Interface paralela figura como HVPP. Todas las otras interfaces
desde SPI hasta aWire son seriales.
Las líneas de las interfaces seriales varían según el protocolo. En cambio la interface
paralela es única y consta de 16 líneas sin contar los pines de alimentación del AVR. Se
deduce fácilmente que este modo solo está disponible en los AVR de bastantes pines, más
de 14 pines, si queremos establecer una regla.

Programación de Alto Voltaje HVPP y HVSP
Antes hablamos de la dicotomía serie-paralela. Ahora describiremos los modos de
programación en alto y bajo voltaje así como de la relación entre todos ellos.
El alto voltaje es un modo de programación adicional que solo está disponible en los AVR de
las familias tinyAVR y megaAVR. Es un modo cuya interface de programación involucra el
pin de RESET, pues allí donde se aplica el voltaje de 12V. Es el único pin diseñado para
soportar ese nivel de tensión.
La programación de alto voltaje ofrece algunas opciones que no se pueden encontrar en la
programación de bajo voltaje como programar los fuses SPIEN (para activar o desactivar la
programación serial) y RSTDISBL (para rehabilitar el pin RESET). En la programación de
bajo voltaje el AVR trabaja con su alimentación habitual de 5V mientras que el pin de
RESET permanece en 0V. Este modo tiene algunas limitaciones como impedirnos el acceso
al fuse SPIEN, para bien o para mal.
Advertencia: en los algunos AVR (los ATmegaXX8 de nuestro curso) el pin de RESET puede
ser programado por el fuse RSTDISBL para que trabaje como un pin de puerto más, o sea,
para que lo usemos para sacar o leer datos por él, aunque el precio a pagar puede ser muy
alto. A eso se llamadeshabilitar el pin RESET. Podemos hacerlo desde la programación de
alto o bajo voltaje, pero para volver a habilitarlo el único camino será la programación de
alto voltaje. Me pregunto si puedes descubrir el porqué.
La programación serial puede ser de alto o bajo voltaje. En cambio, la programación
paralela (PP) es siempre de alto voltaje. Por eso es casi redundante su denominación
de HVPP (High Voltage Parallel Programming). La sigla HVPP aparece en el manual
de Atmel Studio 6 solo una vez. Antes me desagradaba pero ahora me empieza a gustar.
Las líneas de la interface paralela son 16 sin contar los pines de alimentación del AVR. De
aquí concluimos que este modo solo está disponible en los AVR de bastantes pines, más de
14 pines, si queremos establecer una regla.
Líneas de interface de la programación paralela, HVPP.
La programación serial de alto voltaje está presente en los tinyAVR que cuentan con 14
pines o menos. Si uno de estos AVR tiene interface de programación SPI entones su
programación serial de alto voltaje se denomina HVSP (High Voltage Serial Programming).
Igualmente parece poco apropiado limitar el calificativo porque los tinyAVR cuya interface
de programación es TPI también soportan el alto voltaje. Debe ser porque son muy
poquitos :-(.
Lo anterior no significa que la programación HVSP vaya por el puerto SPI. Los pines de
interface en este caso son otros, tal como se ve en la siguiente imagen.

Líneas de interface de la programación serial de alto voltaje, HVSP.
Serial, paralelo, alto, bajo, más o menos de 14 pines. Sé que todo esto suena algo
enredado sobre todo si los modos e interfaces también se cruzan, pero se puede resumir y
entender fácilmente así: “En principio todo AVR debe tener al menos una programación
serial de bajo voltaje. Adicionalmente puede tener una programación de alto voltaje, que
debe ser paralela si el AVR tiene más de 14 pines o serial si el AVR tiene 14 pines o
menos”.
El pin RESET es determinante en el modo de operación del AVR.
Si aplicamos 12 V (vale entre 11.5V y 12.5V) al pin RESET, el AVR entra en modo de
programación de alto voltaje (serial o paralela, según el AVR).
Si aplicamos 5 V al pin RESET, el AVR trabaja en operación normal, o sea, empieza a
ejecutar su programa.
Si mantenemos el pin RESET en 0V, el AVR permanece en estado de RESET, es decir, no
hace nada y se queda esperando a que el pin RESET valga 5V para iniciar su operación
normal o esperando a que lleguen las instrucciones para entrar en modo de programación
de bajo voltaje.
Si ponemos el pin RESET en 0 V y luego iniciamos la secuencia de programación, uno de
cuyos paso incluye aplicar algunos pulsos al mismo pin RESET, entonces el AVR entra en
modo de programación de bajo voltaje (serial, obviamente).
Aquí hay una lección importante que debemos aprender. Algunos AVR tienen la capacidad
de multiplexar la función del pin de RESET mediante el fuse RSTDISBL. Si dejamos este
fuse con su valor de fábrica (sin programar), el pin RESET servirá para resetear el AVR, o
sea, con su función habitual. Pero si lo programamos, el pin RESET trabajará como un pin
de puerto convencional. Es útil si queremos ampliar nuestras líneas de E/S, pero observa
que ello impedirá que el AVR pueda volver a entrar en modo de programación de bajo
voltaje. La única señal que le hará recordar al pin RESET su función primigenia es la tensión
de 12 V, es decir, necesitaremos de un programador de alto voltaje.

Interfaces de programación
Aquí estudiaremos las interfaces SPI, TPI, PDI, JTAG y aWire, que podemos juntarlas a las
de alto voltaje HVSP y HVPP examinadas previamente. A todas se les suele también
denominar modos de programación.

Interface de programación SPI
Al ser esta la principal interface de programación de los AVR tinyAVR y megaAVR, vamos a
explicarlo largo y tendido, así que hecha esa salvedad espero que no te me desanimes.
Bueno, empezaremos por distinguir entre los términos ISP y SPI.
ISP es la sigla de In System Programming y hace referencia al tipo de programación
realizada estando el AVR en su circuito de aplicación, es decir, no es necesario quitarlo de
allí y colocarlo en el hardware del programador. Alguna gente le suele llamar también ICSP,
por In Circuit Serial Programming, que viene a significar lo mismo, pero se usa más con
otros microcontroladores como los PICs. Además ese término es marca registrada de
Microchip.
SPI es la sigla de Serial Port Interface, que es un bus de comunicación serial, así como lo
son los buses RS232, I2C o USB. Los microcontroladores suelen tener un módulo hardware
también llamado SPI que facilita las comunicaciones con otros dispositivos usando este
protocolo. En los AVR ese mismo módulo SPI sirve también como su interface de
programación.
Técnicamente hablando todas las interfaces de programación permiten programar el AVR
estando en su circuito de aplicación (In System), así que todos los programadores podrían
merecer el calificativo de ISP. Debemos tener eso en cuenta porque hasta en la
documentación de Atmel es frecuente hablar de programación ISP como sinónimo de la
interface SPI.
Las comunicaciones por el puerto SPI se llevan a cabo en una relación maestro-esclavo. En
este caso el maestro es el programador y el esclavo es el dispositivo programado (AVR).
Las transferencias de datos requieren de 4 líneas de interface: MISO, MOSI, SCK y SS. Para
la programación del AVR sin embargo se omite la línea SS. En su lugar se usa el pin de
RESET y en algunos casos hasta una señal de reloj para AVR puede ser necesaria. En este
momento no vamos a profundizar más sobre el control del bus SPI, pero sí vamos a
explicar la función de sus pines para que al menos sepamos cómo conectarlos cualquiera
que sea el AVR o el programador que usemos.

Líneas de interface de la programación SPI.
MISO. Master Input Slave Output. Es la línea por donde el maestro recibe datos del esclavo,
es decir, en el maestro el pin MISO es entrada y en el esclavo es salida.
MOSI. Master Output Slave Input. Es la línea por donde al maestro envía datos al esclavo,
es decir, en el maestro el pin MOSI es salida y en el esclavo es entrada.
SCK. Serial Clock. Es la señal de reloj. En la comunicación SPI el reloj está siempre a cargo
del maestro así que el pin SCK es salida en el maestro y entrada en el esclavo. Con esta
señal se establece la velocidad de transferencia de datos. Según el diseño del puerto SPI de
los AVR, esta velocidad debe ser como mucho igual a la cuarta parte de la frecuencia del
procesador. Por ejemplo, si un AVR trabaja con un XTAL de 8MHz, la frecuencia de SCK no
debe superar los 2MHz.
RESET. Esta señal no forma parte del bus SPI pero siempre debe haber una línea con el
mismo nombre que sale del programador y va al pin RESET del AVR a programar para
iniciar el modo de programación. Encuentras más información sobre la función de este pin
en la secciónProgramación de alto voltaje HVSP y HVPP.
XTAL1. Esta señal es necesaria solo si el AVR está configurado para trabajar con reloj
externo. De fábrica no lo está. En un AVR nuevo los fuses de reloj seleccionan el oscilador
RC interno, así que la primera programación no necesita esta señal. Pero desde el principio
lo común es reprogramar los fuses de reloj para seleccionar una fuente de reloj externa,
como un XTAL o resonador cerámico. Solo en esos casos debemos usar la señal XTAL1.
SS significa Slave Select. En principio esta señal sirve para que el maestro seleccione el
esclavo con el que entablará la comunicación, pues en una red SPI puede haber varios
esclavos. Sin embargo, no participa en la programación porque el AVR target da por hecho
que es el esclavo elegido desde el momento en que entra en modo de programación.
VCC y GND. Naturalmente son los pines de alimentación del AVR. La señal VCC suele a
veces aparecer con el nombre de VTG, por Voltage of Target.
Hay dos tipos de conectores para la interface de programación SPI. El grande es de 10
pines llamadoISP10PIN. Es un conector antiguo que todavía se encuentra en la
placa STK500 e incluso en la STK600pero solo por compatibilidad. Aunque parece mejor
para el diseño de PCB, Atmel nos recomienda dejarlo de lado y que procuremos usar el
conector de 6 pines ISP6PIN, que debiera estar presente en todo hardware para AVR
moderno.
Conectores ISP6PIN e ISP10PIN de la interface de programación SPI.

Conectores ISP6PIN e ISP10PIN de la interface de programación SPI.

Interface de programación TPI
TPI quiere decir Tiny Programming Interface es decir es una interface de programación de
los "tiny" AVR. Con eso podríamos pensar que está presente todos los tinyAVR, pero no. La
mayoría de lostinyAVR utilizan las dos interfaces de programación SPI y HVSP. La
interface TPI solo está disponible en los ATtiny4, ATtiny5, ATtiny9, ATtiny10, ATtiny20,
ATtiny28 y ATtiny40.
Por otro lado, la documentación de Atmel y algunos autores dicen que esta interface queda
destinada a los tinyAVR de 6 pines pero los ATtiny20, ATtiny28 y ATtiny40 echan por tierra
esa teoría. Ellos tienen como 20 pines y sin embargo también se programan vía TPI.
Como sea, la interface TPI utiliza dos líneas de comunicación llamadas TPIDATA y TPICLK,
para datos y reloj, evidentemente. Para la programación también es necesaria la
intervención del pin de RESET y según el nivel de tensión que se le aplique
el tinyAVR puede entrar en dos modos de programación:
Si se aplica 12V al pin RESET, el tinyAVR entra en modo de programación de alto voltaje.
No tiene una sigla o abreviatura propia, así que en la primera tabla presentada le llamé
simplemente TPI-HV. En este modo podemos habilitar y deshabilitar el pin de RESET para
que trabaje como el pin GPIO PB3.
Si el programador no puede entregar 12V, debe mantener el pin de RESET en 0V para
iniciar el modo de programación convencional (de bajo voltaje). También en este caso
tendremos acceso al fuseRSTDISBL para configurar el pin RESET como pin PB3, pero ya no
podremos devolverle su función de pin de RESET a menos recurramos a la programación de
alto voltaje.

Líneas de interface de la programación TPI.
El conector que usa la interface TPI es el mismo conector ISP6PIN visto arriba, solo que con
diferentes nombres de señal.

Conector de la interface de programación TPI.

Interface de programación PDI
Como su nombre indica PDI (Program and Debug Interface) es la interface de dos líneas
diseñada por Atmel con fines de programación y depuración exclusivamente para sus AVR
de la familia XMEGA. Adicionalmente los XMEGA tienen la interface JTAG, también con
propósitos de programación y depuración. Eso es todo; ellos no tienen interface aWire ni
mucho menos SPI ni TPI.
Los XMEGA también poseen fuses y lock bits para establecer diferentes formas de
operación y niveles de seguridad, incluso tienen la capacidad de poder configurar su pin de
RESET mediante el fuseRSTDISBL, pero ellos lo hacen todo mediante su interface PDI y no
necesitan programación de alto voltaje.
Las transferencias de datos en una comunicación PDI se rigen por un protocolo muy similar
al delUSART trabajando en modo síncrono. La señal de datos, llamada DATA o PDI_DATA,
es bidireccional y utiliza un pin dedicado del XMEGA; en tanto que la señal de
reloj, CLOCK o PDI_CLK, es siempre controlada por el programador y está multiplexado con
el pin RESET.
Líneas de la interface de programación y depuración PDI.
El conector que usa la interface PDI también es el mismo conector ISP6PIN, pero con
diferentes nombres de señal. Por eso el programador AVRISP MkII utiliza el mismo conector
para las interfaces SPI, PDI y TPI.

Interface de programación JTAG
JTAG también es una interface de programación y depuración presente en
los AVR32, XMEGA y en losmegaAVR de 40 pines o más. A diferencia de las
interfaces PDI y aWire, su principal modo de operación siempre ha sido la depuración,
quedando su función de programador como recurso auxiliar.
El conjunto de los pines de la interface JTAG se conoce como TAP, por Test Access Port. De
ellos los 4 pines que participan en la programación del AVR son:
TMS. Test Mode Select. Indica el estado el controlador Test.
TCK. Test Clock. Es la señal de reloj.
TDI. Test Data Input. Es la línea de entrada para las instrucciones de datos o de comando.
TDO. Test Data Output. La línea por donde el AVR envía los datos seriales.

Líneas de la interface de programación y depuración JTAG.
El conector de la interface JTAG según el estándar IEEE incluye también dos pines de
RESET: nSRSTque serviría para producir un reset software y nTRST para un reset del
controlador TAP. Ninguno se usa como tal en el AVR. En su lugar el módulo TAP puede
regresar a su estado inicial manteniendo la líneaTMS durante 5 periodos de reloj. A veces
se usa la señal nTRST pero aplicada al pin RESET del AVR para un RESET convencional. Eso
es útil no directamente para llevar al AVR al modo de programación sino como una forma
alterna de limpiar el bit JTD del registro MCUCR. Eso junto con el fuse JTAGENprogramado
son condiciones para que se abra el puerto JTAG, ya sea para programación o depuración.

Conector de la interface de programación y depuración JTAG.

Interface de programación aWire
Es la interface de programación y depuración constituida por un solo cable que tienen
los AVR32 de pocos pines, aunque eso parezca exagerado pues como mínimo los AVR32
tienen 48 pines. Lo que sí es seguro es que no está disponible en ningún AVR de 8 bits.
A pesar de su requerimiento mínimo, como interface de depuración ofrece el mismo alcance
que JTAG.
La única señal, DATA, es bidireccional y en el AVR32 corresponde al pin de RESET.

Líneas de la interface de programación y depuración aWire.
Conector de la interface de programación y depuración aWire.

Boot Loader
Pongo el Boot Loader en el primer lugar de la lista porque quiero que le demos especial
consideración.
Quienes empezamos programando los PIC adquirimos la costumbre de trabajar con un
programador. Utilizar un Boot Loader en ese mundo era una alternativa superflua o un
camino para los aventureros. Es comprensible entonces que al migrar a los AVR nos
preguntemos ¿y ahora qué programador vamos a utilizar? Tenemos muchas páginas
después de ésta donde hallar una respuesta. Pero antes de pensar en un programador
deberíamos saber que en el mundo de los AVR el Boot Loader es la mejor opción. Al
menos es mi conclusión personal.
Pero, ¿qué es un Boot Loader? Es un programa de microcontrolador que le permite
auto-programarse. Mediante el Boot Loader el AVR recibe su nuevo programa
directamente de la computadora sin intermediación de ningún dispositivo programador
y lo graba en su memoriaFLASH. La transferencia se realiza por cualquier interface
disponible, siendo las más comunes los puertos serial y USB. La siguiente figura nos
ayudará a entender su mecanismo de funcionamiento.

Esquema de la auto-programación de un AVR usando un Boot Loader.
La memoria FLASH, mostrada en color naranja, es donde se almacena el programa del
AVR, o sea, el firmware. En tiempo de ejecución el CPU lee cada una de las
instrucciones de esta memoria, las decodifica y las lleva a cabo. Aunque aparece
dividida en dos secciones, físicamente la memoria FLASH es un bloque compacto y el
firmware puede ocupar parte o todo el espacio disponible.
Anteriormente lo habitual era tener un solo firmware en el microcontrolador, que
realizaba la tarea de usuario como controlar dispositivos externos, comunicarse con la
computadora, etc. Ahora lo llamaríamos firmware de aplicación.
Siendo el Boot Loader un firmware también, significa que podemos tener dos
firmwares en el AVR. El firmware de aplicación va en la Sección de Aplicación y el
firmware de Boot Loader, en laSección de Boot Loader. ¿Cómo sabrá el AVR qué código
ejecutar?
Cada vez que se inicia el programa de un AVR, esto es tras un RESET, el CPU empieza
por ejecutar el Boot Loader –si existe– para ver si la computadora le está enviando
datos que representan un nuevo firmware de aplicación. De ser así, recibe los datos y
los graba en la sección de Aplicación, operando en lo que podemos llamar modo de
auto-programación. Pero si no encuentra nada, el CPU pasa a ejecutar el firmware de
Aplicación; operación en modo normal, por así decirlo.
Así como la memoria FLASH el Boot Loader también permite programar la memoria
EEPROM y el Byte de Lock bits. Además puede tener acceso de lectura a
los fuses aunque no los puede modificar.
Cuando trabajamos con la auto-programación dejamos de lado ese término para
introducir otros dos. El proceso de cargar un firmware de aplicación en el AVR
mediante el Boot Loader se denomina upload o subir. Y como el Boot Loader también
permite leer el firmware, a dicho proceso se denomina download o bajar.

Ventajas y desventajas
El uso de un Boot Loader tiene sus pros y contras respecto de un programador
convencional.
El espacio que el código del Boot Loader ocupa en la memoria FLASH lo descarta como
opción de la mayoría de los microcontroladores pequeños. Generalmente un Boot
Loader puede abarcar entre 1 kB y 2 kB de memoria. Para los tinyAVR cuya FLASH
anda por estos rangos no tendría sentido. En cambio para los megaAVR cuyas
memorias llegan hasta los 256 kB, el Boot Loader apenas si se deja notar.
El código del Boot Loader debería ser compilado o ensamblado para cada tipo de
microcontrolador. Es raramente compatible por ejemplo un Boot Loader para un
ATmega16 que para un ATmega32, a pesar de pertenecer a la misma serie. El primer
requisito de compatibilidad es que los AVR tengan el mismo tamaño de memoria
FLASH puesto que el Boot Loader se aloja en su parte final.
El Boot Loader no puede programar los fuses. A veces esto puede ser una pena pero
en general será una bendición.
Existen algunos microcontroladores que ya traen un Boot Loader de fábrica, pero en su
gran mayoría vienen vacíos. El Boot Loader lo tenemos que grabar como cualquier otro
programa, con un dispositivo programador convencional. Si nos vamos a dedicar a la
programación masiva de microcontroladores, nos puede resultar poco práctico grabar
el Boot Loader primero y subir elfirmware de aplicación después. Sin duda en esos
casos sería mejor usar un programador para grabar el firmware de
aplicación directamente.
Por otro lado, en los procesos de aprendizaje y de desarrollo de proyectos, donde
modificamos constantemente el firmware de aplicación, el uso del Boot Loader es la
mejor opción. Aquí nos basta con un microcontrolador para experimentar con
diferentes programas y en diferentes circuitos. Para no exagerar y asumiendo la
realidad de los microcontroladores que quemaremos en camino podemos preparar el
Boot Loader en varios de ellos. Éste será el paso más difícil pero bien habrá valido la
pena porque después solo necesitaremos de un clic para subir un nuevo firmware sin
ni siquiera tener que desconectar nuestro circuito de aplicación.

Boot Loader AVR109 y Butterfly
La variedad de Boot Loaders es tan amplia como la de los programadores mismos. Los
hay con diferente interface, con diferente protocolo, propietarios o de código abierto, y
para diferentes series de AVR. Aquí nos ocuparemos brevemente de los más
reconocidos.
AVR109 y Butterfly son términos sinónimos para identificar el mismo tipo de Boot
Loader que se presenta en la nota de aplicación AVR109 de Atmel. Este Boot Loader
está escrito en C para los compiladores AVR IAR C y AVR GCC. Su código es de libre
disposición así que podemos compilarlo para cualquiera de nuestros AVR con sección
de Boot Loader. Utiliza el puerto serie para conectarse con la computadora. En una
laptop un conversor USB-UART funciona bastante bien.
La computadora por su parte deberá correr un software que entienda el
protocolo AVR109. El más sobresaliente es AVR OSP, descrito en la nota de
aplicación AVR911 de Atmel. Su nombre significa AVR Open Source Programmer, así
que también es libre. Pero lo mejor de todo es que trabaja con los archivos XML de
dispositivo originales y actuales de Atmel, es decir, soporta todos los AVR con Boot
Loader. Abajo tenemos una versión para Windows de AVR OSP editada por Mike
Henning.
Entono del programa AVR-OSP II.
Butterfly para ser más precisos es una adaptación del Boot Loader AVR109 hecha por
Atmel para su mini tarjeta de desarrollo del mismo nombre. La tarjeta AVR
Butterfly está basada en un ATmega169, el cual además del Boot Loader se puede
programar mediante las interfaces SPI yJTAG. Esta tarjeta ofrecía características muy
útiles a un bajo precio, por eso Joe Pardue apostó por ella al escribir su eBook C
Programming for Microcontrollers, pero actualmente su preferencia ha sido desplazada
por el Arduino.
Anverso y reverso de la tarjeta de desarrollo AVR Butterfly (fuente: atmel.com).

Boot Loader de Arduino
El Arduino es, sin duda, el sistema de desarrollo del momento. Su tarjeta se puede
reducir a un megaAVR y un conversor USB-UART. Siendo así de simple es
sorprendente el éxito que ha alcanzado. Mucho se debe al framework de su lenguaje
de programación pero en cuanto al hardware contribuyó el hecho de que el conversor
USB-UART se conecte a la computadora para el data logging así como para recibir el
nuevo firmware de aplicación del megaAVR.

Tarjeta del Arduino.
Al igual que la tarjeta AVR Butterfly, el Arduino también posee un
conector ISP6PIN para la programación SPI de su megaAVR. Es solo una alternativa,
pues el principal medio de su [auto] programación sigue siendo el Boot Loader. El Boot
Loader del Arduino está basado en el protocolo de programación STK500 1.x.
El IDE del Arduino permite subir al megaAVR el código del firmware automáticamente
después de compilar el programa tan solo con presionar el botón Upload (ver la figura
de abajo). El usuario no tiene que saber dónde se encuentra el archivo hex generado
ni mucho menos conocer de los protocolos que operan detrás del escenario. ¡Genial!

Entorno de Desarrollo Integrado del Arduino.
Empero a nosotros nos interesará saber que detrás de esta ventana corre AVRDUDE
luego de presionar Upload. AVRDUDE es un programa open source que soporta casi
todos los programadores de AVR. Como no tiene un entorno propio se han hecho
muchos intentos de darle uno; aunque todos quedaron incompletos. Geir
Lunde escribió una aplicación Windows para AVRDUDE que permite usarlo para subir o
cargar el archivo hex al AVR del Arduino. Por lo visto arriba esto parecería innecesario,
pero resulta sumamente útil cuando trabajamos fuera del entorno del Arduino. El
programa se llama Xloader y lo puedes encontrar en versión más reciente en su
web russemotto.com.

Entorno del programa Xloader.
El Boot Loader del Arduino está hecho para los AVR de sus tarjetas: ATmega328,
ATmega2560 o ATmega32U4, por ejemplo. La buena noticia es que es fácilmente
recompilable para cualquiermegaAVR con soporte de Boot Loader, en especial de las
series ATmegaXX4 y ATmegaXX8, que son los usados en cursomicros.com. También es
posible compilarlo para los XMEGA e incluso para los tinyAVR pero eso requeriría de
edición extra. Para los AVR con periférico USB se usa el Boot Loader
llamado Caterina escrito por Dean Camera usando su librería LUFA.
Hay una característica en el Boot Loader del Arduino que lo convierte en mi favorito y
es que su ejecución es íntegramente controlada por el software de la computadora.
Con otros Boot Loaders como el del AVR109 suele ser necesario presionar algún botón
en el circuito del AVR aparte del botón RESET para entrar en modo de autoprogramación. En el Arduino el reset se genera mediante el conversor USB-UART. A
decir verdad en algunas variaciones del Arduino sí se requiere presionar algún botón
pero como todo el código es abierto lo podemos modificar a placer.
Los códigos de Boot Loader de Arduino están en la
subcarpeta hardwarearduinobootloaders.

Programador FTDI
Los módulos FTDI que estudiaremos son los mismos puentes USB-UART que usaremos
intensivamente para las comunicaciones de nuestro AVR con la computadora. Son los
comercialmente conocidos como conversores USB a Puerto Serie, solo que ahora los
veremos en su desempeño como programadores de AVR.
Bueno, en realidad no hay ningún programador llamado como tal. Denominamos así a
los módulos de comunicación basados en el transceiver FT232R o similar. Este chip es
un conversor USB-UART fabricado por FTDI chip. De ahí su apelativo, aunque ello no
quita la posibilidad de usar este método con un transceiver de otra marca, como por
ejemplo el CP2102 de Silicon Labso el MCP2200 de Microchip, o un conversor
personalizado basado en un microcontrolador, como el USB Serial Light apoyado por el
Arduino. De hecho dicen que el MCP2200 es en realidad un PIC pre programado.
Los módulos FTDI están difundidos en dos formas: Como un conversor USB - Puerto
Serie y como un conversor USB-UART. Dos ejemplos del primer grupo son los
módulos EVAL232R y USB-to-RS232, de la misma FTDI Chips, los cuales ofrecen a la
salida un conector DB9 con los 9 pines completos, con los voltajes y niveles lógicos
del Estándar RS232. Se comportan como auténticos puertos serie. Muy buenos.
Además los circuitos de estos y otros productos similares están disponibles en su web.
Conversores USB-UART

Los conversores USB-Puerto Serie EVAL232R y USB-to-RS232, de FTDI Chips.
Por otro lado, quienes trabajamos con microcontroladores utilizamos el puerto serie
para intercambiar con la computadora datos que no tienen que viajar en los niveles y
voltajes RS232. Tampoco solemos emplear las 9 señales disponibles. Muchas de ellas
solo son un legado de los antiguos módems.
Es por eso que varias empresas como Adafruit o Sparkfun comercializan conversores
USB-UART. Estos son como la tarjeta EVAL232R pero sin el transceiver MAX232,
encargado de la conversión de los niveles de voltaje. En lugar del DB9 poseen un
conector lineal que solo brinda las señales útiles para nosotros. Para decirlo de otra
forma, son pequeñas tarjetas que básicamente unen las líneas del FT232RL a un
conector USB por un lado y a un conector plano por el otro. En las imágenes
mostradas abajo puedes ver que casi no tienen más elementos que esos. Por eso a
veces se les llama también cables FTDI. En inglés un término muy extendido
es Breakout. Así aparece identificado en los circuitos de las prácticas de
cursomicross.com.
conversores USB-UART
Los conversores USB-UART FTDI Friend, FTDI Basic y USB Serial Light
El conversor USB Serial Light es una tarjeta basada en un microcontrolador
ATmega8U2 programado para emular un puerto serie. El AVR funciona también como
el FT232RL aunque a nivel software los drivers con que trabaja no tienen el prestigio
de FTDI chips.
Los tres adaptadores son muy parecidos. Lo que nos interesa a fin de cuentas son las 6
señales de salida que proveen. Las 5 primeras son las
mismas: GND, CTS, VDD, TXD y RXD (los nombres cambian un poco pero son las
mismas). La sexta señal es DTR en el FDTI Basic y USB Serial Lightpero RTS en el FTDI
Friend. Esa es la diferencia crucial. Como puente de comunicación para transferencias
de mensajes con la computadora funcionan igual pues allí solo intervienen TXD y RXD
además de VDD y GND claro está.
Sin embargo, como circuito para programar un AVR ya sea mediante el Boot Loader
del Arduino o por la interface SPI, sí debemos considerar esa diferencia.

Módulo FTDI como programador de interface SPI
Mediante el chip FT232RL podemos emular cualquier programador de puerto serie de
los llamados bit bang como el programador SI-Prog o los programadores DASA. Puesto
que elFT232RL puede manejar niveles de tensión TTL, la conexión con el
microcontrolador sería directa, sin resistencias, ni diodos zéner ni transistores.
Pero si vamos a trabajar con un adaptador como alguno de los tres mencionados
arriba, debemos considerar dos puntos. Primero, que el software de grabación
AVRDUDE asume que a la salida del puerto serie las señales tienen polaridad según
el estándar RS232, esto es, invertidas respecto de las señales TTL. Y segundo, que los
programadores seriales como SI-Progo DASA usan las señales DTR y RTS al mismo
tiempo, lo cual deriva en un escollo puesto que los adaptadores FTDI Basic y USB
Serial Light solo usan DTR, en tanto que FTDI Friend o usa DTR oRTS pero muy
difícilmente las dos a la vez.
Una alternativa para resolver estas dos contrariedades sería usar un conversor que nos
brinde todos los pines del puerto serie necesarios, como por ejemplo el UM232R o
el UM232H, mostrados abajo.
conversores USB-UART

Los conversores USB-UART UM232R y UM232H, de FTDI Chips.
Afortunadamente también existe una solución software. Para ello debemos abrir en un
editor de texto el archivo avrdude.conf que usa AVRDUDE. Se halla en el mismo
directorio donde resideavrdude.exe, por ejemplo en C:WinAVR-20100110bin,
suponiendo que lo instalamos con las opciones por defecto de WinAVR.
Entre otras cosas el archivo avrdude.conf contiene las descripciones e interfaces de
todos los programadores que soporta. Lo que haremos será añadir las características
correspondientes de nuestro nuevo programador que solo usa las señales de los
adaptadores FTDI Basic o FTDI Friend y con las polaridades debidas. Podemos incluirlo
en cualquier parte pero para mantener las categorías lo pondremos entre los
programadores seriales bit bang. Como ves en el extracto mostrado abajo, yo lo puse
en el segundo lugar del grupo, entre ponyser y siprog. Es todo el contenido con fondo
gris.

#
# some ultra cheap programmers use bitbanging on the
# serialport.
#
# PC - DB9 - Pins for RS232:
#
# GND 5 -- |O
#

| O| <- 9 RI

# DTR 4 <- |O |
#

| O| <- 8 CTS

# TXD 3 <- |O |
#

| O| -> 7 RTS

# RXD 2 -> |O |
#

| O| <- 6 DSR

# DCD 1 -> |O
#
# Using RXD is currently not supported.
# Using RI is not supported under Win32 but is supported under Posix.

# serial ponyprog design (dasa2 in uisp)
# reset=!txd sck=rts mosi=dtr miso=cts

programmer
id="ponyser";
desc="design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts";
type=serbb;
reset=~3;
sck=7;
mosi=4;
miso=8;
;

# programador basado en un adaptador FTDI
# reset=dtr sck=cts mosi=txd miso=rxd

programmer
id="ftdi";
desc="programador ftdi, reset=DTR sck=CTS mosi=TXD miso=RXD";
type=ft245r;
reset=4;# DTR
sck=3;# CTS
mosi=0;# TXD
miso=1;# RXD
;

# Same as above, different name

# reset=!txd sck=rts mosi=dtr miso=cts

programmer
id="siprog";
desc="Lancos SI-Prog <http://www.lancos.com/siprogsch.html>";
type=serbb;
Extracto del archivo avrdude.conf modificado.
En principio, a cada señal de la interface SPI, mosi, miso, sck y reset, le deberíamos
asignar un número entre 1 y 9 que son los que tendría el conector DB9. Pero como
dice el comentario (todo lo mostrado en azul oscuro es comentario), AVRDUDE no
puede controlar la señal RXD de forma normal. Al no poder utilizarla, cualquiera de
nosotros se habría dado por vencido, pero Doshwalo hizo. No sé cómo lo descubrió
pero lo hizo. En su esquema no emplea la numeración del conector DB9 ni la polaridad
invertida que se esperaría. No voy a quitarle más el crédito así que si deseas ver cómo
funciona de fondo te recomiendo que lo leas en su sitio web. Los que llevan prisa solo
copien y peguen lo indicado. Guarden los cambios hechos en el archivo avrdude.conf y
cierren el editor.
Ahora ya podemos usar nuestro conversor FTDI Basic u otro similar para programar
cualquier AVR. Un ejemplo sería así.

>avrdude -c ftdi -p atmega324p -P ft0 –U flash:w:main.hex:i-B 1
Por si no quedó clara la interface entre el módulo FTDI y el AVR, abajo tenemos el
circuito a utilizar. Como se ve, la alimentación del AVR proviene del mismo módulo
FTDI. No es recomendable ponerle una fuente propia. Si el AVR no tiene el pin AVCC
pues no pasa nada, y si tiene varias señales VCC o GND, se conectan todas. El circuito
del XTAL no será necesario si el AVR está configurado para operar con su reloj interno.
De fábrica viene así. Este módulo FTDI es perfectamente compatible con el FTDI
Basic y USB Serial Light. Para el FTDI Friend debemos aclarar que el pin RTS se debe
re direccionar para unirse con la señal DTR. Incluye un pequeñísimo jumper en la parte
posterior para realizar esta maniobra. Otra opción sería modificar de nuevo el
archivo avrdude.conf como lo hicimos arriba.

Esquema para programar un AVR con un Módulo FTDI.

Módulo FTDI como programador Boot Loader de Arduino
Una tarjeta Arduino es en última instancia un módulo FTDI unido a un AVR. Pero no
están unidos como aparece justo en la figura de arriba. En el Arduino el módulo FTDI
le sirve al AVR en su función original de comunicarse con la computadora como puerto
serie virtual, ya sea para intercambiar simples mensajes de texto o para cargar el
nuevo firmware de aplicación mediante el Boot Loader del AVR. En el primer caso las
líneas TXD y RXD se conectan con sus homólogos en el AVR de forma cruzada. No hay
novedad en ese aspecto, así que ni ponemos un circuito.
Por otro lado, cuando se usa el módulo FTDI para cargar el nuevo programa del AVR
interviene además de TXD y RXD la señal DTR, cuya función es resetear el AVR para
que reinicie desde elBoot Loader. Para conocer los detalles de este proceso puedes leer
la sección programador Boot Loader. El circuito en este caso queda como se ve abajo.
Valen las mismas sugerencias indicadas para el circuito anterior sobre la fuente de
alimentación y la conexión de los pines relacionados a ella. Aquí el AVR siempre
trabaja con un XTAL de 16MHz.

Esquema para programar un AVR con un Módulo FTDI usando el Boot Loader del
Arduino.
El Boot Loader le permite al AVR auto grabar en su memoria FLASH el programa que
recibe por elmódulo FTDI (auto-programación). Pero para que esto sea posible primero
el AVR debe tener grabado el programa del Boot Loader. Esto será sencillo si usamos
el módulo FTDI como programador de interface SPI, estudiado antes.
Luego el trabajo será más que sencillo. El circuito mostrado arriba es un "Arduino
desnudo". Parecerá precario pero con el Boot Loader debidamente cargado será
completamente funcional. Podremos usarlo desde su entorno natural (mostrado abajo)
o desde un programa alternativo como XLoader.
Entorno de Desarrollo Integrado del Arduino.
El programa XLoader es particularmente útil para quienes programamos el AVR desde
otras plataformas como de los compiladores IAR AVR C, CodeVisionAVR o AVR
GCC alojado en Atmel Studio 6. De esa forma trabajaremos en todas las prácticas de
cursomicros.com.
Entorno del programa Xloader.

Programador SI-Prog o PonySer
Los programadores de puerto serie o paralelo se están convirtiendo en herramientas
obsoletas por la casi extinción de esos puertos en las computadoras. Si necesitamos
armar un programador similar aunque sea provisionalmente (en un breadboard) será
para grabar el AVR que servirá de cerebro de un programador USB. Estamos hablando
de programadores que no llevan un AVR en su circuito. De esos tenemos varios otros y
los veremos luego. Ahora examinaremos los programadores conocidos como de bit
bang por la manipulación bit a bit de los datos desde la computadora. No serán los
más veloces pero sí los más fáciles de armar.
Para muchos que reconocen, a veces hasta con cierto bochorno, haber empezado con
los PIC antes que otro microcontrolador, es casi inevitable preguntar si habrá algún
programador de AVR parecido al entrañable JDM. Un sencillo pero fiable y
cómodamente portable programador de puerto serie que no necesitaba de
alimentación externa.
El programador más cercano es el también conocido en la comunidad PIC. Estamos
hablando del viejo superviviente SI-Prog, de Claudio Lanconelli, quizá más conocido
por su softwarePonyProg. Este programador usa la interface SPI para grabar todos
los megaAVR y tinyAVR que la soportan. El circuito del SI-Prog lo podemos dividir en
dos etapas: la que controla las líneas de programación (parte inferior) y la que
conforma la fuente de alimentación (parte superior). He puesto un conector ISP de 6
pines estándar en vez del conector SIL que figura en el circuito original y he ignorado
la etapa de los zócalos para los AVR que allí se incluían. Puedes encontrar los circuitos
originales y el software PonyProg que los controla en la web del autor lancos.com.
Circuito del programador SI-Prog.
La etapa de alimentación del SI-Prog parte de los 3 diodos 1N4148 que toman
corriente de las líneas del puerto serie y recargan el capacitor C3. Si el jumper está
cerrado como se ve en la figura también participa el capacitor C4 para acumular en la
entrada del LM2936Z-5 hasta 12V tensión. El chip LM2936Z-5 es un regulador parecido
al 7805 que a su salida entrega una tensión de 5V, aunque no deberíamos
reemplazarlo pues el 7805 no es LDO. De este modo el circuito obtiene su alimentación
del puerto serie. Pero si vamos a usar una fuente de alimentación externa debemos
mover el jumper a la otra posición. En este caso sí podemos pensar en un 7805 como
alternativa.
Si quitamos toda la etapa de alimentación y nos quedamos con las líneas básicas de
programación, el circuito se reduce a su forma más difundida. Ahora el
programador SI-Prog es netamente ISP porque su fuente de alimentación VCC la
obtendrá del circuito del AVR programado.
Circuito reducido del programador SI-Prog.

Programador SI-Prog reducido comercializado por deccanrobots.
El circuito resultante sigue siendo igual de fiable que el original. Es bastante bueno
aunque no podemos decir lo mismo de PonyProg. Como la mayoría de los programas
con entorno gráfico para Windows, este software ha quedado desactualizado. Soporta
pocos dispositivos, la mayoría antiguos modelos, y difícilmente funcionará en los
sistemas operativos actuales.
Entorno de trabajo del programador PonyProg.
Dada la popularidad del programador SI-Prog, se pueden encontrar en Internet
algunos otros softwares con entorno gráfico que lo soportan. Podría citar una lista de
ellos, con características tan diversas como sus limitaciones, pero sería en vano, un
desperdicio de tiempo tratando de explicar a quiénes les puede convenir tal o cual
programa. Mejor es usar sugerir un programa que a todos nos servirá sin importar el
hardware ni sistema operativo de nuestra computadora. Este programa universal es
AVRDUDE: el mejor software programador que existe, a pesar de no tener entorno
gráfico GUI completo.
En la siguiente captura, obtenida al escribir avrdude –c x, AVRDUDE nos muestra la
lista de todos los programadores que soporta. Los 5 primeros son programadores bit
bang de puerto serie. ElSI-Prog aparece identificado como siprog, pero también es
reconocido por su alias ponyser. Por eso también se le conoce así.
Programadores seriales bit bang soportados por AVRDUDE.
De hecho, y como podremos comprobar después, todos los programadores bit bang de
puerto serie tienen la misma estructura de circuito. Esto a veces puede hacer confusa
su identificación. Por ejemplo, es frecuente encontrar pequeñas variaciones en un
programador SI-Prog que hacen que se vea como un programador DASA3, y viceversa.
Sucede mucho en las versiones comerciales porque no suelen identificarse con los
nombres aquí presentados.
Pero si vamos a trabajar con AVRDUDE, poco interesa la procedencia de nuestro
programador serial y tampoco es imprescindible saber cómo se llama. Todo lo que
necesitamos es conocer la relación de las señales MISO, MOSI, SCK y RST con los
pines del conector DB9. Con estas correspondencias podemos identificarlo fácilmente.
Por ejemplo, la imagen que tenemos abajo confirma que en el programador SIProg o PonySer la interface es MISO-CTS, MOSI-DTR, SCK-RTSy RST-TXD.
Pines de interface del programador SI-Prog o PonySer.
A modo de ejemplo, si queremos grabar un archivo main.hex en la memoria FLASH de
un ATmega128P con AVRDUDE estando nuestro programador conectado al puerto serie
COM1, podríamos escribir:
>avrdude –c siprog –P com1 –p atmega128p –U flash:w:main.hex:i
O de la siguiente forma, puesto que ponyser es alias de siprog.
>avrdude –c ponyser –P com1 –p atmega128p –U flash:w:main.hex:i
A falta de un puerto serie en las computadoras actuales se han difundido bastante
losconversores USB a Puerto Serie, casi todos basados en la familia del
transceiver FT232RL, pero sobre su uso el manual del AVRDUDE no garantiza nada y
hasta recomienda no usarlo como puerto serie virtual. Si tienes un módulo de este tipo
es recomendable que leas la página delprogramador FTDI.

Programadores DASA
Existen 3 programadores de esta serie: DASA,DASA2 y DASA3. Son programadores
que no tienen alimentación propia ni derivada del puerto serie y tampoco una señal de
reloj para el AVR en caso de que éste trabajara con oscilador externo. Empezaremos
por describir el último.
No, no ha habido un error al poner la imagen. El circuito que ves abajo corresponde al
programador DASA3. Es muy parecido al circuito reducido del programador SI-Prog.
Serían idénticos de no ser por el diodo 1N4148, que en muchas ocasiones también
suele aparecer en elSI-Prog, y porque la conexión de los pines TXD yDTR en el
conector DB9 está permutada.

Circuito del programador DASA3.
El circuito del programador DASA2 es más parecido aun. De hecho podríamos decir
que es el mismo SI-Prog reducido. Supongo que por eso no es considerado por el
programa AVRDUDE. Poner su circuito por tanto sería desperdiciar espacio.
La primera versión de esta familia era el programador DASA. Es el programador serial
más simple de todos. Yo creo en el adagio kiss pero este circuito no me da mucha
confianza. Me atrevería a armarlo solo como programador provisional. Observa que
nuevamente ha cambiado la conexión de las líneas en el conector DB9.

Circuito del programador DASA.
El programador DASA (fuente: make.larsi.org).
Podríamos seguir mostrando otros programadores de puerto serie pero solo
descubriríamos que son derivados o variaciones de los programadores SIProg y DASA3. Podemos incluso hacer nuestras propias adaptaciones que puedan ser
controladas por AVRDUDE. Tanto su nombre como la conexión de señales en el
conector DB9 deben ser añadidas en el archivo avrdude.conf, que utiliza AVRDUDE.
Más adelante veremos cómo hacer esto pero para un programador que utiliza un
conversor USB-UART.
Debido a su parecido, son muy recurrentes las metidas de pata al confundir los
programadoresDASA entre ellos y con el SI-Prog. Antes de usar un programador de
estos debemos cerciorarnos en su identificación viendo los pines de interface que usa.
La siguiente imagen por ejemplo nos resalta las interfaces de los
programadores DASA y DASA3. Observa que no aparece DASA2. Si tuviéramos uno,
podemos invocarlo como siprog o ponyser.
Programadores DASA soportados por AVRDUDE.
A modo de ejemplo, si queremos grabar con un DASA3 un archivo main.hex en la
memoria FLASH de un ATmega128P con AVRDUDE estando nuestro programador
conectado al puerto serie COM1, podríamos escribir:
>avrdude –c dasa3 –P com1 –p atmega128p –U flash:w:main.hex:i
O, si usamos un DASA.
>avrdude –c dasa –P com1 –p atmega128p –U flash:w:main.hex:i
O, si usamos un DASA2.
>avrdude –c siprog –P com1 –p atmega128p –U flash:w:main.hex:i
A falta de un puerto serie en las computadoras actuales se han difundido bastante
losconversores USB a Puerto Serie, casi todos basados en la familia del
transceiver FT232RL, pero sobre su uso el manual del AVRDUDE no garantiza nada y
hasta recomienda no usarlo como puerto serie virtual. Si tienes un módulo de este tipo
es recomendable que leas la página delprogramador FTDI.

Programador USBasp
USBasp deber por mucho el programador USB para AVR más vendido y también el más
construido en casa debido a la libre disponibilidad de su hardware, firmware y la
amplia gama de software de computadora que lo soporta. Su popularidad se ha
acrecentado además por la flexibilidad de su circuito que permite usarlo con el
firmware de otros programadores USB comoAVR Doper, AVRminiProg o USBtinyISP.
Todo esto lo explicaremos de a poco. Así que empecemos por mostrar sus principales
características entres pros y contras.
Programador usbasp

Programadores USBasp.
Soporta las interfaces de programación SPI y TPI. Con SPI podemos programar todos
losmegaAVR y la gran mayoría de los tinyAVR. Con TPI cubrimos el pequeño restante
de los tinyAVR. Recordemos que la programación TPI también puede realizarse en alto
voltaje, pero ese modo no es manejado por USBasp.
Fue diseñado por Thomas Fischl utilizando la librería V-USB de Christian
Starkjohann que administra todo el protocolo de comunicación USB a nivel software,
de modo que no es preciso disponer de un microcontrolador con USB incorporado.
Inicialmente el firmware está escrito y compilado para el ATmega8 y ATmega88 pero
puede adaptarse para funcionar en cualquier AVR siempre que tenga la memoria y los
pines suficientes.
Puesto que la librería V-USB trabaja en bit banging (bit a bit), las transferencias de
datos se dan a la mínima velocidad del protocolo USB, esto es, 1.5 Mb/s (modo Low
Speed). A pesar de ello la velocidad de programación alcanza los 5 kB/s. Es bastante
rápido.
Usa un jumper para activar la alimentación Vcc al AVR target y otro para “frenar”
cuando sea necesario la velocidad de programación. Mover jumpers cada vez que
vamos a programar un AVR podría resultar hasta frustrante en especial si tenemos
planeado usar el programador activamente.
No tiene un software de computadora con entorno a lo Windows que lo maneje a
plenitud. AVRDUDE lo controla estupendamente pero su uso desde la línea de
comandos con frecuencia termina por ahuyentar a los principiantes. Muchos han
intentado darle a AVRDUDE un entorno grafico que permita programar el AVR con un
par de clics: avrdude-gui, SinaProg, AVR Burn-O-Mat, son algunos ejemplos. Para mí
todos están incompletos en especial por las ventanas de configuración de los fuses.
Inicialmente eso me disgustaba pero luego vi que los fuses no los programaba más
que una vez. El resto del tiempo solo programaba la memoria flash, para lo cual
efectivamente bastan con un par de clics.
AVRDUDE corre sin ningún inconveniente en Mac OS X y Linux. En Windows requiere la
instalación del driver open source para USB libusb. No tendría que resaltar esto de no
ser porque libusb se lleva mal con los drivers USB de Jungo que emplea Atmel Studio
6 para sus programadores y depuradores hardware, como AVRISP mkII, AVR Dragon,
etc. En estos casos se recomienda emplear la librería libusb en modo filtro, el cual
lamentablemente no está del todo acabado.
Parece que al final la balanza no favorece mucho que digamos el lado de los pros.
Siendo el programador USBasp de hardware y software open source, tal vez pienses
que en vez de criticar debería hacer mi aporte para remediar sus supuestas
deficiencias. De hecho lo pensé al principio pero luego comprendí por qué otros no lo
habían hecho antes. ¿Por qué?
Si echamos un vistazo al sitio web oficial de USBasp, quizá nos sorprenda encontrar
además del diseño original las distintas adaptaciones que hicieron muchos usuarios.
¿Por qué tantas versiones?, ¿Serán igualmente fiables?, ¿Cuál me conviene construir?
No es fácil responder a estas preguntas para alguien que pretende ser imparcial. Así
que en vez de dar un sí, no, éste o aquél, vamos a hacer un pequeño viaje para
conocer las características del circuito de este programador y comprender por qué le
hicieron algunas variaciones.
Empecemos por el circuito original del USBasp.

Programador USBasp original.
Circuito del programador USBasp original.

La interface USB
El AVR es un dispositivo esclavo en la red USB que debe estar atento a todos los datos
que le envía la computadora. Esto se consigue usando la interrupción INT0 para
detectar los cambios de nivel en la línea D+. Se puede editar fácilmente el firmware
del AVR para conectar las líneasD+ y D- a otros pines del AVR (siempre que
pertenezcan al mismo puerto), pero la conexión deD+ al pin INT0 debe permanecer.
En realidad, según la librería de USB Virtual V-USB que usa el firmware y
las interrupciones de cambio de pin del ATmega88, es posible incluso pasar por alto
esta conexión pero con una edición un poco más avanzada.
La resistencia de 2.2k presenta el programador a la computadora como dispositivo Low
Speed(1.5MHz). Si estuviera atada al pin D+ la computadora trataría de reconocerlo
como dispositivoFull Speed (12 MHz).
Es regla general que las transferencias de datos a altas velocidades no se pueden
realizar a niveles de tensión muy altos. Por eso el USB fue diseñado para que sus
líneas de datos D+ y D-manejen señales diferenciales de 0 y 3.3V, no los niveles TTL
de 0 y 5V. Si en D+ hay 3.3V en D- debe haber 0V y viceversa. Los microcontroladores
con USB hardware tienen pines preparados para entender estos niveles incluso si están
alimentados por Vcc = 5V. Pero como el USBasp no lleva uno de esos, tiene que usar
diodos zéner. Nota que si fueran de 3.3V, estaríamos en el borde del rango que puede
entender el AVR. 3.6 V está bien. Eso junto con las resistencias de 68 Ω dan los niveles
de tensión e impedancias que el estándar USB puede aceptar.

Interface USB del programador USBasp.
Uno de los diseños que me llamó la atención rápidamente por su PCB compacto (solo
tiene 3 discretos puentes) era el de J.A. de Groot. Pero me desilusioné al percatarme
de que le había quitado los diodos zéner. Yo no habría hecho eso, pues la
especificación del USB es bastante estricta. Si bien es cierto que era así en las
primeras del programador, no he visto otros proyectos con USB emulado que omitan
los diodos zéner.
Programador USBasp modificado por J.A. de Groot.

La interface SPI
En el circuito del USBasp original las líneas de la interface SPI van directamente al
conector. Puesto que el AVR programador siempre trabaja a 5 V, es necesario que el
AVR target (a programar) también lo haga o, de lo contrario, no se podrán entender.
Hasta allí no parece haber nada novedoso, ¿verdad?

Interface SPI del programador USBasp.
Sin embargo, varias personas decidieron interponer elementos en las líneas del bus
SPI pensando en los AVR alimentados por 3.3 V o, en general, por voltajes inferiores a
5 V. No estamos hablando de los XMEGA ni de los AVR32 que son los que trabajan a
3.3 V de forma exclusiva. Además ellos no se programan por la interface SPI. Nos
referimos a los tinyAVR ymegaAVR que como sabemos pueden trabajar entre 1.8V y
5.5 (esos son valores críticos, no significa que tengamos que llegar a esos extremos).
En algunos rediseños como el de Fisch und Fischl GmbH y Thomas Pfeifer se han
puesto resistencias con el propósito adicional de prevenir cortocircuitos. En otros
diseños como Pawel Szramowski o yuki-lab.jp han ido más lejos y le han colocado un
buffer como el 74HC125 o el 74HC541. En cualquiera de esos casos el jumperSupply
Target debe permanecer abierto durante la programación dejando que AVR target
trabaje con su propia alimentación (inferior a 5V).
Programador usbasp

Interface SPI del programador USBasp.

Los jumpers
Hay tres jumpers en el programador USBasp:
Jumpers del programador USBasp.
Slow SCK. Sirve para reducir velocidad de programación del USBasp. Por defecto,
cuando este jumper está abierto, la velocidad del bus SPI se establece a Fsck =
375kHz (frecuencia de la señal SCK). En la gran mayoría de los casos se cumplirá con
el requisito de ser menor a la cuarta parte de la frecuencia del procesador, es
decir, Fsck < F_CPU/4, y no habrá problemas pues en general nuestro F_CPU vale la
frecuencia del XTAL usado. Una de las excepciones se da cuando el AVR es nuevo,
donde los fuses de reloj configuran la frecuencia F_CPU = 1MHz, esto es, la octava
parte de la frecuencia del oscilador RC interno del AVR. En ese caso la condición
375kHz < 1MHz/4 no es cierta y por tanto será necesario disminuir el valor de Fsck.
El programador USBasp ofrece dos formas de reducir el valor de Fsck: por la vía
hardware, cerrando el jumper Slow SCK, y por la vía software, desde el programa
como AVRDUDE. Si el jumper está cerrado, el bus SPI se configura con Fsck = 8kHz.
Esta frecuencia no solo cumplirá la exigencia de Fsck < F_CPU/4, sino que puede
reducir demasiado la velocidad de programación del AVR. La buena noticia es que si
programamos los fuses de reloj para que la frecuencia F_CPU sea superior a 1.5MHz,
en las siguientes ocasiones ya no habrá necesidad de reducir el valor de Fsck.
Self Programming es el jumper de auto-programación. Los programadores USB suelen
tener un jumper similar para permitir la actualización automática de su firmware, pero
este no es el caso. En el USBasp la actualización o la primera grabación del firmware
es manual. Si queremos hacerlo, debemos grabar el AVR del USBasp con otro
programador. Solo en esa ocasión se debe cerrar el jumper Self Programming. El resto
del tiempo debe estar abierto.
Supply Target. Este jumper sí lo usaremos con frecuencia. Si está cerrado se conectan
las líneas Vcc del programador USBasp y del circuito de aplicación (target). Aunque eso
te parezca obvio, debes notar que si el circuito target tiene su propia alimentación
activada, el jumper cerrado podría dejar el puerto USB dañado. El USB en este caso
está configurado para brindar alimentación [al USBasp y al circuito target inclusive];
no para recibirla. Así que antes de cerrar el jumper, es recomendable apagar la
alimentación del circuito target. En ese caso podemos incluso mantener el jumper
cerrado todo el tiempo; así funcionaba el USBasp en sus primeras versiones.
Dejar el jumper abierto y permitir que el circuito target trabaje con su propia
alimentación es útil cuando ésta tiene un valor inferior a 5 V. Recordemos que esto
requiere la adaptación de las líneas del bus SPI con buffers o al menos con resistencias
en serie. Para más información ver la interface SPI.

Los diodos LED
Son elementos básicamente decorativos. El LED verde se enciende cuando apenas se
conecta el programador al puerto USB de la computadora. El LED rojo se enciende
durante el proceso de grabación del AVR. Desde el firmware es posible reubicarlos así
como editar su función. Yo por ejemplo modifiqué el código para que el LED verde se
encienda tras la correcta enumeración del programador, o sea cuando la computadora
lo haya reconocido correctamente. También Limor Fried hizo lo mismo con su
programador USBtinyISP. En el circuito original las resistencias de cada LED son de 1k.
Eso por supuesto depende del tipo de LED. Para mis diodos LED yo tomé resistencias
de 330 Ω.
Diodos LED del programador USBasp.

Los conectores
Si por su tamaño el programador necesitará un cable para conectarse a la
computadora, se usará un conector de recepción de tipo B estándar (ese que tiene
forma de cajita y es el más usado) o micro (demasiado pequeño). Aunque los
conectores mini ya no están contemplados en especificación 3.0 del USB, todavía se
encuentran en el mercado y son muy populares en dispositivos portátiles.
Pero si el programador es muy pequeño se puede conectar directamente a la
computadora usando un conector de tipo A macho. Es el conector que usaron por
ejemplo Fabio Baltieri y Sven Hedin en sus adaptaciones.
Programador usbasp

Adaptaciones del USBasp de Fabio Baltieri (izquierda) y Sven Hedin (derecha).
Los dos diseños se ven muy parecidos, uno más presentable que el otro, pero la
principal diferencia está en el conector ISP. ¿Por qué un conector tiene 6 pines y el
otro 10?
En el USBasp original el conector es un ISP10PIN, de 10 pines. Además de las líneas
de programación propias de la interface SPI (MISO, MOSI, SCK, RST) y de
alimentación (VCC y GND), están conectadas las líneas de transmisión TXD y
recepción RXD del USART. El USART sirve para comunicarse con la computadora por el
puerto serie. El autor, Thomas Fischl, la puso para la depuración del programador, es
decir, para quienes deseen contribuir al desarrollo y mejora de su firmware. Para los
usuarios finales esta interface está por defecto desactivada y TXD y RXDson “líneas
muertas”, de modo que pueden prescindir de ellas. Sin las líneas del USART basta con
un conector de 6 pines para el programador.

Líneas del USART en el conector ISP10PIN pines del USBasp.
El conector de 10 pines del USBasp original es compatible con el hardware antiguo de
los AVR. Atmel todavía lo incluye en algunos de sus productos como sus
placas STK500 y STK600 pero solo con fines de compatibilidad. Al final siempre nos
insta a usar el conector de 6 pines. Así lo han entendido los diseñadores de
programadores similares como AVR Doper o USBtinyISP. Parece que somos muy pocos
los que seguimos el mismo camino con el USBasp hecho íntegramente en versión
through hole. Recuerdo haber visto también el programador de yuki-lab.jp con un
conector ISP6PIN.

Los zócalos
Para ser sincero, yo era de los que venían del mundo de los PIC y tenía la casi viciosa
costumbre de utilizar un programador con zócalo donde colocar el PIC para después
retirarlo y llevarlo al circuito de aplicación. Con los AVR me deshice definitivamente de
esa práctica. Luego entenderás por qué.
Programador usbasp

Programadores USBasp con zócalos.
Un turco de nickname gevv armó un USBasp con zócalo ZIF para los AVR de 8, 20, 28
y 40 pines. Adicionalmente cuenta con un conector ISP de 10 pines para programar
AVRs fuera del zócalo; es el de la imagen derecha. Es uno de mis anhelos llegar algún
día a Turquía, pero no imaginaba que el idioma me resultara tan complicado. No
entendí nada de su web. Ni siquiera sé si acepta los AVR de 20 pines antiguos o de los
nuevos. Haré un mayor esfuerzo en otra oportunidad. Por ahora no tengo interés en su
programador.
El programador de la imagen izquierda es la adaptación de Matthias Görner utilizando
zócalos ordinarios de 28 y 40 pines. No tiene conector ISP para programar los AVR que
no quepan en sus zócalos.
Si al igual que a mí, no te gusta ninguno de los dos programadores mostrados, puedes
rehacer el tuyo propio según tus preferencias. Con el firmware y el circuito a tu
disposición solo necesitas conocer dos cosas:
Las señales del programador MOSI, MISO, SCK y RST deben ir a los pines del AVR con
el mismo nombre. Se da por hecho la conexión de todos los pines de
alimentación GND, VCC y, si existe, también AVCC. Puedes encontrar información
adicional en la sección interface de programaciónSPI.
El modo de programación es una de las formas de trabajo del AVR, y para que trabaje
el AVR necesita de una señal de reloj que puede ser interno o venir del exterior.
Cuando el AVR es nuevo su reloj es el circuito RC interno. Después lo programamos
para que su reloj sea externo, normalmente de un XTAL.
Los dos programadores descritos antes utilizan un XTAL para el AVR target. Otra forma
sería generar una onda cuadrada periódica en el AVR del programador y aplicarla al
pinXTAL1 del AVR target. Esta señal es compatible con cualquiera de las fuentes de
reloj externas del AVR. Cuando programamos los fuses de reloj en realidad estamos
optimizando el circuito de reloj interno del AVR para alguno de los elementos externos
entre XTAL, resonador cerámico, circuito RC o simplemente una señal cuadrada en el
pin XTAL1; no significa que una configuración de reloj impedirá el funcionamiento del
AVR con la otra fuente de reloj externa, solo que quizá no será la mejor opción.
Un programador con zócalos puede ser realmente útil cuando nos dedicamos a la
programación en serie de microcontroladores. Las pocas veces que tuve que hacerlo
fue utilizando microcontroladores de 28 o 40 pines (comprándolos en cantidades, los
microcontroladores pequeños cuestan casi lo mismo que los medianos). Así que al
empezar a trabajar con los AVR supuse que si quizá, tal vez, alguna vez,… necesitaba
de un programador con zócalo, sería con un ZIF para los AVR de 28 y 40 pines. En el
hardware puse un ATmega88 SMD para reducir el tamaño de la PCB y en el firmware
configuré el Timer2 para generar una onda cuadrada de 2MHz como reloj del AVR
target.
Programador usbasp

Programador USBasp con zócalo ZIF.
El resultado es como lo que ves arriba. Para mí quedó muy bonito pero te confieso que
de todos mis programadores es el que menos uso. Me costó casi lo mismo que
un Arduino. Así que antes que cometas el posible mismo error, te recomiendo que te
compres eso: un Arduino. Con ello tendrás un microcontrolador, un programador, un
conversor USB-UART (puerto serie para tu laptop) y hasta una fuente de alimentación
de 5V y 500mA.

Programador USBtinyISP
El programador USBtinyISP fue desarrollado porLimor Fried a partir del
programador USBtiny deDick Streefland. Como su nombre deja suponer, está basado
en un microcontrolador tinyAVR, el ATtiny2313, y solo ofrece la interface de
programación SPI (ISP por antonomasia). Describamos algunas de sus características:
Puede programar todos los megaAVR ytinyAVR con interface SPI, excepto los que
cuentan con memoria superior a 64K, que son los familiares del ATmega128 y
ATmega256.
Utiliza buffers para grabar microcontroladores AVR que operan a Vcc < 5V.
Su alimentación proviene del puerto USB. También puede suministrar alimentación de
5V al circuito target, siempre que no exceda de los 100mA. Este tope se puede
extender editando el firmware.
Tiene una aceptable velocidad de programación de 1kB/s. Para tener una referencia
práctica, los programas de cursomicros son de 2kB en promedio, así que grabarlos en
el AVR tomaría cerca de 2 segundos cada uno.
Se puede usar desde AVRDUDE o desde Atmel Studio 6.
En resumen es bastante parecido al USBasp, salvo por la primera limitación y por el
costo. Este programador no está disponible comercialmente en versión ensamblada. Lo
podemos comprar desde adafruit.com solo como un kit. La ventaja de este kit es que
el microcontrolador ATtiny2313 ya viene pre-programado. Eso te puede ahorrar
bastante tiempo y esfuerzo.
Programador usbasp

Vistas exterior e interior del programador USBtinyISP (fuente: ladyada.net).
Las líneas de la interface de programación SPI del USBtinyISP se reúnen en los dos
conectores estándar: el cada vez menos usado de 10 pines y el recomendado por
Atmel de 6 pines.
El jumper OUTPWR tiene las mismas funciones que en el programador USBasp:
Brindar alimentación (con el jumper cerrado) de 5V al circuito target si éste no la
tiene, o
Permitir (con el jumper abierto) que el circuito target trabaje con su propia
alimentación, lo cual es deseable cuando su nivel es diferente de 5 V.
Actualmente el USBtinyISP se encuentra en su versión 2.0. La diferencia notoria
respecto de la versión 1.0, aparte de algunos pequeños ajustes en el firmware, está en
el buffer 74AHC125Ncolocado en las líneas de programación MISO, MOSI, SCK y RST,
del hardware. Además de aislante, este CI sirve de puente entre las señales TTL del
AVR programador y los niveles del AVR programado, que pueden ser de 0-5 V o bajar
hasta 0-2 V. El buffer 74AHC125N se alimenta del pin Vcc del circuito target.
En el circuito de la versión 1.0 en lugar de los buffers las líneas de programación se
aislaban con resistencias de 1.5k. En teoría, también permiten la comunicación entre
dos microcontroladores que operan a diferente nivel de Vcc, pero algunos dicen que en
la práctica no es una interface muy fiable.

Circuito del programador USBtinyISP, versión 2.0.
Circuito del programador USBtinyISP, versión 1.0.

Construcción de un USBtinyISP
El programador USBtinyISP es open source. Todos los archivos están disponibles en la
web de su autora, www.ladyada.net. Como no pasa por muchas actualizaciones aquí
están algunas réplicas, actualizadas a noviembre de 2012.
Circuito y PCB en Eagle. (Versión 2.0)
Firmware del microcontrolador ATtiny2313. (Versión 2.0)
Circuito y PCB en Eagle. (Versión 1.0)
Firmware del microcontrolador ATtiny2313. (Versión 1.0)
El firmware compilado es main.hex y se encuentra en la carpeta spi.
Para construir cualquier programador de AVR con interface USB se sigue el mismo
procedimiento, el cual se divide en dos etapas:
Elaborar la placa de circuito impreso, PCB, y soldar todos los componentes. En lo
posible usamos un zócalo en vez del AVR del programador. Aquí terminaríamos si el
programador no se basara en un microcontrolador. De hecho, si compraste el kit de
ensamblaje deadafruit, coloca el ATtiny2313 en el zócalo y ya puedes empezar a usar
tu programadorUSBtinyISP. Quienes estén armando su programador con componentes
propios, deberán enfrentarse a la siguiente parte.
Programar el AVR del programador usando otro programador. Esta fase puede ser la
más tediosa. Si al inicio nos cuesta conseguir ese otro programador, después nos
quebrará la paciencia usarlo con AVRDUDE. Si ya estás acostumbrado a usar otros
programadores como el USBasp, entonces esto será pan comido.
Puedes seguir el procedimiento totalmente ilustrado por la misma Limor Fried en la
páginawww.ladyada.net/make/usbtinyisp/make.html de su web. Desafortunadamente
Limor solo guía durante la primera etapa. Y lo que para muchos puede caer como
baldazo de agua fría, nos pide que no busquemos ayuda sobre la grabación del
firmware en su foro. ¿ ? Debe ser porque la respuesta involucra múltiples formas o
para animarnos a comprar el kit, donde el AVR ya viene pre-programado.

Uso del USBtinyISP
Al conectar el programador el LED verde se enciende si su enumeración se llevó a cabo
con éxito.
El programador USBtinyISP puede ser controlado por AVRDUDE o desde Atmel Studio
6. Su nombre para ser invocado desde AVRDUDE es usbtiny. Por ejemplo, para
programar la memoria FLASH de un ATmega324P con el archivo main.hex podríamos
ejecutar:

>avrdude –c usbtiny –p atmega324p –U flash:w:main.hex:i
El LED rojo se enciende durante el proceso de grabación.
La instalación de WinAVR trae consigo los drivers de libusb que usa AVRDUDE. Sin
embargo, Limor sugiere usar los drivers modificados [por ella]. Hay dos versiones:
el driver para Windows de 32 bits y el driver para Windows de 64 bits.
Los programadores que pueden ser controlados por Atmel Studio 6 son los que utilizan
los protocolos de programación estándar de Atmel; el STK500, por ejemplo. Pero ese
no es el caso del USBtinyISP. En vez de implementar el protocolo STK500 en el
firmware del microcontrolador, cosa que no hubiera sido posible debido a su poca
memoria, de Limor Fried decidió escribir una aplicación que hace la conversión del
protocolo en la computadora. Para decirlo burdamente, se trata de un parche que
engaña a Atmel Studio 6 haciéndole creer que el USBtinyISP es un programador de
protocolo STK500v2.
Funcionando como programador STK500 el USBtinyISP tiene dos restricciones
destacables respecto del original:
No siempre puede programar el byte de calibración. Este byte permite ajustar la
frecuencia del oscilador RC interno del AVR cuando se usa como reloj del sistema. Creo
que nos es relevante puesto que lo habitual es usar el AVR con XTAL. Además la
calibración del circuito RC interno también se puede hacer en tiempo de ejecución, es
decir, podríamos añadir un par de líneas en el programa del microcontrolador para
solucionar el problema.
Sin duda la principal diferencia entre un programador original de Atmel y cualquiera de
sus clones que trabajan emulando un puerto USB es la velocidad de programación.
El USBtinyISPacepta los comandos para cambiar la velocidad de programación pero no
los obedece. ElUSBtinyISP sigue con su tope de 1kB/s.
Para que nuestro USBtinyISP emule un STK500 debemos seguir dos pasos:
Instalar la aplicación com0com para generar dos puertos series virtuales en nuestra
computadora. Este software es open source y lo puedes descargarla
desdehttp://com0com.sourceforge.net.
Luego debemos instalar el software puente USBtiny500 de Limor Fried.

Programador AVR Doper
La inexistencia de un periférico USB en los microcontroladores AVR de empaque DIP
junto con la arquitectura y compatibilidad en el set de instrucciones han alentado a
algunas personas a desarrollar librerías de USB software. Son librerías optimizadas a
nivel ensamblador que manejan las rutinas mínimamente necesarias del protocolo
USB. Tenemos por ejemplo, la librería de Igor Cesko explicada en la nota de
aplicaciónAVR309 de Atmel. Otra librería, con mejor soporte y actualización, es VUSB (acrónimo de Virtual USB), de Christian Starkjohann. Es la misma librería que
utilizó Thomas Fischl para su programador USBasp.
IMAGINO que cuando Christian vio el trabajo de Thomas pensó “yo puedo hacerlo
mejor” y decidió crear el programador AVR Doper.

Programador AVR Doper en su circuito original.
AVR Doper es un proyecto Open Source tanto en hardware y software. Muchas de sus
características son también apreciables en otros programadores: se alimenta desde el
puerto USB, posee buffers en las líneas de programación para programar dispositivos
que trabajan con voltajes inferiores a 5V y hasta cuenta con un jumper como forma
alternativa de reducir la frecuencia del reloj SCK (velocidad de programación) similar
al USBasp.
El firmware del programador AVR Doper está basado en el protocolo de
programación STK500v2de Atmel y como tal puede programar todos los megaAVR y la
mayoría de los tinyAVR. El protocolo original maneja las tres interfaces de
programación: SPI, HVSP y HVPP, de los cuales AVR Doper acepta los dos primeros.
Utiliza un conector de 10 pines para la programación SPI que, con algunas variaciones,
todavía es compatible con el estándar de Atmel. Para la programación de alto voltaje
dispone de dos zócalos para los [tiny] AVR de 8 y 14 pines. Esta
interface HVSP también sale al exterior mediante un conector libre de 20 pines.
Pero lo más importante –creo yo– es que, como todo programador STK500, puede ser
controlado desde Atmel Studio 6. Adiós insufrible línea de comandos de AVRDUDE y a
sus incompletas máscaras como SinaProg. Esto nos facilitará el trabajo ahorrándonos
tiempo.
¡Wow! Hubiera conocido este programador antes de construir mi USBasp dirán
algunos. La buena noticia para ellos es que pueden convertir su USBasp en un AVR
Doper tan solo cambiándole el firmware.
Claro que el circuito del USBasp no da para la programación de alto voltaje. Así que
está funcionalidad no estará disponible. Para mí es una limitación inapreciable.
Observa que si renunciamos a la programación HVSP, podemos deshacernos del
circuito elevador de tensión, de los dos zócalos in-situ y de ese enorme conector de 20
pines, que es el mismo que usó Tobias Hammer en su programador HVProg. Él lo hizo
justificadamente, pues empleaba todos los pines. Pero no entiendo por qué Christian
Starkjohann le siguió el paso. Ni siquiera es un conector estándar. En fin, el caso es
que al final nos quedará un circuito muy similar al del USBasp o del mismo USBtinyISP.
Incluso podemos notar los tres jumpers que, de hecho, Christian los puso ex profeso
por compatibilidad con el USBasp.
Circuito original del programador AVR Doper (fuente: obdev.at).
AVR Doper no es el primer programador que presentamos. Su descripción la hacemos
asumiendo que ya conocemos los programadores tratados previamente en especial
el USBasp. Quienes lo estudiaron comprenderán fácilmente el funcionamiento del AVR
Doper. Quizá les sorprenda un poco encontrar dos señales de reloj en el circuito, pero
también este punto ya lo explicamos anteriormente. La señal SCK es el reloj del
bus SPI; es la que marca la velocidad de transferencia de datos entre el AVR
programador y el AVR programado. La señal TSCK es el reloj de sistema del AVR
programado (target, de ahí la T); es la que establece su velocidad de trabajo. En otros
programadores no hay esta señal porque se asume que AVR target trabaja con su
propio reloj, generalmente basado en un XTAL.
Al igual que pasó con el programador USBasp, tras el éxito del AVR Doper muchas
personas hicieron sus propias adaptaciones. A continuación, algunas de ellas.
Las siguientes imágenes son del rediseño de Robert. Casi no hay diferencia con el
original pero sí se nota que tiene los componentes mejor ordenados. El circuito es el
mismo.
Programador usbasp

Programador AVR Doper con PCB mejorado por Robert.
También hay quienes prefieren tener su programador en una caja pequeña. AVR tiny
Doper es un rediseño hardware que prescinde de los zócalos de 8 y 14 pines pero
como el AVR es de empaque SMD incorpora un conector ISP6PIN para la actualización
del firmware. Parece que al autor tampoco le gustaba el gigantesco conector de 20
pines.

Programador AVR tiny Doper SE de www.s-engel.de.
Por supuesto, no faltan quienes modifican el programador quitándole la funcionalidad
que no usarán. Domen Ipavec se deshizo de todos los componentes que permiten la
programaciónHVSP y en el espacio ganado le añadió diodos dobles en casi todas las
señales como protección ESD. Similar característica posee el programador AVRISP
mkII. Ni los empaques SMD le ayudaron a darle un mejor aspecto a su placa.
Programador AVR Doper adaptado por Domen Ipavec.
En realidad tenemos hasta tres formas de construir un AVR Doper: (1) construirlo con
su circuito original, (2) montarlo en el circuito metaboard y (3) implementarlo en el
hardware de un USBasp. Puesto que la disposición de las líneas que van o salen del
ATmega8 es diferente en cada caso, el autor ha escrito el firmware usando macros que
permiten compilarlo para uno u otro circuito. Pero no te preocupes, no es necesario
que nosotros compilemos el programa. Christian también ha publicado todos dos
archivos hex, listos para grabar en el ATmega8.
El programador AVR Doper ha sido corregido y mejorado a lo largo de tres años. La
última actualización es de noviembre de 2008 y la puedes descargar desde su web o
desde aquí.

Uso del AVR Doper
El programador AVR Doper posee un jumper USB HID que establece dos modos de
operación. Este jumper se debe mover antes de conectar el programador a la
computadora.
Si el jumper USB HID está cerrado, el AVR Doper inicializará como un dispositivo HID.
En este caso solo podremos usarlo desde AVRDUDE. Podemos invocarlo
con stk500v2 o sus alias (avrispmkII o avrispv2). También será necesario
especificar avrdoper en parámetro –P. Por ejemplo, para programar la flash de un
ATmega168p con el programa main.hex podemos escribir.

>avrdude –c stk500v2 –P avrdoper –p atmega168p –U flash:w:main.hex:i
Si dejamos el jumper USB HID abierto, el AVR Doper trabajará en modo CDC. Ahora el
programador aparecerá como un dispositivo conectado a un puerto serie COM virtual.
Debemos especificar ese puerto COM al configurar el software programador. En la
siguiente línea por ejemplo repetimos el ejercicio anterior considerando que se ha
creado el puerto COM1:

>avrdude –c stk500v2 –P com1 –p atmega168p –U flash:w:main.hex:i
El trabajo desde Atmel Studio 6 se reduce a algunos clics.
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros
Curso micros

Más contenido relacionado

La actualidad más candente

El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC
SANTIAGO PABLO ALBERTO
 
PIC vs AVR
PIC vs AVRPIC vs AVR
PIC vs AVR
CarlosOrozco140
 
Pic ppt 13104022(4th_year)
Pic ppt 13104022(4th_year)Pic ppt 13104022(4th_year)
Pic ppt 13104022(4th_year)
Daman Singh
 
Questões clp-automação
Questões clp-automaçãoQuestões clp-automação
Questões clp-automação
Carlos Melo
 
PIC Microcontrollers
PIC MicrocontrollersPIC Microcontrollers
PIC Microcontrollers
Abdullah Saghir Ahmad
 
Microcontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisMicrocontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas Digitais
Fabio Souza
 
Pic16cxx instruction set
Pic16cxx instruction setPic16cxx instruction set
Pic16cxx instruction set
v Kalairajan
 
The I2C Interface
The I2C InterfaceThe I2C Interface
The I2C Interface
Corrado Santoro
 
Timer programming for 8051 using embedded c
Timer programming for 8051 using embedded cTimer programming for 8051 using embedded c
Timer programming for 8051 using embedded c
Vikas Dongre
 
Communication protocols - Embedded Systems
Communication protocols - Embedded SystemsCommunication protocols - Embedded Systems
Communication protocols - Embedded Systems
Emertxe Information Technologies Pvt Ltd
 
Curso basico automatos programaveis dia 1
Curso basico   automatos programaveis dia 1Curso basico   automatos programaveis dia 1
Curso basico automatos programaveis dia 1Alcides Santos
 
Clp Conceito
Clp ConceitoClp Conceito
Clp Conceito
JÚLIO PEIXOTO
 
Switch level modeling
Switch level modelingSwitch level modeling
Switch level modeling
Devi Pradeep Podugu
 
8-bit PIC Microcontrollers
8-bit PIC Microcontrollers8-bit PIC Microcontrollers
8-bit PIC Microcontrollers
Premier Farnell
 
8155 GPPI
8155 GPPI8155 GPPI
8155 GPPI
deval patel
 
Flip flops, counters &amp; registers
Flip flops, counters &amp; registersFlip flops, counters &amp; registers
Flip flops, counters &amp; registers
Dharit Unadkat
 
Lect 2 ARM processor architecture
Lect 2 ARM processor architectureLect 2 ARM processor architecture
Lect 2 ARM processor architecture
Dr.YNM
 
8051 MICROCONTROLLER ARCHITECTURE.pptx
 8051 MICROCONTROLLER ARCHITECTURE.pptx 8051 MICROCONTROLLER ARCHITECTURE.pptx
8051 MICROCONTROLLER ARCHITECTURE.pptx
MemonaMemon1
 
Msp 430 architecture module 1
Msp 430 architecture module 1Msp 430 architecture module 1
Msp 430 architecture module 1
SARALA T
 

La actualidad más candente (20)

El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC El club de Programación de microcontroladores PIC
El club de Programación de microcontroladores PIC
 
PIC vs AVR
PIC vs AVRPIC vs AVR
PIC vs AVR
 
Pic ppt 13104022(4th_year)
Pic ppt 13104022(4th_year)Pic ppt 13104022(4th_year)
Pic ppt 13104022(4th_year)
 
Questões clp-automação
Questões clp-automaçãoQuestões clp-automação
Questões clp-automação
 
PIC Microcontrollers
PIC MicrocontrollersPIC Microcontrollers
PIC Microcontrollers
 
Microcontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisMicrocontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas Digitais
 
Pic16cxx instruction set
Pic16cxx instruction setPic16cxx instruction set
Pic16cxx instruction set
 
The I2C Interface
The I2C InterfaceThe I2C Interface
The I2C Interface
 
Timer programming for 8051 using embedded c
Timer programming for 8051 using embedded cTimer programming for 8051 using embedded c
Timer programming for 8051 using embedded c
 
Communication protocols - Embedded Systems
Communication protocols - Embedded SystemsCommunication protocols - Embedded Systems
Communication protocols - Embedded Systems
 
Curso basico automatos programaveis dia 1
Curso basico   automatos programaveis dia 1Curso basico   automatos programaveis dia 1
Curso basico automatos programaveis dia 1
 
Clp Conceito
Clp ConceitoClp Conceito
Clp Conceito
 
Switch level modeling
Switch level modelingSwitch level modeling
Switch level modeling
 
8-bit PIC Microcontrollers
8-bit PIC Microcontrollers8-bit PIC Microcontrollers
8-bit PIC Microcontrollers
 
8155 GPPI
8155 GPPI8155 GPPI
8155 GPPI
 
El PIC16F84
El PIC16F84El PIC16F84
El PIC16F84
 
Flip flops, counters &amp; registers
Flip flops, counters &amp; registersFlip flops, counters &amp; registers
Flip flops, counters &amp; registers
 
Lect 2 ARM processor architecture
Lect 2 ARM processor architectureLect 2 ARM processor architecture
Lect 2 ARM processor architecture
 
8051 MICROCONTROLLER ARCHITECTURE.pptx
 8051 MICROCONTROLLER ARCHITECTURE.pptx 8051 MICROCONTROLLER ARCHITECTURE.pptx
8051 MICROCONTROLLER ARCHITECTURE.pptx
 
Msp 430 architecture module 1
Msp 430 architecture module 1Msp 430 architecture module 1
Msp 430 architecture module 1
 

Destacado

Netduino
NetduinoNetduino
Netduino
David Matias
 
Noticias sobre microcontroladores
Noticias sobre microcontroladoresNoticias sobre microcontroladores
Noticias sobre microcontroladoresjohanmurcia
 
Hoja datos AVR-Board
Hoja datos AVR-BoardHoja datos AVR-Board
Hoja datos AVR-Boardalepusto
 
ATMEL-Presentación
ATMEL-Presentación ATMEL-Presentación
ATMEL-Presentación
Estefany Luna
 
Programacion de microcontroladores
Programacion de microcontroladoresProgramacion de microcontroladores
Programacion de microcontroladoresayreonmx
 
Introduccion a los Sistemas Embebidos
Introduccion a los Sistemas EmbebidosIntroduccion a los Sistemas Embebidos
Introduccion a los Sistemas Embebidos
jkovima
 
Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)
Pablo Gindel
 
Técnicas para la localización de averías en los sistemas digitales
Técnicas para la localización de averías en los sistemas digitalesTécnicas para la localización de averías en los sistemas digitales
Técnicas para la localización de averías en los sistemas digitales
Jomicast
 
Microcontroladores ver2.0
Microcontroladores ver2.0Microcontroladores ver2.0
Microcontroladores ver2.0
ITS EL ORO
 
Fallas en circuitos
Fallas en circuitosFallas en circuitos
Fallas en circuitos
andrea oncehex
 
Proyectos electrónica digital
Proyectos electrónica digitalProyectos electrónica digital
Proyectos electrónica digital
Oscar Ardila Chaparro
 
Coleccion de-circuitos II
Coleccion de-circuitos IIColeccion de-circuitos II
Coleccion de-circuitos IIelelectronico
 
Cuaderno del-tecnico-reparador-de-equipos-electronicos
Cuaderno del-tecnico-reparador-de-equipos-electronicosCuaderno del-tecnico-reparador-de-equipos-electronicos
Cuaderno del-tecnico-reparador-de-equipos-electronicos
Jimmy Checa
 
500 proyectos de electronica
500 proyectos de electronica500 proyectos de electronica
500 proyectos de electronicafedericoblanco
 
2 manual de experimentos electronicos
2 manual de experimentos electronicos2 manual de experimentos electronicos
2 manual de experimentos electronicosSaya Maurys
 
Proyectos electronicos
Proyectos electronicosProyectos electronicos
Proyectos electronicosMiguel Barajas
 

Destacado (17)

Demo procesadores
Demo procesadoresDemo procesadores
Demo procesadores
 
Netduino
NetduinoNetduino
Netduino
 
Noticias sobre microcontroladores
Noticias sobre microcontroladoresNoticias sobre microcontroladores
Noticias sobre microcontroladores
 
Hoja datos AVR-Board
Hoja datos AVR-BoardHoja datos AVR-Board
Hoja datos AVR-Board
 
ATMEL-Presentación
ATMEL-Presentación ATMEL-Presentación
ATMEL-Presentación
 
Programacion de microcontroladores
Programacion de microcontroladoresProgramacion de microcontroladores
Programacion de microcontroladores
 
Introduccion a los Sistemas Embebidos
Introduccion a los Sistemas EmbebidosIntroduccion a los Sistemas Embebidos
Introduccion a los Sistemas Embebidos
 
Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)Microcontroladores 4 – comunicación (uart)
Microcontroladores 4 – comunicación (uart)
 
Técnicas para la localización de averías en los sistemas digitales
Técnicas para la localización de averías en los sistemas digitalesTécnicas para la localización de averías en los sistemas digitales
Técnicas para la localización de averías en los sistemas digitales
 
Microcontroladores ver2.0
Microcontroladores ver2.0Microcontroladores ver2.0
Microcontroladores ver2.0
 
Fallas en circuitos
Fallas en circuitosFallas en circuitos
Fallas en circuitos
 
Proyectos electrónica digital
Proyectos electrónica digitalProyectos electrónica digital
Proyectos electrónica digital
 
Coleccion de-circuitos II
Coleccion de-circuitos IIColeccion de-circuitos II
Coleccion de-circuitos II
 
Cuaderno del-tecnico-reparador-de-equipos-electronicos
Cuaderno del-tecnico-reparador-de-equipos-electronicosCuaderno del-tecnico-reparador-de-equipos-electronicos
Cuaderno del-tecnico-reparador-de-equipos-electronicos
 
500 proyectos de electronica
500 proyectos de electronica500 proyectos de electronica
500 proyectos de electronica
 
2 manual de experimentos electronicos
2 manual de experimentos electronicos2 manual de experimentos electronicos
2 manual de experimentos electronicos
 
Proyectos electronicos
Proyectos electronicosProyectos electronicos
Proyectos electronicos
 

Similar a Curso micros

Sistemas Microcontrolados-Unidad1-Tema1.pdf
Sistemas Microcontrolados-Unidad1-Tema1.pdfSistemas Microcontrolados-Unidad1-Tema1.pdf
Sistemas Microcontrolados-Unidad1-Tema1.pdf
MarianaAucancela
 
Qué es un microcontrolador
Qué es un microcontroladorQué es un microcontrolador
Qué es un microcontroladorDaysi Morante
 
Microcontrolador wiki
Microcontrolador wikiMicrocontrolador wiki
Microcontrolador wiki
clides2006
 
Microcontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMELMicrocontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMEL
SANTIAGO PABLO ALBERTO
 
arquitecturas Modernas
arquitecturas Modernasarquitecturas Modernas
arquitecturas Modernas
Christopher Pereira
 
Sesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladoresSesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladoresDidier Tec
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt
Carlos Martir
 
Procesador sistemas operativos
Procesador sistemas operativosProcesador sistemas operativos
Procesador sistemas operativos
saul_ramos
 
Arquitectura de Microprocesadores Modernos.
Arquitectura de Microprocesadores Modernos.Arquitectura de Microprocesadores Modernos.
Arquitectura de Microprocesadores Modernos.
Joshua Aleman
 
Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01
MARTO3000
 
Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01
MARTO3000
 
Introducción
IntroducciónIntroducción
Introducción
SistemadeEstudiosMed
 
Introducción
IntroducciónIntroducción
Introducción
SistemadeEstudiosMed
 
MICROCONTROLADORES.ppt
MICROCONTROLADORES.pptMICROCONTROLADORES.ppt
MICROCONTROLADORES.ppt
Mario Ruben Ontiveros Daza
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
lambda4444
 
Microprocesadores - A.ppt
Microprocesadores - A.pptMicroprocesadores - A.ppt
Microprocesadores - A.ppt
MiguelJuaniquina1
 
Apunte de microprocesadores pic
Apunte de microprocesadores picApunte de microprocesadores pic
Apunte de microprocesadores pic
carlos960
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
manuel
 
DEFINICIONES E IDENTIFICACIONES
DEFINICIONES E IDENTIFICACIONESDEFINICIONES E IDENTIFICACIONES
DEFINICIONES E IDENTIFICACIONES
N1Colaz
 

Similar a Curso micros (20)

Sistemas Microcontrolados-Unidad1-Tema1.pdf
Sistemas Microcontrolados-Unidad1-Tema1.pdfSistemas Microcontrolados-Unidad1-Tema1.pdf
Sistemas Microcontrolados-Unidad1-Tema1.pdf
 
Qué es un microcontrolador
Qué es un microcontroladorQué es un microcontrolador
Qué es un microcontrolador
 
Microcontrolador wiki
Microcontrolador wikiMicrocontrolador wiki
Microcontrolador wiki
 
Microcontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMELMicrocontroladores: Entendiendo los AVR de ATMEL
Microcontroladores: Entendiendo los AVR de ATMEL
 
arquitecturas Modernas
arquitecturas Modernasarquitecturas Modernas
arquitecturas Modernas
 
Sesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladoresSesión 3 introduccion a microcontroladores
Sesión 3 introduccion a microcontroladores
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt
 
Procesador sistemas operativos
Procesador sistemas operativosProcesador sistemas operativos
Procesador sistemas operativos
 
Arquitectura de Microprocesadores Modernos.
Arquitectura de Microprocesadores Modernos.Arquitectura de Microprocesadores Modernos.
Arquitectura de Microprocesadores Modernos.
 
Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01
 
Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01Microcontroladores 101108114327-phpapp01
Microcontroladores 101108114327-phpapp01
 
Introducción
IntroducciónIntroducción
Introducción
 
Introducción
IntroducciónIntroducción
Introducción
 
MICROCONTROLADORES.ppt
MICROCONTROLADORES.pptMICROCONTROLADORES.ppt
MICROCONTROLADORES.ppt
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Microprocesadores - A.ppt
Microprocesadores - A.pptMicroprocesadores - A.ppt
Microprocesadores - A.ppt
 
Autor
AutorAutor
Autor
 
Apunte de microprocesadores pic
Apunte de microprocesadores picApunte de microprocesadores pic
Apunte de microprocesadores pic
 
Microprocesadores
MicroprocesadoresMicroprocesadores
Microprocesadores
 
DEFINICIONES E IDENTIFICACIONES
DEFINICIONES E IDENTIFICACIONESDEFINICIONES E IDENTIFICACIONES
DEFINICIONES E IDENTIFICACIONES
 

Último

Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGATAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
arriagaanggie50
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
JuanAlvarez413513
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
aljitagallego
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
espinozaernesto427
 

Último (20)

Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGATAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
TAREA #6 - RECURSOS INCLUSIVOS POR ANGGIE ARRIAGA
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
absorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratoriosabsorcion de gases y practicas de laboratorios
absorcion de gases y practicas de laboratorios
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
 

Curso micros

  • 1. Qué son los microcontroladores y para qué sirven Respondiendo a la primera parte, un microcontrolador (µC o MCU para abreviar) es un circuito integrado programable capaz de llevar a cabo una determinada tarea. El tipo de tarea vendría a ser la segunda parte. Si alguien nos preguntara qué es lo que hace una computadora personal, le responderíamos de todo, según el programa que le instalemos. De igual modo, un microcontrolador, como un “micro computador" que es, puede hacer casi de todo (dentro de sus posibilidades, claro está), según el programa grabado en su memoria. La analogía de un microcontrolador con una computadora va más allá de su programación. Los microcontroladores son circuitos integrados que encierran en un solo chip un CPU (unidad central de procesamiento), las memorias ram y rom, los diversos periféricos especiales y los puertos de entrada/salida. Diagrama de bloques de un microcontrolador Si echamos un vistazo a nuestro alrededor, podremos notar que estamos cada vez más rodeados de los microcontroladores: los periféricos de nuestras computadoras, como las impresoras, teclados, ratones, monitores y demás, tienen incorporados uno o más microcontroladores. Los electrodomésticos, cada vez más modernos, como equipos de sonido, televisores LCD, reproductores de DVD, etc., sin duda tienen microcontroladores que guían sus funciones. Los aparatos de entretenimiento como los reproductores de MP3 y MP4 portátiles también tienen microcontroladores en su parte cerebral. Los teléfonos celulares, las cámaras digitales, etc., etc. De hecho, los microcontroladores se han infiltrado en todos los campos de la vida moderna, desde los pasatiempos hasta la
  • 2. industria robótica, de telecomunicaciones, automovilística... En fin, ¿todavía quieres saber para qué sirven? Características de los AVR Los productos estrella de Atmel son sus microcontroladores AVR. Comparado con otros microcontroladores, en distintos modelos por supuesto, pueden tener memoria de programa flash reprogramable, capacidad ISP (In System Programming), puertos configurables como E/S pin a pin, interfaces de comunicación serial RS232 e I2C, módulos generadores de onda PWM, etc. Yo pienso que una de las razones por las que la gente novel no empieza por los AVR es su set de 130 instrucciones; una cantidad que los haría desistir. Este hándicap inicial se invierte cuando se utiliza un compilador de alto nivel, ya que los AVR fueron diseñados para un óptimo trabajo con el lenguaje C. Por si fuera poco, la gente del software libre ha desarrollado el poderoso compilador AVR GCC, el cual está disponible en sus versiones para Windows y Linux. Así que, si de herramientas para desarrollar proyectos se trata, los AVR toman la delantera y se convierten en serios competidores de los actuales monarcas de Microchip. Las características de cada AVR son descritas con todo detalle en el capítulo Arquitectura interna de los AVR. Microcontroladores con Arquitectura Harvard Como todos los microcontroladores modernos, los AVR fueron diseñados con arquitectura Harvard. Con esta estructura los microcontroladores AVR disponen de dos memorias, una que contiene el programa y otra para almacenar los datos. De este modo el CPU puede tener acceso simultáneo a ambas memorias utilizando buses diferentes. Más específicamente, el CPU puede leer la siguiente instrucción de programa mientras está procesando los datos de la instrucción actual. Arquitectura Harvard de un microcontrolador Antiguamente los microcontroladores tenían una arquitectura Von Neumann. Como se ve en el diagrama de abajo, estos microcontroladores usaban una memoria única que constituía tanto el segmento de memoria de programa como el de datos. Con un solo bus
  • 3. de comunicación entre dicha memoria y el procesador no es posible realizar diversos accesos a la vez. Arquitectura Von Neumann de un microcontrolador Microcontroladores con Instrucciones RISC RISC es sigla de Reduced Instruction Set Computer. También es una característica propia de los microcontroladores actuales como los AVR. Estos microcontroladores cuentan con instrucciones sencillas y en un número mínimo. En muchos casos ello permite que la programación en ensamblador sea una labor cómoda y esté al alcance de todos. Sin embargo, cuando se desarrollan proyectos mucho más complejos, el uso del lenguaje ensamblador se torna cada vez más engorroso. Entonces se prefiere optar por los compiladores de alto nivel, para los cuales un set CISC no es obstáculo. CISC significa Complex Instruction Set Computer y era un distintivo de los primeros microcontroladores que aparecieron en el mundo, los cuales estaban inspirados en los procesadores de los grandes computadores de la época. Es complejo porque consta de muchas instrucciones, complicadas y difíciles de recordar a la hora de programar en lenguaje ensamblador. Además, al crecer el número de instrucciones también crecerán los códigos de las instrucciones, lo cual deriva en una mella en la eficiencia del microcontrolador. Características de los AVR Algunas de las características y recursos generales y comunes a casi todos los AVR son: Están fabricados con tecnología CMOS. Aunque los dispositivos CMOS son más lentos que los TTL, son ideales para los microcontroladores porque requieren de menor consumo de energía. Es posible implementar sistemas que solo se alimenten de baterías corrientes. La tecnología CMOS, como sabemos, también significa que los transistores, al ser mucho menos, ocupan mucho menor espacio en el chip. Memorias de programa (FLASH o ROM), memoria de datos estática (SRAM) y memoria EEPROM internas. Puertos de E/S bidireccionales configurables independientemente pin por pin. Suministro de alta corriente en los puertos de E/S.
  • 4. Timer‟s. Temporizadores de alta precisión o contadores de pulsos externos. También funcionan como generadores de ondas PWM (Pulse Width Modulation), particularmente útiles para controlar la velocidad de los motores DC. WatchDog. Monitoriza que el AVR funcione adecuadamente a lo que se esperaba y no se cuelgue. ISP (In System Programming). Permite realizar la programación del AVR utilizando una interface serial con muy pocos pines. Fuses y Lock bits, permiten establecer un determinado modo de funcionamiento del AVR, como el tipo de oscilador que utilizará o si el código grabado podrá o no ser leído después de la programación. Otros recursos, más avanzados, son específicos a cada familia de AVR y pueden ser: Conversores Analógico-Digital, ADC. Para recibir señales del mundo analógico. Módulos SPI. Para la comunicación con dispositivos que utilizan el bus SPI. Módulos TWI. Para la comunicación con dispositivos que utilizan el bus I2C. USART, Transmisor Receptor Síncrono Asíncrono Universal. Para comunicarse mediante los protocolos RS232 con cualquier dispositivo que también lo soporte. Por ejemplo, podemos conectar nuestro AVR al puerto serie del PC o a cualquier otro microcontrolador con USART. Módulo Comparador Analógico. Nos puede ahorrar un OP-AMP y algo más. Módulo CAN. Para facilitarle al AVR su conexión con otros microcontroladores en una pequeña red LAN con un protocolo robusto para trabajar en condiciones extremas. Módulo USB. Casi todos los dispositivos digitales modernos presentan interface USB. Con esto podemos diseñar sistemas que no tengan nada que envidiarles. Etc., etc. Clasificación de los AVR. ¿Con qué AVR empezar? Cuando la gente va a trabajar con una nueva familia de microcontroladores como los AVR revisa primero su clasificación para saber con cuál puede empezar. Normalmente esta gente ha tenido alguna experiencia previa con otros microcontroladores como los PIC y suele pensar que para programar los AVR primero hay que empezar por lo más básico así como el PIC16F84 en el mundo de los PICs. y seguir avanzando con el PIC16F877 y luego con el PIC18F4550 y así... Bueno, no los puedo culpar, pues yo mismo pensaba así :) Aquí descubriremos por qué esa idea es errónea. Pero volviendo al tema, en el mundo de los AVR hay 4 familias de ellos: los tinyAVR, los megaAVR, losXMEGA y los AVR32. A la vez, puede haber varias decenas de AVR dentro de cada familia, pero las diferencias entre ellos son cada vez menores, como tener algunos pines de E/S más o menos, tener
  • 5. algo de memoria más o menos, tener un Timer más o menos, emplear otro tipo de memoria, y demás detalles de ese tipo. Clasificación de los AVR (fuente: atmel.com). Los tinyAVR Son los "tiny toons" de los AVR, son los microcontroladores de Atmel con menos recursos de memoria y periféricos posibles. Sin embargo, son muy veloces, alcanzando a operar a 20 MIPS (millones de instrucciones por segundo). Así que tampoco los deberíamos subestimar y no se te vaya ocurrir equipararlos con un PIC16F84 o similar. Es tranquilamente factible usar un tinyAVR para conectarse al puerto USB de una computadora con todo el firmware implementado a nivel software. Por ejemplo,Limor Fried uso un ATtiny2313 para su programador USBtinyISP. ¿Crees que un PIC16F84A podría hacer eso? Muy difícil, ¿verdad? Yo no conozco aplicaciones similares ni siquiera con un PIC16F877A (Debe ser mi ignorancia). Inicialmente todos eran muy pequeños en tamaño, por lo general de 8 pines, pero últimamente están apareciendo modelos que llegan a los 20 pines. Lo que varía muy poco es su set de cerca de 130 instrucciones, que es el mismo set base de los megaAVR y XMEGA. Es decir, que sean los más limitados no significa que sean los más fáciles de programar. Los megaAVR. Popular e inapropiadamente conocidos como ATmegas, son los microcontroladores de 8 bits más sobresalientes de Atmel. Detesto hacer estas comparaciones pero creo que son un buen referente para conocer de forma rápida los AVR. Pero bueno, yo diría que en general los megaAVR son como losPIC18 de Microchip. Claro que habrá diferencias a favor y en contra: los PIC18 tienen mayor variedad de ejemplares (personalmente me confunde más) y los megaAVR trabajan un poco más veloz, y etc., etc... No voy a abrir un debate aquí. Todos los megaAVR tienen más de 130 instrucciones, la mayoría de 16 bits, y pueden llegar a velocidades de 20 MIPS. Sus memorias flash pueden alcanzar 256 kB para almacenas
  • 6. hasta 128k instrucciones y sus memorias RAM pueden alojar hasta 4 kB de datos temporales. En general, en ellos se pueden encontrar casi todos los recursos hardware buscados en un microcontrolador de 8 bits, por eso se suele tomar de aquí algunos modelos como punto de partida de aprendizaje. Ahora bien, dentro de la familia de los megaAVR todavía debemos distinguir dos grupos: Los clásicos megaAVR, que ahora Atmel denomina los viejos AVR, como los ejemplares cuyos nombres empiezan con AT90S (AT90S8535, AT90S2313, etc.) e incluso los no tan antiguos ATmega8, ATmega16, ATmega32, ... y demás. Los nuevos megaAVR. Bueno, eso de "nuevos" lo puse yo, por si acaso, solo para darles cierta distinción. No es que estos AVR hagan la gran revolución por el hecho de que puedan trabajar hasta a 20 MIPS en lugar de los 16 MIPS de sus antecesores o porque sus Timers puedan generar 2 canales de ondas PWM cada uno. En cursomicros.com trabajamos con los nuevos megaAVR, en especial con los de la serie ATmegaXX8 yATmegaXX4, que son los megaAVR más potentes que se pueden conseguir en empaques DIP de 28 y 40 pines respectivamente. Los otros megaAVR son más grandes en cuanto a numero de pines y por tanto solo vienen en empaques TQFP, QFN, etc. Sus periféricos son básicamente los mismos, solo suelen diferenciarse por tener más puertos de E/S. No digo que lo viejos AVR no sirvan para nada. Si bien es cierto que pueden tener pequeños bugs (como cualquier microcontrolador de cualquier otra marca), los miles de proyectos disponibles enAVRfreaks.net e incluso los primeros Robots de Dale Heatherington demuestran que se pueden hacer maravillas con ellos. Yo solo digo que si podemos elegir entre un buen producto y otro un poco mejor, ¿por qué no tomar el mejor? Los XMEGA Son microcontroladores de 8 bits pero con injertos de un típico microcontrolador de 16 bits que elevan su performance hasta equipararse con los verdaderos microcontroladores de 16 bits como algunos dsPIC de Microchip. Solo que a diferencia de ellos, ningún Xmega viene en empaque DIP, lo cual dificulta su empleo para fines de experimentación de un principiante. Los AVR XMEGA alcanzan velocidades de hasta 33 MHz pero solo operan a tensiones de hasta 3.3V. Su memoria de programa flash llega a 384 kB. Debido a su renovada arquitectura presentan muchas instrucciones nuevas pero su set básico sigue siendo compatible con las 130 instrucciones de losmegaAVR y tinyAVR. Los AVR32 Son los microcontroladores AVR de 32 bits. Aquí hay dos grupos: los de la serie UC3 y los de la serieAP7. Son AVRs que para los noveles diseñadores deberían ser descartados como punto de partida. Otros Microcontroladores
  • 7. Hay muchas marcas de microcontroladores en el mercado. De ellas solo mencionaré las que creo más populares. A veces un mismo tipo de microcontrolador lo suelen proveer diversos fabricantes, por lo que ésta no es una clasificación estrictamente metódica En esta presentación las descripciones se hacen teniendo en cuenta solo a los microcontroladores de 8 bits. En este sentido, salvo el caso peculiar de los Basic Stamp, personalmente no encuentro diferencias notables en el hardware interno de cada microcontrolador que me hagan optar por uno u otro para un proyecto en específico. No puedo decir lo mismo sobre la disponibilidad de herramientas de desarrollo software y hardware. Los Microcontroladores PICmicro o PIC de Microchip Sin lugar a dudas, son los microcontroladores que han fascinado al mundo en los últimos años. Su facilidad de uso, comodidad y rapidez en el desarrollo de aplicaciones, abundante información y libre disposición de herramientas software proporcionada por Microchip le han permitido ganar terreno rápidamente en el mercado de los microcontroladores a nivel mundial, hasta convertirse en los microcontroladores más vendidos en la actualidad. Los buenos resultados que le dieron a Microchip la estrategia de proveer libremente a los usuarios de muchas herramientas software para el desarrollo de proyectos con sus productos hicieron que los otros fabricantes de microcontroladores también la adoptaran, aunque parece que la ventaja de Microchip en el mercado está ya marcada y tal vez se acentúe más en el futuro. Por qué empezar con los PICS Por su fácil adquisición. Se pueden conseguir en casi cualquier tienda de electrónica. Por su pequeño set de instrucciones, que no logra ser igualado por ningún otro microcontrolador. Es casi mágica la forma cómo se pueden implementar fácilmente casi cualquier algoritmo de programa con solo sus 35 instrucciones básicas. Por su bajo costo. Los PICs son tal vez los microcontroladores más baratos con las características que poseen. Por su fácil aprendizaje. Los PICs cuentan con el menor conjunto de instrucciones, y no por ello menos eficientes, que los convierten de lejos en los de mejor aprendizaje. Por la disponibilidad de herramientas. Las herramientas de hardware y software son de amplio alcance. Eso nos permitirá empezar muy pronto con la experimentación sin la preocupación por mayores recursos. Los Microcontroladores de Freescale Hasta no hace muchos años Motorola era uno de los fabricantes de microcontroladores con mayores ventas en el mundo. En esos tiempos el trabajo con microcontroladores era una actividad casi exclusiva de los considerados gurúes de la microelectrónica y que contaban con suficientes medios para acceder a las herramientas necesarias. Lo cierto es que con el tiempo Motorola empezó a perder su liderazgo y ha preferido ceder la franquicia a Freescale.
  • 8. Freescale continúa con la producción de microcontroladores basados en la arquitectura los viejos productos de Motorola y dotándoles de todo el arsenal tecnológico de la actualidad. Salvo el prestigio legado no tienen nada nuevo en su hardware que no se pueda hallar en otros microcontroladores. Los Microcontroladores 8051 de Intel Intel era otro de los gigantes de los microcontroladores y µPs. Sus productos más conocidos eran los famosos 8051, 80151 y 80251, pero actualmente ya no tiene interés en fabricarlos. En su lugar, fueron otras compañías, como Atmel, Philips, Infineon, Dallas, entre otros, las que tomaron la posta y fabrican algunas partes compatibles. Cabe mencionar que, salvo raras excepciones (como los PICs), el resto de los microcontroladores fueron inspirados en la arquitectura de estos procesadores de Intel. Por lo demás, no tiene caso especificar sus características porque no hay diferencias grandes respecto de los otros productos. En este sentido, no se puede afirmar qué marca de microcontrolador es mejor o peor. Es decir, si tomamos un microcontrolador cualquiera, siempre podremos encontrar un modelo de otro fabricante que pueda sustituirlo en una determinada aplicación. Los Módulos Basic Stamp de Parallax Los Basic Stamp nos son una nueva familia de microcontroladores; son módulos montados sobre otros microcontroladores. Cuentan con un microcontrolador, un circuito oscilador, el circuito de interface con el puerto serie de la computadora, una memoria externa para almacenar el programa y un regulador de tensión; todo en una pequeña tarjeta directa y/o fácilmente conectable a las computadoras. Una vez cargado el programa, el módulo está listo para ser insertado en el circuito de aplicación, incluso si está armado en un simple breadboard. Los programas se desarrollan íntegramente en un lenguaje Basic adaptado. El programa se carga en la EEPROM serial y el microcontrolador del Basic Stamp tiene que interpretarlo. Constitución de un módulo Basic stamp
  • 9. Constitución de un módulo Basic Stamp Por ejemplo, el BS2sx mostrado arriba cuenta con un microcontrolador que está pre programado específicamente para trabajar como intérprete, esto es, para leer las sentencias de comando de la EEPROM serial, decodificarlas y ejecutar las instrucciones que representan. El microcontrolador no se puede reprogramar, viene así de fábrica. Aunque el intérprete opera a toda su potencia, la mayor parte del tiempo la "desperdicia" leyendo la EEPROM serial y decodificando sus comandos. Por tanto, el campo de aplicación de los Basic Stamp es más bien de carácter didáctico y de entrenamiento; no son para grandes proyectos. Actualmente solo hay tres familias de Basic Stamp, cada una con muy pocas variantes, referidas básicamente a la velocidad de operación, capacidad de memoria y cantidad de pines de I/O. En realidad, el tercer grupo está formado por los Javelin Stamp, que interpretan código Java en vez de Basic. Si después de todo aún tuvieras interés por estos módulos, los circuitos de hardware y las herramientas software están a libre disposición en la web de la firma http://www.parallax.com/. Programadores de microcontroladores AVR Conseguir las herramientas software siempre es la tarea más fácil comparada con la parte hardware. Podemos incluso trabajar con las versiones demo de los programas y ver por nosotros mismos cuál nos resultará más conveniente. Pero con el hardware no podemos darnos el lujo de ir probando los que queramos. Así que debemos informarnos bien antes de gastar dinero en una compra inadecuada y/o de perder tiempo construyendo un programador que más tarde nos pueda decepcionar. Pero como en ninguna otra marca de microcontrolador que haya conocido, los programadores de AVR son tan diversos que mucha gente novata se estanca buscando un
  • 10. buen programador por no saber exactamente lo que quiere, gente que mientras más busca en Internet, más opciones y términos nuevos encuentra que al finalmente queda más confundida. Así que si eres nuevo en esto, no pienses que la lectura de este extenso capítulo puede frenar tu progreso. Todo lo contrario, despacio se llega lejos. Esquema de la programación de un AVR. Para evaluar a priori la utilidad y calidad de un producto tenemos que comparar sus características. En el caso de un programador de AVR nosotros vamos a considerar su interface con la PC, su interface con el microcontrolador y el software de computadora con el que lo utilizaremos. La siguiente tabla nos muestra los programadores más reconocidos. Por supuesto que existen muchos otros, pero como veremos luego, la mayoría de ellos son variaciones o derivados de estos. Tabla Programadores de AVR Programador Interface con Interface con el AVR la PC Software Boot Loader USB, COM USART, USB,… AVRDUDE, AVROSP, FLIP,... USBasp USB SPI y TPI AVRDUDE USBtinyISP USB SPI AVRDUDE, Studio 6 AVR Doper USB SPI y HVSP AVRDUDE, Studio 6 HVProg COM SPI, HVSP y HVPP AVRDUDE, Studio 6
  • 11. Tabla Programadores de AVR Programador Interface con Interface con el AVR la PC Software AVRminiProg USB SPI, JTAG, HVSP y HVPP AVRDUDE, Studio 6 ArduinoISP USB SPI AVRDUDE FTDI USB SPI AVRDUDE SI-Prog COM SPI AVRDUDE DASA COM SPI AVRDUDE BSD LPT SPI AVRDUDE AVR910 COM SPI AVRDUDE, AVROSP AVRISP COM SPI AVRDUDE, Studio 6 STK500 COM SPI, HVSP, y HVPP AVRDUDE, Studio 6 AVRISP MkII USB SPI, PDI y TPI AVRDUDE, Studio 6 STK600 USB SPI, PDI, TPI, TPI-HV, JTAG, aWire, HVSP y HVPP AVRDUDE, Studio 6 AVR Dragon USB SPI, PDI, JTAG, aWire, HVSP y HVPP AVRDUDE, Studio 6 JTAGICE MkII USB SPI, PDI, JTAG y aWire AVRDUDE, Studio 6 AVR ONE! USB SPI, PDI, JTAG y aWire AVRDUDE, Studio 6 Si te preguntas por qué en nuestra tabla de comparación no hemos considerado la cantidad o el tipo de microcontroladores que cada programador soporta, es porque está indicado de forma implícita. Es decir, eso depende de la interface de programación del AVR. Por ejemplo, si vamos a trabajar con un AVR XMEGA, debemos saber que ellos tienen interface de programación PDI y por tanto en ese caso necesitaremos un programador como el AVRISP MkII. Simple, ¿verdad? En principio sí, pero los AVR pueden tener más de una interface de programación, unas con más alcance que otras. Enseguida las explicamos.
  • 12. Programación Serial y Paralela La interface entre el programador y el microcontrolador puede ser Serial y Paralela. En la tabla de arriba la Interface paralela figura como HVPP. Todas las otras interfaces desde SPI hasta aWire son seriales. Las líneas de las interfaces seriales varían según el protocolo. En cambio la interface paralela es única y consta de 16 líneas sin contar los pines de alimentación del AVR. Se deduce fácilmente que este modo solo está disponible en los AVR de bastantes pines, más de 14 pines, si queremos establecer una regla. Programación de Alto Voltaje HVPP y HVSP Antes hablamos de la dicotomía serie-paralela. Ahora describiremos los modos de programación en alto y bajo voltaje así como de la relación entre todos ellos. El alto voltaje es un modo de programación adicional que solo está disponible en los AVR de las familias tinyAVR y megaAVR. Es un modo cuya interface de programación involucra el pin de RESET, pues allí donde se aplica el voltaje de 12V. Es el único pin diseñado para soportar ese nivel de tensión. La programación de alto voltaje ofrece algunas opciones que no se pueden encontrar en la programación de bajo voltaje como programar los fuses SPIEN (para activar o desactivar la programación serial) y RSTDISBL (para rehabilitar el pin RESET). En la programación de bajo voltaje el AVR trabaja con su alimentación habitual de 5V mientras que el pin de RESET permanece en 0V. Este modo tiene algunas limitaciones como impedirnos el acceso al fuse SPIEN, para bien o para mal. Advertencia: en los algunos AVR (los ATmegaXX8 de nuestro curso) el pin de RESET puede ser programado por el fuse RSTDISBL para que trabaje como un pin de puerto más, o sea, para que lo usemos para sacar o leer datos por él, aunque el precio a pagar puede ser muy alto. A eso se llamadeshabilitar el pin RESET. Podemos hacerlo desde la programación de alto o bajo voltaje, pero para volver a habilitarlo el único camino será la programación de alto voltaje. Me pregunto si puedes descubrir el porqué. La programación serial puede ser de alto o bajo voltaje. En cambio, la programación paralela (PP) es siempre de alto voltaje. Por eso es casi redundante su denominación de HVPP (High Voltage Parallel Programming). La sigla HVPP aparece en el manual de Atmel Studio 6 solo una vez. Antes me desagradaba pero ahora me empieza a gustar. Las líneas de la interface paralela son 16 sin contar los pines de alimentación del AVR. De aquí concluimos que este modo solo está disponible en los AVR de bastantes pines, más de 14 pines, si queremos establecer una regla.
  • 13. Líneas de interface de la programación paralela, HVPP. La programación serial de alto voltaje está presente en los tinyAVR que cuentan con 14 pines o menos. Si uno de estos AVR tiene interface de programación SPI entones su programación serial de alto voltaje se denomina HVSP (High Voltage Serial Programming). Igualmente parece poco apropiado limitar el calificativo porque los tinyAVR cuya interface de programación es TPI también soportan el alto voltaje. Debe ser porque son muy poquitos :-(. Lo anterior no significa que la programación HVSP vaya por el puerto SPI. Los pines de interface en este caso son otros, tal como se ve en la siguiente imagen. Líneas de interface de la programación serial de alto voltaje, HVSP. Serial, paralelo, alto, bajo, más o menos de 14 pines. Sé que todo esto suena algo enredado sobre todo si los modos e interfaces también se cruzan, pero se puede resumir y entender fácilmente así: “En principio todo AVR debe tener al menos una programación serial de bajo voltaje. Adicionalmente puede tener una programación de alto voltaje, que debe ser paralela si el AVR tiene más de 14 pines o serial si el AVR tiene 14 pines o menos”. El pin RESET es determinante en el modo de operación del AVR. Si aplicamos 12 V (vale entre 11.5V y 12.5V) al pin RESET, el AVR entra en modo de programación de alto voltaje (serial o paralela, según el AVR).
  • 14. Si aplicamos 5 V al pin RESET, el AVR trabaja en operación normal, o sea, empieza a ejecutar su programa. Si mantenemos el pin RESET en 0V, el AVR permanece en estado de RESET, es decir, no hace nada y se queda esperando a que el pin RESET valga 5V para iniciar su operación normal o esperando a que lleguen las instrucciones para entrar en modo de programación de bajo voltaje. Si ponemos el pin RESET en 0 V y luego iniciamos la secuencia de programación, uno de cuyos paso incluye aplicar algunos pulsos al mismo pin RESET, entonces el AVR entra en modo de programación de bajo voltaje (serial, obviamente). Aquí hay una lección importante que debemos aprender. Algunos AVR tienen la capacidad de multiplexar la función del pin de RESET mediante el fuse RSTDISBL. Si dejamos este fuse con su valor de fábrica (sin programar), el pin RESET servirá para resetear el AVR, o sea, con su función habitual. Pero si lo programamos, el pin RESET trabajará como un pin de puerto convencional. Es útil si queremos ampliar nuestras líneas de E/S, pero observa que ello impedirá que el AVR pueda volver a entrar en modo de programación de bajo voltaje. La única señal que le hará recordar al pin RESET su función primigenia es la tensión de 12 V, es decir, necesitaremos de un programador de alto voltaje. Interfaces de programación Aquí estudiaremos las interfaces SPI, TPI, PDI, JTAG y aWire, que podemos juntarlas a las de alto voltaje HVSP y HVPP examinadas previamente. A todas se les suele también denominar modos de programación. Interface de programación SPI Al ser esta la principal interface de programación de los AVR tinyAVR y megaAVR, vamos a explicarlo largo y tendido, así que hecha esa salvedad espero que no te me desanimes. Bueno, empezaremos por distinguir entre los términos ISP y SPI. ISP es la sigla de In System Programming y hace referencia al tipo de programación realizada estando el AVR en su circuito de aplicación, es decir, no es necesario quitarlo de allí y colocarlo en el hardware del programador. Alguna gente le suele llamar también ICSP, por In Circuit Serial Programming, que viene a significar lo mismo, pero se usa más con otros microcontroladores como los PICs. Además ese término es marca registrada de Microchip. SPI es la sigla de Serial Port Interface, que es un bus de comunicación serial, así como lo son los buses RS232, I2C o USB. Los microcontroladores suelen tener un módulo hardware también llamado SPI que facilita las comunicaciones con otros dispositivos usando este protocolo. En los AVR ese mismo módulo SPI sirve también como su interface de programación. Técnicamente hablando todas las interfaces de programación permiten programar el AVR estando en su circuito de aplicación (In System), así que todos los programadores podrían merecer el calificativo de ISP. Debemos tener eso en cuenta porque hasta en la documentación de Atmel es frecuente hablar de programación ISP como sinónimo de la interface SPI.
  • 15. Las comunicaciones por el puerto SPI se llevan a cabo en una relación maestro-esclavo. En este caso el maestro es el programador y el esclavo es el dispositivo programado (AVR). Las transferencias de datos requieren de 4 líneas de interface: MISO, MOSI, SCK y SS. Para la programación del AVR sin embargo se omite la línea SS. En su lugar se usa el pin de RESET y en algunos casos hasta una señal de reloj para AVR puede ser necesaria. En este momento no vamos a profundizar más sobre el control del bus SPI, pero sí vamos a explicar la función de sus pines para que al menos sepamos cómo conectarlos cualquiera que sea el AVR o el programador que usemos. Líneas de interface de la programación SPI. MISO. Master Input Slave Output. Es la línea por donde el maestro recibe datos del esclavo, es decir, en el maestro el pin MISO es entrada y en el esclavo es salida. MOSI. Master Output Slave Input. Es la línea por donde al maestro envía datos al esclavo, es decir, en el maestro el pin MOSI es salida y en el esclavo es entrada. SCK. Serial Clock. Es la señal de reloj. En la comunicación SPI el reloj está siempre a cargo del maestro así que el pin SCK es salida en el maestro y entrada en el esclavo. Con esta señal se establece la velocidad de transferencia de datos. Según el diseño del puerto SPI de los AVR, esta velocidad debe ser como mucho igual a la cuarta parte de la frecuencia del procesador. Por ejemplo, si un AVR trabaja con un XTAL de 8MHz, la frecuencia de SCK no debe superar los 2MHz. RESET. Esta señal no forma parte del bus SPI pero siempre debe haber una línea con el mismo nombre que sale del programador y va al pin RESET del AVR a programar para iniciar el modo de programación. Encuentras más información sobre la función de este pin en la secciónProgramación de alto voltaje HVSP y HVPP. XTAL1. Esta señal es necesaria solo si el AVR está configurado para trabajar con reloj externo. De fábrica no lo está. En un AVR nuevo los fuses de reloj seleccionan el oscilador RC interno, así que la primera programación no necesita esta señal. Pero desde el principio lo común es reprogramar los fuses de reloj para seleccionar una fuente de reloj externa, como un XTAL o resonador cerámico. Solo en esos casos debemos usar la señal XTAL1. SS significa Slave Select. En principio esta señal sirve para que el maestro seleccione el esclavo con el que entablará la comunicación, pues en una red SPI puede haber varios esclavos. Sin embargo, no participa en la programación porque el AVR target da por hecho que es el esclavo elegido desde el momento en que entra en modo de programación.
  • 16. VCC y GND. Naturalmente son los pines de alimentación del AVR. La señal VCC suele a veces aparecer con el nombre de VTG, por Voltage of Target. Hay dos tipos de conectores para la interface de programación SPI. El grande es de 10 pines llamadoISP10PIN. Es un conector antiguo que todavía se encuentra en la placa STK500 e incluso en la STK600pero solo por compatibilidad. Aunque parece mejor para el diseño de PCB, Atmel nos recomienda dejarlo de lado y que procuremos usar el conector de 6 pines ISP6PIN, que debiera estar presente en todo hardware para AVR moderno. Conectores ISP6PIN e ISP10PIN de la interface de programación SPI. Conectores ISP6PIN e ISP10PIN de la interface de programación SPI. Interface de programación TPI TPI quiere decir Tiny Programming Interface es decir es una interface de programación de los "tiny" AVR. Con eso podríamos pensar que está presente todos los tinyAVR, pero no. La mayoría de lostinyAVR utilizan las dos interfaces de programación SPI y HVSP. La interface TPI solo está disponible en los ATtiny4, ATtiny5, ATtiny9, ATtiny10, ATtiny20, ATtiny28 y ATtiny40. Por otro lado, la documentación de Atmel y algunos autores dicen que esta interface queda destinada a los tinyAVR de 6 pines pero los ATtiny20, ATtiny28 y ATtiny40 echan por tierra esa teoría. Ellos tienen como 20 pines y sin embargo también se programan vía TPI. Como sea, la interface TPI utiliza dos líneas de comunicación llamadas TPIDATA y TPICLK, para datos y reloj, evidentemente. Para la programación también es necesaria la intervención del pin de RESET y según el nivel de tensión que se le aplique el tinyAVR puede entrar en dos modos de programación: Si se aplica 12V al pin RESET, el tinyAVR entra en modo de programación de alto voltaje. No tiene una sigla o abreviatura propia, así que en la primera tabla presentada le llamé simplemente TPI-HV. En este modo podemos habilitar y deshabilitar el pin de RESET para que trabaje como el pin GPIO PB3. Si el programador no puede entregar 12V, debe mantener el pin de RESET en 0V para iniciar el modo de programación convencional (de bajo voltaje). También en este caso tendremos acceso al fuseRSTDISBL para configurar el pin RESET como pin PB3, pero ya no
  • 17. podremos devolverle su función de pin de RESET a menos recurramos a la programación de alto voltaje. Líneas de interface de la programación TPI. El conector que usa la interface TPI es el mismo conector ISP6PIN visto arriba, solo que con diferentes nombres de señal. Conector de la interface de programación TPI. Interface de programación PDI Como su nombre indica PDI (Program and Debug Interface) es la interface de dos líneas diseñada por Atmel con fines de programación y depuración exclusivamente para sus AVR de la familia XMEGA. Adicionalmente los XMEGA tienen la interface JTAG, también con propósitos de programación y depuración. Eso es todo; ellos no tienen interface aWire ni mucho menos SPI ni TPI. Los XMEGA también poseen fuses y lock bits para establecer diferentes formas de operación y niveles de seguridad, incluso tienen la capacidad de poder configurar su pin de RESET mediante el fuseRSTDISBL, pero ellos lo hacen todo mediante su interface PDI y no necesitan programación de alto voltaje. Las transferencias de datos en una comunicación PDI se rigen por un protocolo muy similar al delUSART trabajando en modo síncrono. La señal de datos, llamada DATA o PDI_DATA, es bidireccional y utiliza un pin dedicado del XMEGA; en tanto que la señal de reloj, CLOCK o PDI_CLK, es siempre controlada por el programador y está multiplexado con el pin RESET.
  • 18. Líneas de la interface de programación y depuración PDI. El conector que usa la interface PDI también es el mismo conector ISP6PIN, pero con diferentes nombres de señal. Por eso el programador AVRISP MkII utiliza el mismo conector para las interfaces SPI, PDI y TPI. Interface de programación JTAG JTAG también es una interface de programación y depuración presente en los AVR32, XMEGA y en losmegaAVR de 40 pines o más. A diferencia de las interfaces PDI y aWire, su principal modo de operación siempre ha sido la depuración, quedando su función de programador como recurso auxiliar. El conjunto de los pines de la interface JTAG se conoce como TAP, por Test Access Port. De ellos los 4 pines que participan en la programación del AVR son: TMS. Test Mode Select. Indica el estado el controlador Test. TCK. Test Clock. Es la señal de reloj. TDI. Test Data Input. Es la línea de entrada para las instrucciones de datos o de comando. TDO. Test Data Output. La línea por donde el AVR envía los datos seriales. Líneas de la interface de programación y depuración JTAG. El conector de la interface JTAG según el estándar IEEE incluye también dos pines de RESET: nSRSTque serviría para producir un reset software y nTRST para un reset del controlador TAP. Ninguno se usa como tal en el AVR. En su lugar el módulo TAP puede regresar a su estado inicial manteniendo la líneaTMS durante 5 periodos de reloj. A veces
  • 19. se usa la señal nTRST pero aplicada al pin RESET del AVR para un RESET convencional. Eso es útil no directamente para llevar al AVR al modo de programación sino como una forma alterna de limpiar el bit JTD del registro MCUCR. Eso junto con el fuse JTAGENprogramado son condiciones para que se abra el puerto JTAG, ya sea para programación o depuración. Conector de la interface de programación y depuración JTAG. Interface de programación aWire Es la interface de programación y depuración constituida por un solo cable que tienen los AVR32 de pocos pines, aunque eso parezca exagerado pues como mínimo los AVR32 tienen 48 pines. Lo que sí es seguro es que no está disponible en ningún AVR de 8 bits. A pesar de su requerimiento mínimo, como interface de depuración ofrece el mismo alcance que JTAG. La única señal, DATA, es bidireccional y en el AVR32 corresponde al pin de RESET. Líneas de la interface de programación y depuración aWire.
  • 20. Conector de la interface de programación y depuración aWire. Boot Loader Pongo el Boot Loader en el primer lugar de la lista porque quiero que le demos especial consideración. Quienes empezamos programando los PIC adquirimos la costumbre de trabajar con un programador. Utilizar un Boot Loader en ese mundo era una alternativa superflua o un camino para los aventureros. Es comprensible entonces que al migrar a los AVR nos preguntemos ¿y ahora qué programador vamos a utilizar? Tenemos muchas páginas después de ésta donde hallar una respuesta. Pero antes de pensar en un programador deberíamos saber que en el mundo de los AVR el Boot Loader es la mejor opción. Al menos es mi conclusión personal. Pero, ¿qué es un Boot Loader? Es un programa de microcontrolador que le permite auto-programarse. Mediante el Boot Loader el AVR recibe su nuevo programa directamente de la computadora sin intermediación de ningún dispositivo programador y lo graba en su memoriaFLASH. La transferencia se realiza por cualquier interface disponible, siendo las más comunes los puertos serial y USB. La siguiente figura nos ayudará a entender su mecanismo de funcionamiento. Esquema de la auto-programación de un AVR usando un Boot Loader. La memoria FLASH, mostrada en color naranja, es donde se almacena el programa del AVR, o sea, el firmware. En tiempo de ejecución el CPU lee cada una de las instrucciones de esta memoria, las decodifica y las lleva a cabo. Aunque aparece dividida en dos secciones, físicamente la memoria FLASH es un bloque compacto y el firmware puede ocupar parte o todo el espacio disponible. Anteriormente lo habitual era tener un solo firmware en el microcontrolador, que realizaba la tarea de usuario como controlar dispositivos externos, comunicarse con la computadora, etc. Ahora lo llamaríamos firmware de aplicación.
  • 21. Siendo el Boot Loader un firmware también, significa que podemos tener dos firmwares en el AVR. El firmware de aplicación va en la Sección de Aplicación y el firmware de Boot Loader, en laSección de Boot Loader. ¿Cómo sabrá el AVR qué código ejecutar? Cada vez que se inicia el programa de un AVR, esto es tras un RESET, el CPU empieza por ejecutar el Boot Loader –si existe– para ver si la computadora le está enviando datos que representan un nuevo firmware de aplicación. De ser así, recibe los datos y los graba en la sección de Aplicación, operando en lo que podemos llamar modo de auto-programación. Pero si no encuentra nada, el CPU pasa a ejecutar el firmware de Aplicación; operación en modo normal, por así decirlo. Así como la memoria FLASH el Boot Loader también permite programar la memoria EEPROM y el Byte de Lock bits. Además puede tener acceso de lectura a los fuses aunque no los puede modificar. Cuando trabajamos con la auto-programación dejamos de lado ese término para introducir otros dos. El proceso de cargar un firmware de aplicación en el AVR mediante el Boot Loader se denomina upload o subir. Y como el Boot Loader también permite leer el firmware, a dicho proceso se denomina download o bajar. Ventajas y desventajas El uso de un Boot Loader tiene sus pros y contras respecto de un programador convencional. El espacio que el código del Boot Loader ocupa en la memoria FLASH lo descarta como opción de la mayoría de los microcontroladores pequeños. Generalmente un Boot Loader puede abarcar entre 1 kB y 2 kB de memoria. Para los tinyAVR cuya FLASH anda por estos rangos no tendría sentido. En cambio para los megaAVR cuyas memorias llegan hasta los 256 kB, el Boot Loader apenas si se deja notar. El código del Boot Loader debería ser compilado o ensamblado para cada tipo de microcontrolador. Es raramente compatible por ejemplo un Boot Loader para un ATmega16 que para un ATmega32, a pesar de pertenecer a la misma serie. El primer requisito de compatibilidad es que los AVR tengan el mismo tamaño de memoria FLASH puesto que el Boot Loader se aloja en su parte final. El Boot Loader no puede programar los fuses. A veces esto puede ser una pena pero en general será una bendición. Existen algunos microcontroladores que ya traen un Boot Loader de fábrica, pero en su gran mayoría vienen vacíos. El Boot Loader lo tenemos que grabar como cualquier otro programa, con un dispositivo programador convencional. Si nos vamos a dedicar a la programación masiva de microcontroladores, nos puede resultar poco práctico grabar el Boot Loader primero y subir elfirmware de aplicación después. Sin duda en esos casos sería mejor usar un programador para grabar el firmware de aplicación directamente.
  • 22. Por otro lado, en los procesos de aprendizaje y de desarrollo de proyectos, donde modificamos constantemente el firmware de aplicación, el uso del Boot Loader es la mejor opción. Aquí nos basta con un microcontrolador para experimentar con diferentes programas y en diferentes circuitos. Para no exagerar y asumiendo la realidad de los microcontroladores que quemaremos en camino podemos preparar el Boot Loader en varios de ellos. Éste será el paso más difícil pero bien habrá valido la pena porque después solo necesitaremos de un clic para subir un nuevo firmware sin ni siquiera tener que desconectar nuestro circuito de aplicación. Boot Loader AVR109 y Butterfly La variedad de Boot Loaders es tan amplia como la de los programadores mismos. Los hay con diferente interface, con diferente protocolo, propietarios o de código abierto, y para diferentes series de AVR. Aquí nos ocuparemos brevemente de los más reconocidos. AVR109 y Butterfly son términos sinónimos para identificar el mismo tipo de Boot Loader que se presenta en la nota de aplicación AVR109 de Atmel. Este Boot Loader está escrito en C para los compiladores AVR IAR C y AVR GCC. Su código es de libre disposición así que podemos compilarlo para cualquiera de nuestros AVR con sección de Boot Loader. Utiliza el puerto serie para conectarse con la computadora. En una laptop un conversor USB-UART funciona bastante bien. La computadora por su parte deberá correr un software que entienda el protocolo AVR109. El más sobresaliente es AVR OSP, descrito en la nota de aplicación AVR911 de Atmel. Su nombre significa AVR Open Source Programmer, así que también es libre. Pero lo mejor de todo es que trabaja con los archivos XML de dispositivo originales y actuales de Atmel, es decir, soporta todos los AVR con Boot Loader. Abajo tenemos una versión para Windows de AVR OSP editada por Mike Henning.
  • 23. Entono del programa AVR-OSP II. Butterfly para ser más precisos es una adaptación del Boot Loader AVR109 hecha por Atmel para su mini tarjeta de desarrollo del mismo nombre. La tarjeta AVR Butterfly está basada en un ATmega169, el cual además del Boot Loader se puede programar mediante las interfaces SPI yJTAG. Esta tarjeta ofrecía características muy útiles a un bajo precio, por eso Joe Pardue apostó por ella al escribir su eBook C Programming for Microcontrollers, pero actualmente su preferencia ha sido desplazada por el Arduino.
  • 24. Anverso y reverso de la tarjeta de desarrollo AVR Butterfly (fuente: atmel.com). Boot Loader de Arduino El Arduino es, sin duda, el sistema de desarrollo del momento. Su tarjeta se puede reducir a un megaAVR y un conversor USB-UART. Siendo así de simple es sorprendente el éxito que ha alcanzado. Mucho se debe al framework de su lenguaje de programación pero en cuanto al hardware contribuyó el hecho de que el conversor USB-UART se conecte a la computadora para el data logging así como para recibir el nuevo firmware de aplicación del megaAVR. Tarjeta del Arduino. Al igual que la tarjeta AVR Butterfly, el Arduino también posee un conector ISP6PIN para la programación SPI de su megaAVR. Es solo una alternativa, pues el principal medio de su [auto] programación sigue siendo el Boot Loader. El Boot Loader del Arduino está basado en el protocolo de programación STK500 1.x.
  • 25. El IDE del Arduino permite subir al megaAVR el código del firmware automáticamente después de compilar el programa tan solo con presionar el botón Upload (ver la figura de abajo). El usuario no tiene que saber dónde se encuentra el archivo hex generado ni mucho menos conocer de los protocolos que operan detrás del escenario. ¡Genial! Entorno de Desarrollo Integrado del Arduino. Empero a nosotros nos interesará saber que detrás de esta ventana corre AVRDUDE luego de presionar Upload. AVRDUDE es un programa open source que soporta casi todos los programadores de AVR. Como no tiene un entorno propio se han hecho muchos intentos de darle uno; aunque todos quedaron incompletos. Geir Lunde escribió una aplicación Windows para AVRDUDE que permite usarlo para subir o cargar el archivo hex al AVR del Arduino. Por lo visto arriba esto parecería innecesario, pero resulta sumamente útil cuando trabajamos fuera del entorno del Arduino. El
  • 26. programa se llama Xloader y lo puedes encontrar en versión más reciente en su web russemotto.com. Entorno del programa Xloader. El Boot Loader del Arduino está hecho para los AVR de sus tarjetas: ATmega328, ATmega2560 o ATmega32U4, por ejemplo. La buena noticia es que es fácilmente recompilable para cualquiermegaAVR con soporte de Boot Loader, en especial de las series ATmegaXX4 y ATmegaXX8, que son los usados en cursomicros.com. También es posible compilarlo para los XMEGA e incluso para los tinyAVR pero eso requeriría de edición extra. Para los AVR con periférico USB se usa el Boot Loader llamado Caterina escrito por Dean Camera usando su librería LUFA. Hay una característica en el Boot Loader del Arduino que lo convierte en mi favorito y es que su ejecución es íntegramente controlada por el software de la computadora. Con otros Boot Loaders como el del AVR109 suele ser necesario presionar algún botón en el circuito del AVR aparte del botón RESET para entrar en modo de autoprogramación. En el Arduino el reset se genera mediante el conversor USB-UART. A decir verdad en algunas variaciones del Arduino sí se requiere presionar algún botón pero como todo el código es abierto lo podemos modificar a placer. Los códigos de Boot Loader de Arduino están en la subcarpeta hardwarearduinobootloaders. Programador FTDI Los módulos FTDI que estudiaremos son los mismos puentes USB-UART que usaremos intensivamente para las comunicaciones de nuestro AVR con la computadora. Son los comercialmente conocidos como conversores USB a Puerto Serie, solo que ahora los veremos en su desempeño como programadores de AVR. Bueno, en realidad no hay ningún programador llamado como tal. Denominamos así a los módulos de comunicación basados en el transceiver FT232R o similar. Este chip es un conversor USB-UART fabricado por FTDI chip. De ahí su apelativo, aunque ello no quita la posibilidad de usar este método con un transceiver de otra marca, como por
  • 27. ejemplo el CP2102 de Silicon Labso el MCP2200 de Microchip, o un conversor personalizado basado en un microcontrolador, como el USB Serial Light apoyado por el Arduino. De hecho dicen que el MCP2200 es en realidad un PIC pre programado. Los módulos FTDI están difundidos en dos formas: Como un conversor USB - Puerto Serie y como un conversor USB-UART. Dos ejemplos del primer grupo son los módulos EVAL232R y USB-to-RS232, de la misma FTDI Chips, los cuales ofrecen a la salida un conector DB9 con los 9 pines completos, con los voltajes y niveles lógicos del Estándar RS232. Se comportan como auténticos puertos serie. Muy buenos. Además los circuitos de estos y otros productos similares están disponibles en su web. Conversores USB-UART Los conversores USB-Puerto Serie EVAL232R y USB-to-RS232, de FTDI Chips. Por otro lado, quienes trabajamos con microcontroladores utilizamos el puerto serie para intercambiar con la computadora datos que no tienen que viajar en los niveles y voltajes RS232. Tampoco solemos emplear las 9 señales disponibles. Muchas de ellas solo son un legado de los antiguos módems. Es por eso que varias empresas como Adafruit o Sparkfun comercializan conversores USB-UART. Estos son como la tarjeta EVAL232R pero sin el transceiver MAX232, encargado de la conversión de los niveles de voltaje. En lugar del DB9 poseen un conector lineal que solo brinda las señales útiles para nosotros. Para decirlo de otra forma, son pequeñas tarjetas que básicamente unen las líneas del FT232RL a un conector USB por un lado y a un conector plano por el otro. En las imágenes mostradas abajo puedes ver que casi no tienen más elementos que esos. Por eso a veces se les llama también cables FTDI. En inglés un término muy extendido es Breakout. Así aparece identificado en los circuitos de las prácticas de cursomicross.com. conversores USB-UART
  • 28. Los conversores USB-UART FTDI Friend, FTDI Basic y USB Serial Light El conversor USB Serial Light es una tarjeta basada en un microcontrolador ATmega8U2 programado para emular un puerto serie. El AVR funciona también como el FT232RL aunque a nivel software los drivers con que trabaja no tienen el prestigio de FTDI chips. Los tres adaptadores son muy parecidos. Lo que nos interesa a fin de cuentas son las 6 señales de salida que proveen. Las 5 primeras son las mismas: GND, CTS, VDD, TXD y RXD (los nombres cambian un poco pero son las mismas). La sexta señal es DTR en el FDTI Basic y USB Serial Lightpero RTS en el FTDI Friend. Esa es la diferencia crucial. Como puente de comunicación para transferencias de mensajes con la computadora funcionan igual pues allí solo intervienen TXD y RXD además de VDD y GND claro está. Sin embargo, como circuito para programar un AVR ya sea mediante el Boot Loader del Arduino o por la interface SPI, sí debemos considerar esa diferencia. Módulo FTDI como programador de interface SPI Mediante el chip FT232RL podemos emular cualquier programador de puerto serie de los llamados bit bang como el programador SI-Prog o los programadores DASA. Puesto que elFT232RL puede manejar niveles de tensión TTL, la conexión con el microcontrolador sería directa, sin resistencias, ni diodos zéner ni transistores. Pero si vamos a trabajar con un adaptador como alguno de los tres mencionados arriba, debemos considerar dos puntos. Primero, que el software de grabación AVRDUDE asume que a la salida del puerto serie las señales tienen polaridad según el estándar RS232, esto es, invertidas respecto de las señales TTL. Y segundo, que los programadores seriales como SI-Progo DASA usan las señales DTR y RTS al mismo tiempo, lo cual deriva en un escollo puesto que los adaptadores FTDI Basic y USB
  • 29. Serial Light solo usan DTR, en tanto que FTDI Friend o usa DTR oRTS pero muy difícilmente las dos a la vez. Una alternativa para resolver estas dos contrariedades sería usar un conversor que nos brinde todos los pines del puerto serie necesarios, como por ejemplo el UM232R o el UM232H, mostrados abajo. conversores USB-UART Los conversores USB-UART UM232R y UM232H, de FTDI Chips. Afortunadamente también existe una solución software. Para ello debemos abrir en un editor de texto el archivo avrdude.conf que usa AVRDUDE. Se halla en el mismo directorio donde resideavrdude.exe, por ejemplo en C:WinAVR-20100110bin, suponiendo que lo instalamos con las opciones por defecto de WinAVR. Entre otras cosas el archivo avrdude.conf contiene las descripciones e interfaces de todos los programadores que soporta. Lo que haremos será añadir las características correspondientes de nuestro nuevo programador que solo usa las señales de los adaptadores FTDI Basic o FTDI Friend y con las polaridades debidas. Podemos incluirlo en cualquier parte pero para mantener las categorías lo pondremos entre los programadores seriales bit bang. Como ves en el extracto mostrado abajo, yo lo puse en el segundo lugar del grupo, entre ponyser y siprog. Es todo el contenido con fondo gris. # # some ultra cheap programmers use bitbanging on the # serialport. # # PC - DB9 - Pins for RS232: # # GND 5 -- |O
  • 30. # | O| <- 9 RI # DTR 4 <- |O | # | O| <- 8 CTS # TXD 3 <- |O | # | O| -> 7 RTS # RXD 2 -> |O | # | O| <- 6 DSR # DCD 1 -> |O # # Using RXD is currently not supported. # Using RI is not supported under Win32 but is supported under Posix. # serial ponyprog design (dasa2 in uisp) # reset=!txd sck=rts mosi=dtr miso=cts programmer id="ponyser"; desc="design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts"; type=serbb; reset=~3; sck=7; mosi=4; miso=8; ; # programador basado en un adaptador FTDI
  • 31. # reset=dtr sck=cts mosi=txd miso=rxd programmer id="ftdi"; desc="programador ftdi, reset=DTR sck=CTS mosi=TXD miso=RXD"; type=ft245r; reset=4;# DTR sck=3;# CTS mosi=0;# TXD miso=1;# RXD ; # Same as above, different name # reset=!txd sck=rts mosi=dtr miso=cts programmer id="siprog"; desc="Lancos SI-Prog <http://www.lancos.com/siprogsch.html>"; type=serbb; Extracto del archivo avrdude.conf modificado. En principio, a cada señal de la interface SPI, mosi, miso, sck y reset, le deberíamos asignar un número entre 1 y 9 que son los que tendría el conector DB9. Pero como dice el comentario (todo lo mostrado en azul oscuro es comentario), AVRDUDE no puede controlar la señal RXD de forma normal. Al no poder utilizarla, cualquiera de nosotros se habría dado por vencido, pero Doshwalo hizo. No sé cómo lo descubrió pero lo hizo. En su esquema no emplea la numeración del conector DB9 ni la polaridad invertida que se esperaría. No voy a quitarle más el crédito así que si deseas ver cómo funciona de fondo te recomiendo que lo leas en su sitio web. Los que llevan prisa solo
  • 32. copien y peguen lo indicado. Guarden los cambios hechos en el archivo avrdude.conf y cierren el editor. Ahora ya podemos usar nuestro conversor FTDI Basic u otro similar para programar cualquier AVR. Un ejemplo sería así. >avrdude -c ftdi -p atmega324p -P ft0 –U flash:w:main.hex:i-B 1 Por si no quedó clara la interface entre el módulo FTDI y el AVR, abajo tenemos el circuito a utilizar. Como se ve, la alimentación del AVR proviene del mismo módulo FTDI. No es recomendable ponerle una fuente propia. Si el AVR no tiene el pin AVCC pues no pasa nada, y si tiene varias señales VCC o GND, se conectan todas. El circuito del XTAL no será necesario si el AVR está configurado para operar con su reloj interno. De fábrica viene así. Este módulo FTDI es perfectamente compatible con el FTDI Basic y USB Serial Light. Para el FTDI Friend debemos aclarar que el pin RTS se debe re direccionar para unirse con la señal DTR. Incluye un pequeñísimo jumper en la parte posterior para realizar esta maniobra. Otra opción sería modificar de nuevo el archivo avrdude.conf como lo hicimos arriba. Esquema para programar un AVR con un Módulo FTDI. Módulo FTDI como programador Boot Loader de Arduino Una tarjeta Arduino es en última instancia un módulo FTDI unido a un AVR. Pero no están unidos como aparece justo en la figura de arriba. En el Arduino el módulo FTDI le sirve al AVR en su función original de comunicarse con la computadora como puerto serie virtual, ya sea para intercambiar simples mensajes de texto o para cargar el nuevo firmware de aplicación mediante el Boot Loader del AVR. En el primer caso las líneas TXD y RXD se conectan con sus homólogos en el AVR de forma cruzada. No hay novedad en ese aspecto, así que ni ponemos un circuito. Por otro lado, cuando se usa el módulo FTDI para cargar el nuevo programa del AVR interviene además de TXD y RXD la señal DTR, cuya función es resetear el AVR para
  • 33. que reinicie desde elBoot Loader. Para conocer los detalles de este proceso puedes leer la sección programador Boot Loader. El circuito en este caso queda como se ve abajo. Valen las mismas sugerencias indicadas para el circuito anterior sobre la fuente de alimentación y la conexión de los pines relacionados a ella. Aquí el AVR siempre trabaja con un XTAL de 16MHz. Esquema para programar un AVR con un Módulo FTDI usando el Boot Loader del Arduino. El Boot Loader le permite al AVR auto grabar en su memoria FLASH el programa que recibe por elmódulo FTDI (auto-programación). Pero para que esto sea posible primero el AVR debe tener grabado el programa del Boot Loader. Esto será sencillo si usamos el módulo FTDI como programador de interface SPI, estudiado antes. Luego el trabajo será más que sencillo. El circuito mostrado arriba es un "Arduino desnudo". Parecerá precario pero con el Boot Loader debidamente cargado será completamente funcional. Podremos usarlo desde su entorno natural (mostrado abajo) o desde un programa alternativo como XLoader.
  • 34. Entorno de Desarrollo Integrado del Arduino. El programa XLoader es particularmente útil para quienes programamos el AVR desde otras plataformas como de los compiladores IAR AVR C, CodeVisionAVR o AVR GCC alojado en Atmel Studio 6. De esa forma trabajaremos en todas las prácticas de cursomicros.com.
  • 35. Entorno del programa Xloader. Programador SI-Prog o PonySer Los programadores de puerto serie o paralelo se están convirtiendo en herramientas obsoletas por la casi extinción de esos puertos en las computadoras. Si necesitamos armar un programador similar aunque sea provisionalmente (en un breadboard) será para grabar el AVR que servirá de cerebro de un programador USB. Estamos hablando de programadores que no llevan un AVR en su circuito. De esos tenemos varios otros y los veremos luego. Ahora examinaremos los programadores conocidos como de bit bang por la manipulación bit a bit de los datos desde la computadora. No serán los más veloces pero sí los más fáciles de armar. Para muchos que reconocen, a veces hasta con cierto bochorno, haber empezado con los PIC antes que otro microcontrolador, es casi inevitable preguntar si habrá algún programador de AVR parecido al entrañable JDM. Un sencillo pero fiable y cómodamente portable programador de puerto serie que no necesitaba de alimentación externa. El programador más cercano es el también conocido en la comunidad PIC. Estamos hablando del viejo superviviente SI-Prog, de Claudio Lanconelli, quizá más conocido por su softwarePonyProg. Este programador usa la interface SPI para grabar todos los megaAVR y tinyAVR que la soportan. El circuito del SI-Prog lo podemos dividir en dos etapas: la que controla las líneas de programación (parte inferior) y la que conforma la fuente de alimentación (parte superior). He puesto un conector ISP de 6 pines estándar en vez del conector SIL que figura en el circuito original y he ignorado la etapa de los zócalos para los AVR que allí se incluían. Puedes encontrar los circuitos originales y el software PonyProg que los controla en la web del autor lancos.com.
  • 36. Circuito del programador SI-Prog. La etapa de alimentación del SI-Prog parte de los 3 diodos 1N4148 que toman corriente de las líneas del puerto serie y recargan el capacitor C3. Si el jumper está cerrado como se ve en la figura también participa el capacitor C4 para acumular en la entrada del LM2936Z-5 hasta 12V tensión. El chip LM2936Z-5 es un regulador parecido al 7805 que a su salida entrega una tensión de 5V, aunque no deberíamos reemplazarlo pues el 7805 no es LDO. De este modo el circuito obtiene su alimentación del puerto serie. Pero si vamos a usar una fuente de alimentación externa debemos mover el jumper a la otra posición. En este caso sí podemos pensar en un 7805 como alternativa. Si quitamos toda la etapa de alimentación y nos quedamos con las líneas básicas de programación, el circuito se reduce a su forma más difundida. Ahora el programador SI-Prog es netamente ISP porque su fuente de alimentación VCC la obtendrá del circuito del AVR programado.
  • 37. Circuito reducido del programador SI-Prog. Programador SI-Prog reducido comercializado por deccanrobots. El circuito resultante sigue siendo igual de fiable que el original. Es bastante bueno aunque no podemos decir lo mismo de PonyProg. Como la mayoría de los programas con entorno gráfico para Windows, este software ha quedado desactualizado. Soporta pocos dispositivos, la mayoría antiguos modelos, y difícilmente funcionará en los sistemas operativos actuales.
  • 38. Entorno de trabajo del programador PonyProg. Dada la popularidad del programador SI-Prog, se pueden encontrar en Internet algunos otros softwares con entorno gráfico que lo soportan. Podría citar una lista de ellos, con características tan diversas como sus limitaciones, pero sería en vano, un desperdicio de tiempo tratando de explicar a quiénes les puede convenir tal o cual programa. Mejor es usar sugerir un programa que a todos nos servirá sin importar el hardware ni sistema operativo de nuestra computadora. Este programa universal es AVRDUDE: el mejor software programador que existe, a pesar de no tener entorno gráfico GUI completo. En la siguiente captura, obtenida al escribir avrdude –c x, AVRDUDE nos muestra la lista de todos los programadores que soporta. Los 5 primeros son programadores bit bang de puerto serie. ElSI-Prog aparece identificado como siprog, pero también es reconocido por su alias ponyser. Por eso también se le conoce así.
  • 39. Programadores seriales bit bang soportados por AVRDUDE. De hecho, y como podremos comprobar después, todos los programadores bit bang de puerto serie tienen la misma estructura de circuito. Esto a veces puede hacer confusa su identificación. Por ejemplo, es frecuente encontrar pequeñas variaciones en un programador SI-Prog que hacen que se vea como un programador DASA3, y viceversa. Sucede mucho en las versiones comerciales porque no suelen identificarse con los nombres aquí presentados. Pero si vamos a trabajar con AVRDUDE, poco interesa la procedencia de nuestro programador serial y tampoco es imprescindible saber cómo se llama. Todo lo que necesitamos es conocer la relación de las señales MISO, MOSI, SCK y RST con los pines del conector DB9. Con estas correspondencias podemos identificarlo fácilmente. Por ejemplo, la imagen que tenemos abajo confirma que en el programador SIProg o PonySer la interface es MISO-CTS, MOSI-DTR, SCK-RTSy RST-TXD.
  • 40. Pines de interface del programador SI-Prog o PonySer. A modo de ejemplo, si queremos grabar un archivo main.hex en la memoria FLASH de un ATmega128P con AVRDUDE estando nuestro programador conectado al puerto serie COM1, podríamos escribir: >avrdude –c siprog –P com1 –p atmega128p –U flash:w:main.hex:i O de la siguiente forma, puesto que ponyser es alias de siprog. >avrdude –c ponyser –P com1 –p atmega128p –U flash:w:main.hex:i A falta de un puerto serie en las computadoras actuales se han difundido bastante losconversores USB a Puerto Serie, casi todos basados en la familia del transceiver FT232RL, pero sobre su uso el manual del AVRDUDE no garantiza nada y hasta recomienda no usarlo como puerto serie virtual. Si tienes un módulo de este tipo es recomendable que leas la página delprogramador FTDI. Programadores DASA Existen 3 programadores de esta serie: DASA,DASA2 y DASA3. Son programadores que no tienen alimentación propia ni derivada del puerto serie y tampoco una señal de reloj para el AVR en caso de que éste trabajara con oscilador externo. Empezaremos por describir el último. No, no ha habido un error al poner la imagen. El circuito que ves abajo corresponde al programador DASA3. Es muy parecido al circuito reducido del programador SI-Prog.
  • 41. Serían idénticos de no ser por el diodo 1N4148, que en muchas ocasiones también suele aparecer en elSI-Prog, y porque la conexión de los pines TXD yDTR en el conector DB9 está permutada. Circuito del programador DASA3. El circuito del programador DASA2 es más parecido aun. De hecho podríamos decir que es el mismo SI-Prog reducido. Supongo que por eso no es considerado por el programa AVRDUDE. Poner su circuito por tanto sería desperdiciar espacio. La primera versión de esta familia era el programador DASA. Es el programador serial más simple de todos. Yo creo en el adagio kiss pero este circuito no me da mucha confianza. Me atrevería a armarlo solo como programador provisional. Observa que nuevamente ha cambiado la conexión de las líneas en el conector DB9. Circuito del programador DASA.
  • 42. El programador DASA (fuente: make.larsi.org). Podríamos seguir mostrando otros programadores de puerto serie pero solo descubriríamos que son derivados o variaciones de los programadores SIProg y DASA3. Podemos incluso hacer nuestras propias adaptaciones que puedan ser controladas por AVRDUDE. Tanto su nombre como la conexión de señales en el conector DB9 deben ser añadidas en el archivo avrdude.conf, que utiliza AVRDUDE. Más adelante veremos cómo hacer esto pero para un programador que utiliza un conversor USB-UART. Debido a su parecido, son muy recurrentes las metidas de pata al confundir los programadoresDASA entre ellos y con el SI-Prog. Antes de usar un programador de estos debemos cerciorarnos en su identificación viendo los pines de interface que usa. La siguiente imagen por ejemplo nos resalta las interfaces de los programadores DASA y DASA3. Observa que no aparece DASA2. Si tuviéramos uno, podemos invocarlo como siprog o ponyser.
  • 43. Programadores DASA soportados por AVRDUDE. A modo de ejemplo, si queremos grabar con un DASA3 un archivo main.hex en la memoria FLASH de un ATmega128P con AVRDUDE estando nuestro programador conectado al puerto serie COM1, podríamos escribir: >avrdude –c dasa3 –P com1 –p atmega128p –U flash:w:main.hex:i O, si usamos un DASA. >avrdude –c dasa –P com1 –p atmega128p –U flash:w:main.hex:i O, si usamos un DASA2. >avrdude –c siprog –P com1 –p atmega128p –U flash:w:main.hex:i A falta de un puerto serie en las computadoras actuales se han difundido bastante losconversores USB a Puerto Serie, casi todos basados en la familia del transceiver FT232RL, pero sobre su uso el manual del AVRDUDE no garantiza nada y hasta recomienda no usarlo como puerto serie virtual. Si tienes un módulo de este tipo es recomendable que leas la página delprogramador FTDI. Programador USBasp USBasp deber por mucho el programador USB para AVR más vendido y también el más construido en casa debido a la libre disponibilidad de su hardware, firmware y la amplia gama de software de computadora que lo soporta. Su popularidad se ha
  • 44. acrecentado además por la flexibilidad de su circuito que permite usarlo con el firmware de otros programadores USB comoAVR Doper, AVRminiProg o USBtinyISP. Todo esto lo explicaremos de a poco. Así que empecemos por mostrar sus principales características entres pros y contras. Programador usbasp Programadores USBasp. Soporta las interfaces de programación SPI y TPI. Con SPI podemos programar todos losmegaAVR y la gran mayoría de los tinyAVR. Con TPI cubrimos el pequeño restante de los tinyAVR. Recordemos que la programación TPI también puede realizarse en alto voltaje, pero ese modo no es manejado por USBasp. Fue diseñado por Thomas Fischl utilizando la librería V-USB de Christian Starkjohann que administra todo el protocolo de comunicación USB a nivel software, de modo que no es preciso disponer de un microcontrolador con USB incorporado. Inicialmente el firmware está escrito y compilado para el ATmega8 y ATmega88 pero puede adaptarse para funcionar en cualquier AVR siempre que tenga la memoria y los pines suficientes. Puesto que la librería V-USB trabaja en bit banging (bit a bit), las transferencias de datos se dan a la mínima velocidad del protocolo USB, esto es, 1.5 Mb/s (modo Low Speed). A pesar de ello la velocidad de programación alcanza los 5 kB/s. Es bastante rápido. Usa un jumper para activar la alimentación Vcc al AVR target y otro para “frenar” cuando sea necesario la velocidad de programación. Mover jumpers cada vez que vamos a programar un AVR podría resultar hasta frustrante en especial si tenemos planeado usar el programador activamente. No tiene un software de computadora con entorno a lo Windows que lo maneje a plenitud. AVRDUDE lo controla estupendamente pero su uso desde la línea de comandos con frecuencia termina por ahuyentar a los principiantes. Muchos han intentado darle a AVRDUDE un entorno grafico que permita programar el AVR con un
  • 45. par de clics: avrdude-gui, SinaProg, AVR Burn-O-Mat, son algunos ejemplos. Para mí todos están incompletos en especial por las ventanas de configuración de los fuses. Inicialmente eso me disgustaba pero luego vi que los fuses no los programaba más que una vez. El resto del tiempo solo programaba la memoria flash, para lo cual efectivamente bastan con un par de clics. AVRDUDE corre sin ningún inconveniente en Mac OS X y Linux. En Windows requiere la instalación del driver open source para USB libusb. No tendría que resaltar esto de no ser porque libusb se lleva mal con los drivers USB de Jungo que emplea Atmel Studio 6 para sus programadores y depuradores hardware, como AVRISP mkII, AVR Dragon, etc. En estos casos se recomienda emplear la librería libusb en modo filtro, el cual lamentablemente no está del todo acabado. Parece que al final la balanza no favorece mucho que digamos el lado de los pros. Siendo el programador USBasp de hardware y software open source, tal vez pienses que en vez de criticar debería hacer mi aporte para remediar sus supuestas deficiencias. De hecho lo pensé al principio pero luego comprendí por qué otros no lo habían hecho antes. ¿Por qué? Si echamos un vistazo al sitio web oficial de USBasp, quizá nos sorprenda encontrar además del diseño original las distintas adaptaciones que hicieron muchos usuarios. ¿Por qué tantas versiones?, ¿Serán igualmente fiables?, ¿Cuál me conviene construir? No es fácil responder a estas preguntas para alguien que pretende ser imparcial. Así que en vez de dar un sí, no, éste o aquél, vamos a hacer un pequeño viaje para conocer las características del circuito de este programador y comprender por qué le hicieron algunas variaciones. Empecemos por el circuito original del USBasp. Programador USBasp original.
  • 46. Circuito del programador USBasp original. La interface USB El AVR es un dispositivo esclavo en la red USB que debe estar atento a todos los datos que le envía la computadora. Esto se consigue usando la interrupción INT0 para detectar los cambios de nivel en la línea D+. Se puede editar fácilmente el firmware del AVR para conectar las líneasD+ y D- a otros pines del AVR (siempre que
  • 47. pertenezcan al mismo puerto), pero la conexión deD+ al pin INT0 debe permanecer. En realidad, según la librería de USB Virtual V-USB que usa el firmware y las interrupciones de cambio de pin del ATmega88, es posible incluso pasar por alto esta conexión pero con una edición un poco más avanzada. La resistencia de 2.2k presenta el programador a la computadora como dispositivo Low Speed(1.5MHz). Si estuviera atada al pin D+ la computadora trataría de reconocerlo como dispositivoFull Speed (12 MHz). Es regla general que las transferencias de datos a altas velocidades no se pueden realizar a niveles de tensión muy altos. Por eso el USB fue diseñado para que sus líneas de datos D+ y D-manejen señales diferenciales de 0 y 3.3V, no los niveles TTL de 0 y 5V. Si en D+ hay 3.3V en D- debe haber 0V y viceversa. Los microcontroladores con USB hardware tienen pines preparados para entender estos niveles incluso si están alimentados por Vcc = 5V. Pero como el USBasp no lleva uno de esos, tiene que usar diodos zéner. Nota que si fueran de 3.3V, estaríamos en el borde del rango que puede entender el AVR. 3.6 V está bien. Eso junto con las resistencias de 68 Ω dan los niveles de tensión e impedancias que el estándar USB puede aceptar. Interface USB del programador USBasp. Uno de los diseños que me llamó la atención rápidamente por su PCB compacto (solo tiene 3 discretos puentes) era el de J.A. de Groot. Pero me desilusioné al percatarme de que le había quitado los diodos zéner. Yo no habría hecho eso, pues la especificación del USB es bastante estricta. Si bien es cierto que era así en las primeras del programador, no he visto otros proyectos con USB emulado que omitan los diodos zéner.
  • 48. Programador USBasp modificado por J.A. de Groot. La interface SPI En el circuito del USBasp original las líneas de la interface SPI van directamente al conector. Puesto que el AVR programador siempre trabaja a 5 V, es necesario que el AVR target (a programar) también lo haga o, de lo contrario, no se podrán entender. Hasta allí no parece haber nada novedoso, ¿verdad? Interface SPI del programador USBasp.
  • 49. Sin embargo, varias personas decidieron interponer elementos en las líneas del bus SPI pensando en los AVR alimentados por 3.3 V o, en general, por voltajes inferiores a 5 V. No estamos hablando de los XMEGA ni de los AVR32 que son los que trabajan a 3.3 V de forma exclusiva. Además ellos no se programan por la interface SPI. Nos referimos a los tinyAVR ymegaAVR que como sabemos pueden trabajar entre 1.8V y 5.5 (esos son valores críticos, no significa que tengamos que llegar a esos extremos). En algunos rediseños como el de Fisch und Fischl GmbH y Thomas Pfeifer se han puesto resistencias con el propósito adicional de prevenir cortocircuitos. En otros diseños como Pawel Szramowski o yuki-lab.jp han ido más lejos y le han colocado un buffer como el 74HC125 o el 74HC541. En cualquiera de esos casos el jumperSupply Target debe permanecer abierto durante la programación dejando que AVR target trabaje con su propia alimentación (inferior a 5V). Programador usbasp Interface SPI del programador USBasp. Los jumpers Hay tres jumpers en el programador USBasp:
  • 50. Jumpers del programador USBasp. Slow SCK. Sirve para reducir velocidad de programación del USBasp. Por defecto, cuando este jumper está abierto, la velocidad del bus SPI se establece a Fsck = 375kHz (frecuencia de la señal SCK). En la gran mayoría de los casos se cumplirá con el requisito de ser menor a la cuarta parte de la frecuencia del procesador, es decir, Fsck < F_CPU/4, y no habrá problemas pues en general nuestro F_CPU vale la frecuencia del XTAL usado. Una de las excepciones se da cuando el AVR es nuevo, donde los fuses de reloj configuran la frecuencia F_CPU = 1MHz, esto es, la octava parte de la frecuencia del oscilador RC interno del AVR. En ese caso la condición 375kHz < 1MHz/4 no es cierta y por tanto será necesario disminuir el valor de Fsck. El programador USBasp ofrece dos formas de reducir el valor de Fsck: por la vía hardware, cerrando el jumper Slow SCK, y por la vía software, desde el programa como AVRDUDE. Si el jumper está cerrado, el bus SPI se configura con Fsck = 8kHz. Esta frecuencia no solo cumplirá la exigencia de Fsck < F_CPU/4, sino que puede reducir demasiado la velocidad de programación del AVR. La buena noticia es que si programamos los fuses de reloj para que la frecuencia F_CPU sea superior a 1.5MHz, en las siguientes ocasiones ya no habrá necesidad de reducir el valor de Fsck. Self Programming es el jumper de auto-programación. Los programadores USB suelen tener un jumper similar para permitir la actualización automática de su firmware, pero este no es el caso. En el USBasp la actualización o la primera grabación del firmware
  • 51. es manual. Si queremos hacerlo, debemos grabar el AVR del USBasp con otro programador. Solo en esa ocasión se debe cerrar el jumper Self Programming. El resto del tiempo debe estar abierto. Supply Target. Este jumper sí lo usaremos con frecuencia. Si está cerrado se conectan las líneas Vcc del programador USBasp y del circuito de aplicación (target). Aunque eso te parezca obvio, debes notar que si el circuito target tiene su propia alimentación activada, el jumper cerrado podría dejar el puerto USB dañado. El USB en este caso está configurado para brindar alimentación [al USBasp y al circuito target inclusive]; no para recibirla. Así que antes de cerrar el jumper, es recomendable apagar la alimentación del circuito target. En ese caso podemos incluso mantener el jumper cerrado todo el tiempo; así funcionaba el USBasp en sus primeras versiones. Dejar el jumper abierto y permitir que el circuito target trabaje con su propia alimentación es útil cuando ésta tiene un valor inferior a 5 V. Recordemos que esto requiere la adaptación de las líneas del bus SPI con buffers o al menos con resistencias en serie. Para más información ver la interface SPI. Los diodos LED Son elementos básicamente decorativos. El LED verde se enciende cuando apenas se conecta el programador al puerto USB de la computadora. El LED rojo se enciende durante el proceso de grabación del AVR. Desde el firmware es posible reubicarlos así como editar su función. Yo por ejemplo modifiqué el código para que el LED verde se encienda tras la correcta enumeración del programador, o sea cuando la computadora lo haya reconocido correctamente. También Limor Fried hizo lo mismo con su programador USBtinyISP. En el circuito original las resistencias de cada LED son de 1k. Eso por supuesto depende del tipo de LED. Para mis diodos LED yo tomé resistencias de 330 Ω.
  • 52. Diodos LED del programador USBasp. Los conectores Si por su tamaño el programador necesitará un cable para conectarse a la computadora, se usará un conector de recepción de tipo B estándar (ese que tiene forma de cajita y es el más usado) o micro (demasiado pequeño). Aunque los conectores mini ya no están contemplados en especificación 3.0 del USB, todavía se encuentran en el mercado y son muy populares en dispositivos portátiles. Pero si el programador es muy pequeño se puede conectar directamente a la computadora usando un conector de tipo A macho. Es el conector que usaron por ejemplo Fabio Baltieri y Sven Hedin en sus adaptaciones. Programador usbasp Adaptaciones del USBasp de Fabio Baltieri (izquierda) y Sven Hedin (derecha). Los dos diseños se ven muy parecidos, uno más presentable que el otro, pero la principal diferencia está en el conector ISP. ¿Por qué un conector tiene 6 pines y el otro 10?
  • 53. En el USBasp original el conector es un ISP10PIN, de 10 pines. Además de las líneas de programación propias de la interface SPI (MISO, MOSI, SCK, RST) y de alimentación (VCC y GND), están conectadas las líneas de transmisión TXD y recepción RXD del USART. El USART sirve para comunicarse con la computadora por el puerto serie. El autor, Thomas Fischl, la puso para la depuración del programador, es decir, para quienes deseen contribuir al desarrollo y mejora de su firmware. Para los usuarios finales esta interface está por defecto desactivada y TXD y RXDson “líneas muertas”, de modo que pueden prescindir de ellas. Sin las líneas del USART basta con un conector de 6 pines para el programador. Líneas del USART en el conector ISP10PIN pines del USBasp. El conector de 10 pines del USBasp original es compatible con el hardware antiguo de los AVR. Atmel todavía lo incluye en algunos de sus productos como sus placas STK500 y STK600 pero solo con fines de compatibilidad. Al final siempre nos insta a usar el conector de 6 pines. Así lo han entendido los diseñadores de programadores similares como AVR Doper o USBtinyISP. Parece que somos muy pocos los que seguimos el mismo camino con el USBasp hecho íntegramente en versión through hole. Recuerdo haber visto también el programador de yuki-lab.jp con un conector ISP6PIN. Los zócalos Para ser sincero, yo era de los que venían del mundo de los PIC y tenía la casi viciosa costumbre de utilizar un programador con zócalo donde colocar el PIC para después
  • 54. retirarlo y llevarlo al circuito de aplicación. Con los AVR me deshice definitivamente de esa práctica. Luego entenderás por qué. Programador usbasp Programadores USBasp con zócalos. Un turco de nickname gevv armó un USBasp con zócalo ZIF para los AVR de 8, 20, 28 y 40 pines. Adicionalmente cuenta con un conector ISP de 10 pines para programar AVRs fuera del zócalo; es el de la imagen derecha. Es uno de mis anhelos llegar algún día a Turquía, pero no imaginaba que el idioma me resultara tan complicado. No entendí nada de su web. Ni siquiera sé si acepta los AVR de 20 pines antiguos o de los nuevos. Haré un mayor esfuerzo en otra oportunidad. Por ahora no tengo interés en su programador. El programador de la imagen izquierda es la adaptación de Matthias Görner utilizando zócalos ordinarios de 28 y 40 pines. No tiene conector ISP para programar los AVR que no quepan en sus zócalos. Si al igual que a mí, no te gusta ninguno de los dos programadores mostrados, puedes rehacer el tuyo propio según tus preferencias. Con el firmware y el circuito a tu disposición solo necesitas conocer dos cosas: Las señales del programador MOSI, MISO, SCK y RST deben ir a los pines del AVR con el mismo nombre. Se da por hecho la conexión de todos los pines de alimentación GND, VCC y, si existe, también AVCC. Puedes encontrar información adicional en la sección interface de programaciónSPI. El modo de programación es una de las formas de trabajo del AVR, y para que trabaje el AVR necesita de una señal de reloj que puede ser interno o venir del exterior. Cuando el AVR es nuevo su reloj es el circuito RC interno. Después lo programamos para que su reloj sea externo, normalmente de un XTAL. Los dos programadores descritos antes utilizan un XTAL para el AVR target. Otra forma sería generar una onda cuadrada periódica en el AVR del programador y aplicarla al
  • 55. pinXTAL1 del AVR target. Esta señal es compatible con cualquiera de las fuentes de reloj externas del AVR. Cuando programamos los fuses de reloj en realidad estamos optimizando el circuito de reloj interno del AVR para alguno de los elementos externos entre XTAL, resonador cerámico, circuito RC o simplemente una señal cuadrada en el pin XTAL1; no significa que una configuración de reloj impedirá el funcionamiento del AVR con la otra fuente de reloj externa, solo que quizá no será la mejor opción. Un programador con zócalos puede ser realmente útil cuando nos dedicamos a la programación en serie de microcontroladores. Las pocas veces que tuve que hacerlo fue utilizando microcontroladores de 28 o 40 pines (comprándolos en cantidades, los microcontroladores pequeños cuestan casi lo mismo que los medianos). Así que al empezar a trabajar con los AVR supuse que si quizá, tal vez, alguna vez,… necesitaba de un programador con zócalo, sería con un ZIF para los AVR de 28 y 40 pines. En el hardware puse un ATmega88 SMD para reducir el tamaño de la PCB y en el firmware configuré el Timer2 para generar una onda cuadrada de 2MHz como reloj del AVR target. Programador usbasp Programador USBasp con zócalo ZIF. El resultado es como lo que ves arriba. Para mí quedó muy bonito pero te confieso que de todos mis programadores es el que menos uso. Me costó casi lo mismo que un Arduino. Así que antes que cometas el posible mismo error, te recomiendo que te compres eso: un Arduino. Con ello tendrás un microcontrolador, un programador, un conversor USB-UART (puerto serie para tu laptop) y hasta una fuente de alimentación de 5V y 500mA. Programador USBtinyISP El programador USBtinyISP fue desarrollado porLimor Fried a partir del programador USBtiny deDick Streefland. Como su nombre deja suponer, está basado en un microcontrolador tinyAVR, el ATtiny2313, y solo ofrece la interface de programación SPI (ISP por antonomasia). Describamos algunas de sus características: Puede programar todos los megaAVR ytinyAVR con interface SPI, excepto los que cuentan con memoria superior a 64K, que son los familiares del ATmega128 y ATmega256. Utiliza buffers para grabar microcontroladores AVR que operan a Vcc < 5V.
  • 56. Su alimentación proviene del puerto USB. También puede suministrar alimentación de 5V al circuito target, siempre que no exceda de los 100mA. Este tope se puede extender editando el firmware. Tiene una aceptable velocidad de programación de 1kB/s. Para tener una referencia práctica, los programas de cursomicros son de 2kB en promedio, así que grabarlos en el AVR tomaría cerca de 2 segundos cada uno. Se puede usar desde AVRDUDE o desde Atmel Studio 6. En resumen es bastante parecido al USBasp, salvo por la primera limitación y por el costo. Este programador no está disponible comercialmente en versión ensamblada. Lo podemos comprar desde adafruit.com solo como un kit. La ventaja de este kit es que el microcontrolador ATtiny2313 ya viene pre-programado. Eso te puede ahorrar bastante tiempo y esfuerzo. Programador usbasp Vistas exterior e interior del programador USBtinyISP (fuente: ladyada.net). Las líneas de la interface de programación SPI del USBtinyISP se reúnen en los dos conectores estándar: el cada vez menos usado de 10 pines y el recomendado por Atmel de 6 pines. El jumper OUTPWR tiene las mismas funciones que en el programador USBasp: Brindar alimentación (con el jumper cerrado) de 5V al circuito target si éste no la tiene, o Permitir (con el jumper abierto) que el circuito target trabaje con su propia alimentación, lo cual es deseable cuando su nivel es diferente de 5 V. Actualmente el USBtinyISP se encuentra en su versión 2.0. La diferencia notoria respecto de la versión 1.0, aparte de algunos pequeños ajustes en el firmware, está en el buffer 74AHC125Ncolocado en las líneas de programación MISO, MOSI, SCK y RST, del hardware. Además de aislante, este CI sirve de puente entre las señales TTL del
  • 57. AVR programador y los niveles del AVR programado, que pueden ser de 0-5 V o bajar hasta 0-2 V. El buffer 74AHC125N se alimenta del pin Vcc del circuito target. En el circuito de la versión 1.0 en lugar de los buffers las líneas de programación se aislaban con resistencias de 1.5k. En teoría, también permiten la comunicación entre dos microcontroladores que operan a diferente nivel de Vcc, pero algunos dicen que en la práctica no es una interface muy fiable. Circuito del programador USBtinyISP, versión 2.0.
  • 58. Circuito del programador USBtinyISP, versión 1.0. Construcción de un USBtinyISP El programador USBtinyISP es open source. Todos los archivos están disponibles en la web de su autora, www.ladyada.net. Como no pasa por muchas actualizaciones aquí están algunas réplicas, actualizadas a noviembre de 2012. Circuito y PCB en Eagle. (Versión 2.0) Firmware del microcontrolador ATtiny2313. (Versión 2.0) Circuito y PCB en Eagle. (Versión 1.0) Firmware del microcontrolador ATtiny2313. (Versión 1.0) El firmware compilado es main.hex y se encuentra en la carpeta spi. Para construir cualquier programador de AVR con interface USB se sigue el mismo procedimiento, el cual se divide en dos etapas:
  • 59. Elaborar la placa de circuito impreso, PCB, y soldar todos los componentes. En lo posible usamos un zócalo en vez del AVR del programador. Aquí terminaríamos si el programador no se basara en un microcontrolador. De hecho, si compraste el kit de ensamblaje deadafruit, coloca el ATtiny2313 en el zócalo y ya puedes empezar a usar tu programadorUSBtinyISP. Quienes estén armando su programador con componentes propios, deberán enfrentarse a la siguiente parte. Programar el AVR del programador usando otro programador. Esta fase puede ser la más tediosa. Si al inicio nos cuesta conseguir ese otro programador, después nos quebrará la paciencia usarlo con AVRDUDE. Si ya estás acostumbrado a usar otros programadores como el USBasp, entonces esto será pan comido. Puedes seguir el procedimiento totalmente ilustrado por la misma Limor Fried en la páginawww.ladyada.net/make/usbtinyisp/make.html de su web. Desafortunadamente Limor solo guía durante la primera etapa. Y lo que para muchos puede caer como baldazo de agua fría, nos pide que no busquemos ayuda sobre la grabación del firmware en su foro. ¿ ? Debe ser porque la respuesta involucra múltiples formas o para animarnos a comprar el kit, donde el AVR ya viene pre-programado. Uso del USBtinyISP Al conectar el programador el LED verde se enciende si su enumeración se llevó a cabo con éxito. El programador USBtinyISP puede ser controlado por AVRDUDE o desde Atmel Studio 6. Su nombre para ser invocado desde AVRDUDE es usbtiny. Por ejemplo, para programar la memoria FLASH de un ATmega324P con el archivo main.hex podríamos ejecutar: >avrdude –c usbtiny –p atmega324p –U flash:w:main.hex:i El LED rojo se enciende durante el proceso de grabación. La instalación de WinAVR trae consigo los drivers de libusb que usa AVRDUDE. Sin embargo, Limor sugiere usar los drivers modificados [por ella]. Hay dos versiones: el driver para Windows de 32 bits y el driver para Windows de 64 bits. Los programadores que pueden ser controlados por Atmel Studio 6 son los que utilizan los protocolos de programación estándar de Atmel; el STK500, por ejemplo. Pero ese no es el caso del USBtinyISP. En vez de implementar el protocolo STK500 en el firmware del microcontrolador, cosa que no hubiera sido posible debido a su poca memoria, de Limor Fried decidió escribir una aplicación que hace la conversión del protocolo en la computadora. Para decirlo burdamente, se trata de un parche que engaña a Atmel Studio 6 haciéndole creer que el USBtinyISP es un programador de protocolo STK500v2. Funcionando como programador STK500 el USBtinyISP tiene dos restricciones destacables respecto del original:
  • 60. No siempre puede programar el byte de calibración. Este byte permite ajustar la frecuencia del oscilador RC interno del AVR cuando se usa como reloj del sistema. Creo que nos es relevante puesto que lo habitual es usar el AVR con XTAL. Además la calibración del circuito RC interno también se puede hacer en tiempo de ejecución, es decir, podríamos añadir un par de líneas en el programa del microcontrolador para solucionar el problema. Sin duda la principal diferencia entre un programador original de Atmel y cualquiera de sus clones que trabajan emulando un puerto USB es la velocidad de programación. El USBtinyISPacepta los comandos para cambiar la velocidad de programación pero no los obedece. ElUSBtinyISP sigue con su tope de 1kB/s. Para que nuestro USBtinyISP emule un STK500 debemos seguir dos pasos: Instalar la aplicación com0com para generar dos puertos series virtuales en nuestra computadora. Este software es open source y lo puedes descargarla desdehttp://com0com.sourceforge.net. Luego debemos instalar el software puente USBtiny500 de Limor Fried. Programador AVR Doper La inexistencia de un periférico USB en los microcontroladores AVR de empaque DIP junto con la arquitectura y compatibilidad en el set de instrucciones han alentado a algunas personas a desarrollar librerías de USB software. Son librerías optimizadas a nivel ensamblador que manejan las rutinas mínimamente necesarias del protocolo USB. Tenemos por ejemplo, la librería de Igor Cesko explicada en la nota de aplicaciónAVR309 de Atmel. Otra librería, con mejor soporte y actualización, es VUSB (acrónimo de Virtual USB), de Christian Starkjohann. Es la misma librería que utilizó Thomas Fischl para su programador USBasp. IMAGINO que cuando Christian vio el trabajo de Thomas pensó “yo puedo hacerlo mejor” y decidió crear el programador AVR Doper. Programador AVR Doper en su circuito original.
  • 61. AVR Doper es un proyecto Open Source tanto en hardware y software. Muchas de sus características son también apreciables en otros programadores: se alimenta desde el puerto USB, posee buffers en las líneas de programación para programar dispositivos que trabajan con voltajes inferiores a 5V y hasta cuenta con un jumper como forma alternativa de reducir la frecuencia del reloj SCK (velocidad de programación) similar al USBasp. El firmware del programador AVR Doper está basado en el protocolo de programación STK500v2de Atmel y como tal puede programar todos los megaAVR y la mayoría de los tinyAVR. El protocolo original maneja las tres interfaces de programación: SPI, HVSP y HVPP, de los cuales AVR Doper acepta los dos primeros. Utiliza un conector de 10 pines para la programación SPI que, con algunas variaciones, todavía es compatible con el estándar de Atmel. Para la programación de alto voltaje dispone de dos zócalos para los [tiny] AVR de 8 y 14 pines. Esta interface HVSP también sale al exterior mediante un conector libre de 20 pines. Pero lo más importante –creo yo– es que, como todo programador STK500, puede ser controlado desde Atmel Studio 6. Adiós insufrible línea de comandos de AVRDUDE y a sus incompletas máscaras como SinaProg. Esto nos facilitará el trabajo ahorrándonos tiempo. ¡Wow! Hubiera conocido este programador antes de construir mi USBasp dirán algunos. La buena noticia para ellos es que pueden convertir su USBasp en un AVR Doper tan solo cambiándole el firmware. Claro que el circuito del USBasp no da para la programación de alto voltaje. Así que está funcionalidad no estará disponible. Para mí es una limitación inapreciable. Observa que si renunciamos a la programación HVSP, podemos deshacernos del circuito elevador de tensión, de los dos zócalos in-situ y de ese enorme conector de 20 pines, que es el mismo que usó Tobias Hammer en su programador HVProg. Él lo hizo justificadamente, pues empleaba todos los pines. Pero no entiendo por qué Christian Starkjohann le siguió el paso. Ni siquiera es un conector estándar. En fin, el caso es que al final nos quedará un circuito muy similar al del USBasp o del mismo USBtinyISP. Incluso podemos notar los tres jumpers que, de hecho, Christian los puso ex profeso por compatibilidad con el USBasp.
  • 62. Circuito original del programador AVR Doper (fuente: obdev.at). AVR Doper no es el primer programador que presentamos. Su descripción la hacemos asumiendo que ya conocemos los programadores tratados previamente en especial el USBasp. Quienes lo estudiaron comprenderán fácilmente el funcionamiento del AVR Doper. Quizá les sorprenda un poco encontrar dos señales de reloj en el circuito, pero también este punto ya lo explicamos anteriormente. La señal SCK es el reloj del bus SPI; es la que marca la velocidad de transferencia de datos entre el AVR programador y el AVR programado. La señal TSCK es el reloj de sistema del AVR programado (target, de ahí la T); es la que establece su velocidad de trabajo. En otros programadores no hay esta señal porque se asume que AVR target trabaja con su propio reloj, generalmente basado en un XTAL. Al igual que pasó con el programador USBasp, tras el éxito del AVR Doper muchas personas hicieron sus propias adaptaciones. A continuación, algunas de ellas.
  • 63. Las siguientes imágenes son del rediseño de Robert. Casi no hay diferencia con el original pero sí se nota que tiene los componentes mejor ordenados. El circuito es el mismo. Programador usbasp Programador AVR Doper con PCB mejorado por Robert. También hay quienes prefieren tener su programador en una caja pequeña. AVR tiny Doper es un rediseño hardware que prescinde de los zócalos de 8 y 14 pines pero como el AVR es de empaque SMD incorpora un conector ISP6PIN para la actualización del firmware. Parece que al autor tampoco le gustaba el gigantesco conector de 20 pines. Programador AVR tiny Doper SE de www.s-engel.de. Por supuesto, no faltan quienes modifican el programador quitándole la funcionalidad que no usarán. Domen Ipavec se deshizo de todos los componentes que permiten la programaciónHVSP y en el espacio ganado le añadió diodos dobles en casi todas las señales como protección ESD. Similar característica posee el programador AVRISP mkII. Ni los empaques SMD le ayudaron a darle un mejor aspecto a su placa.
  • 64. Programador AVR Doper adaptado por Domen Ipavec. En realidad tenemos hasta tres formas de construir un AVR Doper: (1) construirlo con su circuito original, (2) montarlo en el circuito metaboard y (3) implementarlo en el hardware de un USBasp. Puesto que la disposición de las líneas que van o salen del ATmega8 es diferente en cada caso, el autor ha escrito el firmware usando macros que permiten compilarlo para uno u otro circuito. Pero no te preocupes, no es necesario que nosotros compilemos el programa. Christian también ha publicado todos dos archivos hex, listos para grabar en el ATmega8. El programador AVR Doper ha sido corregido y mejorado a lo largo de tres años. La última actualización es de noviembre de 2008 y la puedes descargar desde su web o desde aquí. Uso del AVR Doper El programador AVR Doper posee un jumper USB HID que establece dos modos de operación. Este jumper se debe mover antes de conectar el programador a la computadora. Si el jumper USB HID está cerrado, el AVR Doper inicializará como un dispositivo HID. En este caso solo podremos usarlo desde AVRDUDE. Podemos invocarlo con stk500v2 o sus alias (avrispmkII o avrispv2). También será necesario especificar avrdoper en parámetro –P. Por ejemplo, para programar la flash de un ATmega168p con el programa main.hex podemos escribir. >avrdude –c stk500v2 –P avrdoper –p atmega168p –U flash:w:main.hex:i Si dejamos el jumper USB HID abierto, el AVR Doper trabajará en modo CDC. Ahora el programador aparecerá como un dispositivo conectado a un puerto serie COM virtual. Debemos especificar ese puerto COM al configurar el software programador. En la siguiente línea por ejemplo repetimos el ejercicio anterior considerando que se ha creado el puerto COM1: >avrdude –c stk500v2 –P com1 –p atmega168p –U flash:w:main.hex:i El trabajo desde Atmel Studio 6 se reduce a algunos clics.