- 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 vendra a ser la segunda parte.
Si alguien nos preguntara qu es lo que hace una computadora
personal, le responderamos de todo, segn 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), segn el programa grabado en su memoria.
La analoga de un microcontrolador con una computadora va ms all de
su programacin. Los microcontroladores son circuitos integrados que
encierran en un solo chip un CPU (unidad central de procesamiento),
las memorias ram y rom, los diversos perifricos 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 ms rodeados de los
microcontroladores: los perifricos de nuestras computadoras, como
las impresoras, teclados, ratones, monitores y dems, tienen
incorporados uno o ms microcontroladores. Los electrodomsticos,
cada vez ms modernos, como equipos de sonido, televisores LCD,
reproductores de DVD, etc., sin duda tienen microcontroladores que
guan sus funciones. Los aparatos de entretenimiento como los
reproductores de MP3 y MP4 porttiles tambin tienen
microcontroladores en su parte cerebral. Los telfonos celulares,
las cmaras 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 robtica, de telecomunicaciones, automovilstica...
En fin, todava quieres saber para qu sirven?Caractersticas 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 comunicacin serial RS232 e I2C, mdulos
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 hara desistir. Este hndicap
inicial se invierte cuando se utiliza un compilador de alto nivel,
ya que los AVR fueron diseados 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 caractersticas de cada AVR son descritas con todo
detalle en el captulo Arquitectura interna de los
AVR.Microcontroladores con Arquitectura Harvard Como todos los
microcontroladores modernos, los AVR fueron diseados 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
simultneo a ambas memorias utilizando buses diferentes. Ms
especficamente, el CPU puede leer la siguiente instruccin de
programa mientras est procesando los datos de la instruccin
actual.Arquitectura Harvard de un microcontrolador Antiguamente los
microcontroladores tenan una arquitectura Von Neumann. Como se ve
en el diagrama de abajo, estos microcontroladores usaban una
memoria nica que constitua tanto el segmento de memoria de programa
como el de datos. Con un solo bus 3. de comunicacin entre dicha
memoria y el procesador no es posible realizar diversos accesos a
la vez.Arquitectura Von Neumann de un
microcontroladorMicrocontroladores con Instrucciones RISC RISC es
sigla de Reduced Instruction Set Computer. Tambin es una
caracterstica propia de los microcontroladores actuales como los
AVR. Estos microcontroladores cuentan con instrucciones sencillas y
en un nmero mnimo. En muchos casos ello permite que la programacin
en ensamblador sea una labor cmoda y est al alcance de todos. Sin
embargo, cuando se desarrollan proyectos mucho ms complejos, el uso
del lenguaje ensamblador se torna cada vez ms engorroso. Entonces
se prefiere optar por los compiladores de alto nivel, para los
cuales un set CISC no es obstculo. 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 difciles de recordar a la hora de programar en
lenguaje ensamblador. Adems, al crecer el nmero de instrucciones
tambin crecern los cdigos de las instrucciones, lo cual deriva en
una mella en la eficiencia del microcontrolador.Caractersticas de
los AVR Algunas de las caractersticas y recursos generales y
comunes a casi todos los AVR son: Estn fabricados con tecnologa
CMOS. Aunque los dispositivos CMOS son ms lentos que los TTL, son
ideales para los microcontroladores porque requieren de menor
consumo de energa. Es posible implementar sistemas que solo se
alimenten de bateras corrientes. La tecnologa CMOS, como sabemos,
tambin significa que los transistores, al ser mucho menos, ocupan
mucho menor espacio en el chip. Memorias de programa (FLASH o ROM),
memoria de datos esttica (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. Timers.
Temporizadores de alta precisin o contadores de pulsos externos.
Tambin 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 programacin 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 cdigo grabado podr o
no ser ledo despus de la programacin. Otros recursos, ms avanzados,
son especficos a cada familia de AVR y pueden ser: Conversores
Analgico-Digital, ADC. Para recibir seales del mundo analgico.
Mdulos SPI. Para la comunicacin con dispositivos que utilizan el
bus SPI. Mdulos TWI. Para la comunicacin con dispositivos que
utilizan el bus I2C. USART, Transmisor Receptor Sncrono Asncrono
Universal. Para comunicarse mediante los protocolos RS232 con
cualquier dispositivo que tambin lo soporte. Por ejemplo, podemos
conectar nuestro AVR al puerto serie del PC o a cualquier otro
microcontrolador con USART. Mdulo Comparador Analgico. Nos puede
ahorrar un OP-AMP y algo ms. Mdulo CAN. Para facilitarle al AVR su
conexin con otros microcontroladores en una pequea red LAN con un
protocolo robusto para trabajar en condiciones extremas. Mdulo USB.
Casi todos los dispositivos digitales modernos presentan interface
USB. Con esto podemos disear sistemas que no tengan nada que
envidiarles. Etc., etc.Clasificacin 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 clasificacin para
saber con cul 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 ms bsico 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 errnea. 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 ms o menos, tener
5. algo de memoria ms o menos, tener un Timer ms o menos, emplear
otro tipo de memoria, y dems detalles de ese tipo.Clasificacin 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 perifricos posibles. Sin embargo, son muy veloces,
alcanzando a operar a 20 MIPS (millones de instrucciones por
segundo). As que tampoco los deberamos 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 podra hacer eso? Muy difcil,
verdad? Yo no conozco aplicaciones similares ni siquiera con un
PIC16F877A (Debe ser mi ignorancia). Inicialmente todos eran muy
pequeos en tamao, por lo general de 8 pines, pero ltimamente estn
apareciendo modelos que llegan a los 20 pines. Lo que vara 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 ms limitados no
significa que sean los ms fciles de programar.Los megaAVR. Popular
e inapropiadamente conocidos como ATmegas, son los
microcontroladores de 8 bits ms sobresalientes de Atmel. Detesto
hacer estas comparaciones pero creo que son un buen referente para
conocer de forma rpida los AVR. Pero bueno, yo dira 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 ms) y los megaAVR trabajan un
poco ms veloz, y etc., etc... No voy a abrir un debate aqu. Todos
los megaAVR tienen ms de 130 instrucciones, la mayora 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 todava
debemos distinguir dos grupos: Los clsicos 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 dems. Los nuevos
megaAVR. Bueno, eso de "nuevos" lo puse yo, por si acaso, solo para
darles cierta distincin. No es que estos AVR hagan la gran
revolucin 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 ms potentes que se pueden
conseguir en empaques DIP de 28 y 40 pines respectivamente. Los
otros megaAVR son ms grandes en cuanto a numero de pines y por
tanto solo vienen en empaques TQFP, QFN, etc. Sus perifricos son
bsicamente los mismos, solo suelen diferenciarse por tener ms
puertos de E/S. No digo que lo viejos AVR no sirvan para nada. Si
bien es cierto que pueden tener pequeos 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 tpico
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, ningn
Xmega viene en empaque DIP, lo cual dificulta su empleo para fines
de experimentacin 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 bsico 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 diseadores deberan ser descartados
como punto de partida.Otros Microcontroladores 7. Hay muchas marcas
de microcontroladores en el mercado. De ellas solo mencionar las
que creo ms populares. A veces un mismo tipo de microcontrolador lo
suelen proveer diversos fabricantes, por lo que sta no es una
clasificacin estrictamente metdica En esta presentacin 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 especfico. 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 aos. Su facilidad de uso,
comodidad y rapidez en el desarrollo de aplicaciones, abundante
informacin y libre disposicin de herramientas software
proporcionada por Microchip le han permitido ganar terreno
rpidamente en el mercado de los microcontroladores a nivel mundial,
hasta convertirse en los microcontroladores ms 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
tambin la adoptaran, aunque parece que la ventaja de Microchip en
el mercado est ya marcada y tal vez se acente ms en el futuro.Por
qu empezar con los PICS Por su fcil adquisicin. Se pueden conseguir
en casi cualquier tienda de electrnica. Por su pequeo set de
instrucciones, que no logra ser igualado por ningn otro
microcontrolador. Es casi mgica la forma cmo se pueden implementar
fcilmente casi cualquier algoritmo de programa con solo sus 35
instrucciones bsicas. Por su bajo costo. Los PICs son tal vez los
microcontroladores ms baratos con las caractersticas que poseen.
Por su fcil 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 experimentacin
sin la preocupacin por mayores recursos.Los Microcontroladores de
Freescale Hasta no hace muchos aos 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 gures de la microelectrnica 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 contina con la produccin de microcontroladores basados en
la arquitectura los viejos productos de Motorola y dotndoles de
todo el arsenal tecnolgico 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 ms conocidos eran los famosos 8051, 80151 y 80251, pero
actualmente ya no tiene inters en fabricarlos. En su lugar, fueron
otras compaas, 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 dems, no tiene
caso especificar sus caractersticas 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 aplicacin.Los Mdulos Basic Stamp de Parallax Los Basic
Stamp nos son una nueva familia de microcontroladores; son mdulos
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 tensin; todo en una pequea
tarjeta directa y/o fcilmente conectable a las computadoras. Una
vez cargado el programa, el mdulo est listo para ser insertado en
el circuito de aplicacin, 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.
Constitucin de un mdulo Basic stamp 9. Constitucin de un mdulo
Basic Stamp Por ejemplo, el BS2sx mostrado arriba cuenta con un
microcontrolador que est pre programado especficamente para
trabajar como intrprete, 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 fbrica. Aunque el intrprete 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
aplicacin de los Basic Stamp es ms bien de carcter didctico y de
entrenamiento; no son para grandes proyectos. Actualmente solo hay
tres familias de Basic Stamp, cada una con muy pocas variantes,
referidas bsicamente a la velocidad de operacin, capacidad de
memoria y cantidad de pines de I/O. En realidad, el tercer grupo
est formado por los Javelin Stamp, que interpretan cdigo Java en
vez de Basic. Si despus de todo an tuvieras inters por estos
mdulos, los circuitos de hardware y las herramientas software estn
a libre disposicin en la web de la firma
http://www.parallax.com/.Programadores de microcontroladores AVR
Conseguir las herramientas software siempre es la tarea ms fcil
comparada con la parte hardware. Podemos incluso trabajar con las
versiones demo de los programas y ver por nosotros mismos cul nos
resultar ms 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 ms 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 ms busca en
Internet, ms opciones y trminos nuevos encuentra que al finalmente
queda ms confundida. As que si eres nuevo en esto, no pienses que
la lectura de este extenso captulo puede frenar tu progreso. Todo
lo contrario, despacio se llega lejos.Esquema de la programacin de
un AVR. Para evaluar a priori la utilidad y calidad de un producto
tenemos que comparar sus caractersticas. 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 ms reconocidos. Por supuesto que existen
muchos otros, pero como veremos luego, la mayora de ellos son
variaciones o derivados de estos. Tabla Programadores de
AVRProgramadorInterface con Interface con el AVR la PCSoftwareBoot
LoaderUSB, COMUSART, USB,AVRDUDE, AVROSP, FLIP,...USBaspUSBSPI y
TPIAVRDUDEUSBtinyISPUSBSPIAVRDUDE, Studio 6AVR DoperUSBSPI y
HVSPAVRDUDE, Studio 6HVProgCOMSPI, HVSP y HVPPAVRDUDE, Studio 6 11.
Tabla Programadores de AVRProgramadorInterface con Interface con el
AVR la PCSoftwareAVRminiProgUSBSPI, JTAG, HVSP y HVPPAVRDUDE,
Studio
6ArduinoISPUSBSPIAVRDUDEFTDIUSBSPIAVRDUDESI-ProgCOMSPIAVRDUDEDASACOMSPIAVRDUDEBSDLPTSPIAVRDUDEAVR910COMSPIAVRDUDE,
AVROSPAVRISPCOMSPIAVRDUDE, Studio 6STK500COMSPI, HVSP, y
HVPPAVRDUDE, Studio 6AVRISP MkIIUSBSPI, PDI y TPIAVRDUDE, Studio
6STK600USBSPI, PDI, TPI, TPI-HV, JTAG, aWire, HVSP y HVPPAVRDUDE,
Studio 6AVR DragonUSBSPI, PDI, JTAG, aWire, HVSP y HVPPAVRDUDE,
Studio 6JTAGICE MkIIUSBSPI, PDI, JTAG y aWireAVRDUDE, Studio 6AVR
ONE!USBSPI, PDI, JTAG y aWireAVRDUDE, Studio 6Si te preguntas por
qu en nuestra tabla de comparacin no hemos considerado la cantidad
o el tipo de microcontroladores que cada programador soporta, es
porque est indicado de forma implcita. Es decir, eso depende de la
interface de programacin del AVR. Por ejemplo, si vamos a trabajar
con un AVR XMEGA, debemos saber que ellos tienen interface de
programacin PDI y por tanto en ese caso necesitaremos un
programador como el AVRISP MkII. Simple, verdad? En principio s,
pero los AVR pueden tener ms de una interface de programacin, unas
con ms alcance que otras. Enseguida las explicamos. 12. Programacin
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 lneas de las interfaces
seriales varan segn el protocolo. En cambio la interface paralela
es nica y consta de 16 lneas sin contar los pines de alimentacin
del AVR. Se deduce fcilmente que este modo solo est disponible en
los AVR de bastantes pines, ms de 14 pines, si queremos establecer
una regla.Programacin de Alto Voltaje HVPP y HVSP Antes hablamos de
la dicotoma serie-paralela. Ahora describiremos los modos de
programacin en alto y bajo voltaje as como de la relacin entre
todos ellos. El alto voltaje es un modo de programacin adicional
que solo est disponible en los AVR de las familias tinyAVR y
megaAVR. Es un modo cuya interface de programacin involucra el pin
de RESET, pues all donde se aplica el voltaje de 12V. Es el nico
pin diseado para soportar ese nivel de tensin. La programacin de
alto voltaje ofrece algunas opciones que no se pueden encontrar en
la programacin de bajo voltaje como programar los fuses SPIEN (para
activar o desactivar la programacin serial) y RSTDISBL (para
rehabilitar el pin RESET). En la programacin de bajo voltaje el AVR
trabaja con su alimentacin 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 ms, 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 programacin de alto o bajo voltaje, pero para volver a
habilitarlo el nico camino ser la programacin de alto voltaje. Me
pregunto si puedes descubrir el porqu. La programacin serial puede
ser de alto o bajo voltaje. En cambio, la programacin paralela (PP)
es siempre de alto voltaje. Por eso es casi redundante su
denominacin 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 lneas de la
interface paralela son 16 sin contar los pines de alimentacin del
AVR. De aqu concluimos que este modo solo est disponible en los AVR
de bastantes pines, ms de 14 pines, si queremos establecer una
regla. 13. Lneas de interface de la programacin paralela, HVPP. La
programacin serial de alto voltaje est presente en los tinyAVR que
cuentan con 14 pines o menos. Si uno de estos AVR tiene interface
de programacin SPI entones su programacin serial de alto voltaje se
denomina HVSP (High Voltage Serial Programming). Igualmente parece
poco apropiado limitar el calificativo porque los tinyAVR cuya
interface de programacin es TPI tambin soportan el alto voltaje.
Debe ser porque son muy poquitos :-(. Lo anterior no significa que
la programacin HVSP vaya por el puerto SPI. Los pines de interface
en este caso son otros, tal como se ve en la siguiente imagen.Lneas
de interface de la programacin serial de alto voltaje, HVSP.
Serial, paralelo, alto, bajo, ms o menos de 14 pines. S que todo
esto suena algo enredado sobre todo si los modos e interfaces
tambin se cruzan, pero se puede resumir y entender fcilmente as: En
principio todo AVR debe tener al menos una programacin serial de
bajo voltaje. Adicionalmente puede tener una programacin de alto
voltaje, que debe ser paralela si el AVR tiene ms de 14 pines o
serial si el AVR tiene 14 pines o menos. El pin RESET es
determinante en el modo de operacin del AVR. Si aplicamos 12 V
(vale entre 11.5V y 12.5V) al pin RESET, el AVR entra en modo de
programacin de alto voltaje (serial o paralela, segn el AVR). 14.
Si aplicamos 5 V al pin RESET, el AVR trabaja en operacin 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
operacin normal o esperando a que lleguen las instrucciones para
entrar en modo de programacin de bajo voltaje. Si ponemos el pin
RESET en 0 V y luego iniciamos la secuencia de programacin, uno de
cuyos paso incluye aplicar algunos pulsos al mismo pin RESET,
entonces el AVR entra en modo de programacin de bajo voltaje
(serial, obviamente). Aqu hay una leccin importante que debemos
aprender. Algunos AVR tienen la capacidad de multiplexar la funcin
del pin de RESET mediante el fuse RSTDISBL. Si dejamos este fuse
con su valor de fbrica (sin programar), el pin RESET servir para
resetear el AVR, o sea, con su funcin habitual. Pero si lo
programamos, el pin RESET trabajar como un pin de puerto
convencional. Es til si queremos ampliar nuestras lneas de E/S,
pero observa que ello impedir que el AVR pueda volver a entrar en
modo de programacin de bajo voltaje. La nica seal que le har
recordar al pin RESET su funcin primigenia es la tensin de 12 V, es
decir, necesitaremos de un programador de alto voltaje.Interfaces
de programacin 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 tambin denominar modos
de programacin.Interface de programacin SPI Al ser esta la
principal interface de programacin 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 trminos ISP y SPI. ISP es la sigla de In System
Programming y hace referencia al tipo de programacin realizada
estando el AVR en su circuito de aplicacin, es decir, no es
necesario quitarlo de all y colocarlo en el hardware del
programador. Alguna gente le suele llamar tambin ICSP, por In
Circuit Serial Programming, que viene a significar lo mismo, pero
se usa ms con otros microcontroladores como los PICs. Adems ese
trmino es marca registrada de Microchip. SPI es la sigla de Serial
Port Interface, que es un bus de comunicacin serial, as como lo son
los buses RS232, I2C o USB. Los microcontroladores suelen tener un
mdulo hardware tambin llamado SPI que facilita las comunicaciones
con otros dispositivos usando este protocolo. En los AVR ese mismo
mdulo SPI sirve tambin como su interface de programacin.
Tcnicamente hablando todas las interfaces de programacin permiten
programar el AVR estando en su circuito de aplicacin (In System),
as que todos los programadores podran merecer el calificativo de
ISP. Debemos tener eso en cuenta porque hasta en la documentacin de
Atmel es frecuente hablar de programacin ISP como sinnimo de la
interface SPI. 15. Las comunicaciones por el puerto SPI se llevan a
cabo en una relacin 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 lneas de interface: MISO,
MOSI, SCK y SS. Para la programacin del AVR sin embargo se omite la
lnea SS. En su lugar se usa el pin de RESET y en algunos casos
hasta una seal de reloj para AVR puede ser necesaria. En este
momento no vamos a profundizar ms sobre el control del bus SPI,
pero s vamos a explicar la funcin de sus pines para que al menos
sepamos cmo conectarlos cualquiera que sea el AVR o el programador
que usemos.Lneas de interface de la programacin SPI. MISO. Master
Input Slave Output. Es la lnea 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 lnea por
donde al maestro enva datos al esclavo, es decir, en el maestro el
pin MOSI es salida y en el esclavo es entrada. SCK. Serial Clock.
Es la seal de reloj. En la comunicacin 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 seal se establece la velocidad de
transferencia de datos. Segn el diseo 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 seal no forma parte del bus SPI pero siempre debe haber una
lnea con el mismo nombre que sale del programador y va al pin RESET
del AVR a programar para iniciar el modo de programacin. Encuentras
ms informacin sobre la funcin de este pin en la seccinProgramacin
de alto voltaje HVSP y HVPP. XTAL1. Esta seal es necesaria solo si
el AVR est configurado para trabajar con reloj externo. De fbrica
no lo est. En un AVR nuevo los fuses de reloj seleccionan el
oscilador RC interno, as que la primera programacin no necesita
esta seal. Pero desde el principio lo comn es reprogramar los fuses
de reloj para seleccionar una fuente de reloj externa, como un XTAL
o resonador cermico. Solo en esos casos debemos usar la seal XTAL1.
SS significa Slave Select. En principio esta seal sirve para que el
maestro seleccione el esclavo con el que entablar la comunicacin,
pues en una red SPI puede haber varios esclavos. Sin embargo, no
participa en la programacin porque el AVR target da por hecho que
es el esclavo elegido desde el momento en que entra en modo de
programacin. 16. VCC y GND. Naturalmente son los pines de
alimentacin del AVR. La seal VCC suele a veces aparecer con el
nombre de VTG, por Voltage of Target. Hay dos tipos de conectores
para la interface de programacin SPI. El grande es de 10 pines
llamadoISP10PIN. Es un conector antiguo que todava se encuentra en
la placa STK500 e incluso en la STK600pero solo por compatibilidad.
Aunque parece mejor para el diseo 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
programacin SPI.Conectores ISP6PIN e ISP10PIN de la interface de
programacin SPI.Interface de programacin TPI TPI quiere decir Tiny
Programming Interface es decir es una interface de programacin de
los "tiny" AVR. Con eso podramos pensar que est presente todos los
tinyAVR, pero no. La mayora de lostinyAVR utilizan las dos
interfaces de programacin SPI y HVSP. La interface TPI solo est
disponible en los ATtiny4, ATtiny5, ATtiny9, ATtiny10, ATtiny20,
ATtiny28 y ATtiny40. Por otro lado, la documentacin 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 teora. Ellos tienen como 20 pines y sin embargo tambin
se programan va TPI. Como sea, la interface TPI utiliza dos lneas
de comunicacin llamadas TPIDATA y TPICLK, para datos y reloj,
evidentemente. Para la programacin tambin es necesaria la
intervencin del pin de RESET y segn el nivel de tensin que se le
aplique el tinyAVR puede entrar en dos modos de programacin: Si se
aplica 12V al pin RESET, el tinyAVR entra en modo de programacin 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 programacin
convencional (de bajo voltaje). Tambin en este caso tendremos
acceso al fuseRSTDISBL para configurar el pin RESET como pin PB3,
pero ya no 17. podremos devolverle su funcin de pin de RESET a
menos recurramos a la programacin de alto voltaje.Lneas de
interface de la programacin TPI. El conector que usa la interface
TPI es el mismo conector ISP6PIN visto arriba, solo que con
diferentes nombres de seal.Conector de la interface de programacin
TPI.Interface de programacin PDI Como su nombre indica PDI (Program
and Debug Interface) es la interface de dos lneas diseada por Atmel
con fines de programacin y depuracin exclusivamente para sus AVR de
la familia XMEGA. Adicionalmente los XMEGA tienen la interface
JTAG, tambin con propsitos de programacin y depuracin. Eso es todo;
ellos no tienen interface aWire ni mucho menos SPI ni TPI. Los
XMEGA tambin poseen fuses y lock bits para establecer diferentes
formas de operacin 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 programacin de alto voltaje. Las transferencias de
datos en una comunicacin PDI se rigen por un protocolo muy similar
al delUSART trabajando en modo sncrono. La seal de datos, llamada
DATA o PDI_DATA, es bidireccional y utiliza un pin dedicado del
XMEGA; en tanto que la seal de reloj, CLOCK o PDI_CLK, es siempre
controlada por el programador y est multiplexado con el pin RESET.
18. Lneas de la interface de programacin y depuracin PDI. El
conector que usa la interface PDI tambin es el mismo conector
ISP6PIN, pero con diferentes nombres de seal. Por eso el
programador AVRISP MkII utiliza el mismo conector para las
interfaces SPI, PDI y TPI.Interface de programacin JTAG JTAG tambin
es una interface de programacin y depuracin presente en los AVR32,
XMEGA y en losmegaAVR de 40 pines o ms. A diferencia de las
interfaces PDI y aWire, su principal modo de operacin siempre ha
sido la depuracin, quedando su funcin 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 programacin del AVR son: TMS. Test Mode Select. Indica el
estado el controlador Test. TCK. Test Clock. Es la seal de reloj.
TDI. Test Data Input. Es la lnea de entrada para las instrucciones
de datos o de comando. TDO. Test Data Output. La lnea por donde el
AVR enva los datos seriales.Lneas de la interface de programacin y
depuracin JTAG. El conector de la interface JTAG segn el estndar
IEEE incluye tambin dos pines de RESET: nSRSTque servira 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 mdulo TAP
puede regresar a su estado inicial manteniendo la lneaTMS durante 5
periodos de reloj. A veces 19. se usa la seal nTRST pero aplicada
al pin RESET del AVR para un RESET convencional. Eso es til no
directamente para llevar al AVR al modo de programacin 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 programacin o depuracin.Conector de la
interface de programacin y depuracin JTAG.Interface de programacin
aWire Es la interface de programacin y depuracin constituida por un
solo cable que tienen los AVR32 de pocos pines, aunque eso parezca
exagerado pues como mnimo los AVR32 tienen 48 pines. Lo que s es
seguro es que no est disponible en ningn AVR de 8 bits. A pesar de
su requerimiento mnimo, como interface de depuracin ofrece el mismo
alcance que JTAG. La nica seal, DATA, es bidireccional y en el
AVR32 corresponde al pin de RESET.Lneas de la interface de
programacin y depuracin aWire. 20. Conector de la interface de
programacin y depuracin aWire.Boot Loader Pongo el Boot Loader en
el primer lugar de la lista porque quiero que le demos especial
consideracin. 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
pginas despus de sta donde hallar una respuesta. Pero antes de
pensar en un programador deberamos saber que en el mundo de los AVR
el Boot Loader es la mejor opcin. Al menos es mi conclusin
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 intermediacin de ningn dispositivo programador y lo
graba en su memoriaFLASH. La transferencia se realiza por cualquier
interface disponible, siendo las ms comunes los puertos serial y
USB. La siguiente figura nos ayudar a entender su mecanismo de
funcionamiento.Esquema de la auto-programacin 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
ejecucin el CPU lee cada una de las instrucciones de esta memoria,
las decodifica y las lleva a cabo. Aunque aparece dividida en dos
secciones, fsicamente 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 llamaramos firmware de aplicacin. 21. Siendo el Boot Loader un
firmware tambin, significa que podemos tener dos firmwares en el
AVR. El firmware de aplicacin va en la Seccin de Aplicacin y el
firmware de Boot Loader, en laSeccin de Boot Loader. Cmo sabr el
AVR qu cdigo 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 aplicacin. De ser as, recibe
los datos y los graba en la seccin de Aplicacin, operando en lo que
podemos llamar modo de auto-programacin. Pero si no encuentra nada,
el CPU pasa a ejecutar el firmware de Aplicacin; operacin en modo
normal, por as decirlo. As como la memoria FLASH el Boot Loader
tambin permite programar la memoria EEPROM y el Byte de Lock bits.
Adems puede tener acceso de lectura a los fuses aunque no los puede
modificar. Cuando trabajamos con la auto-programacin dejamos de
lado ese trmino para introducir otros dos. El proceso de cargar un
firmware de aplicacin en el AVR mediante el Boot Loader se denomina
upload o subir. Y como el Boot Loader tambin 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 cdigo
del Boot Loader ocupa en la memoria FLASH lo descarta como opcin de
la mayora de los microcontroladores pequeos. Generalmente un Boot
Loader puede abarcar entre 1 kB y 2 kB de memoria. Para los tinyAVR
cuya FLASH anda por estos rangos no tendra sentido. En cambio para
los megaAVR cuyas memorias llegan hasta los 256 kB, el Boot Loader
apenas si se deja notar. El cdigo del Boot Loader debera 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
tamao 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 bendicin. Existen
algunos microcontroladores que ya traen un Boot Loader de fbrica,
pero en su gran mayora vienen vacos. El Boot Loader lo tenemos que
grabar como cualquier otro programa, con un dispositivo programador
convencional. Si nos vamos a dedicar a la programacin masiva de
microcontroladores, nos puede resultar poco prctico grabar el Boot
Loader primero y subir elfirmware de aplicacin despus. Sin duda en
esos casos sera mejor usar un programador para grabar el firmware
de aplicacin directamente. 22. Por otro lado, en los procesos de
aprendizaje y de desarrollo de proyectos, donde modificamos
constantemente el firmware de aplicacin, el uso del Boot Loader es
la mejor opcin. 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 ms difcil pero bien habr valido la pena
porque despus solo necesitaremos de un clic para subir un nuevo
firmware sin ni siquiera tener que desconectar nuestro circuito de
aplicacin.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
cdigo abierto, y para diferentes series de AVR. Aqu nos ocuparemos
brevemente de los ms reconocidos. AVR109 y Butterfly son trminos
sinnimos para identificar el mismo tipo de Boot Loader que se
presenta en la nota de aplicacin AVR109 de Atmel. Este Boot Loader
est escrito en C para los compiladores AVR IAR C y AVR GCC. Su
cdigo es de libre disposicin as que podemos compilarlo para
cualquiera de nuestros AVR con seccin 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
ms sobresaliente es AVR OSP, descrito en la nota de aplicacin
AVR911 de Atmel. Su nombre significa AVR Open Source Programmer, as
que tambin 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
versin para Windows de AVR OSP editada por Mike Henning. 23. Entono
del programa AVR-OSP II. Butterfly para ser ms precisos es una
adaptacin 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 adems del Boot Loader se puede
programar mediante las interfaces SPI yJTAG. Esta tarjeta ofreca
caractersticas 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 programacin 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
aplicacin del megaAVR.Tarjeta del Arduino. Al igual que la tarjeta
AVR Butterfly, el Arduino tambin posee un conector ISP6PIN para la
programacin SPI de su megaAVR. Es solo una alternativa, pues el
principal medio de su [auto] programacin sigue siendo el Boot
Loader. El Boot Loader del Arduino est basado en el protocolo de
programacin STK500 1.x. 25. El IDE del Arduino permite subir al
megaAVR el cdigo del firmware automticamente despus de compilar el
programa tan solo con presionar el botn Upload (ver la figura de
abajo). El usuario no tiene que saber dnde se encuentra el archivo
hex generado ni mucho menos conocer de los protocolos que operan
detrs del escenario. Genial!Entorno de Desarrollo Integrado del
Arduino. Empero a nosotros nos interesar saber que detrs 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 aplicacin Windows para AVRDUDE que permite usarlo para subir o
cargar el archivo hex al AVR del Arduino. Por lo visto arriba esto
parecera innecesario, pero resulta sumamente til cuando trabajamos
fuera del entorno del Arduino. El 26. programa se llama Xloader y
lo puedes encontrar en versin ms 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
fcilmente recompilable para cualquiermegaAVR con soporte de Boot
Loader, en especial de las series ATmegaXX4 y ATmegaXX8, que son
los usados en cursomicros.com. Tambin es posible compilarlo para
los XMEGA e incluso para los tinyAVR pero eso requerira de edicin
extra. Para los AVR con perifrico USB se usa el Boot Loader llamado
Caterina escrito por Dean Camera usando su librera LUFA. Hay una
caracterstica en el Boot Loader del Arduino que lo convierte en mi
favorito y es que su ejecucin es ntegramente controlada por el
software de la computadora. Con otros Boot Loaders como el del
AVR109 suele ser necesario presionar algn botn en el circuito del
AVR aparte del botn RESET para entrar en modo de autoprogramacin.
En el Arduino el reset se genera mediante el conversor USB-UART. A
decir verdad en algunas variaciones del Arduino s se requiere
presionar algn botn pero como todo el cdigo es abierto lo podemos
modificar a placer. Los cdigos de Boot Loader de Arduino estn en la
subcarpeta hardwarearduinobootloaders.Programador FTDI Los mdulos
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 desempeo como
programadores de AVR. Bueno, en realidad no hay ningn programador
llamado como tal. Denominamos as a los mdulos de comunicacin
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 mtodo 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 mdulos FTDI estn difundidos en dos formas: Como un
conversor USB - Puerto Serie y como un conversor USB-UART. Dos
ejemplos del primer grupo son los mdulos 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 lgicos
del Estndar RS232. Se comportan como autnticos puertos serie. Muy
buenos. Adems los circuitos de estos y otros productos similares
estn disponibles en su web. Conversores USB-UARTLos 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 seales disponibles. Muchas de ellas solo son un
legado de los antiguos mdems. 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 conversin de los niveles de voltaje. En lugar del DB9 poseen
un conector lineal que solo brinda las seales tiles para nosotros.
Para decirlo de otra forma, son pequeas tarjetas que bsicamente
unen las lneas del FT232RL a un conector USB por un lado y a un
conector plano por el otro. En las imgenes mostradas abajo puedes
ver que casi no tienen ms elementos que esos. Por eso a veces se
les llama tambin cables FTDI. En ingls un trmino muy extendido es
Breakout. As aparece identificado en los circuitos de las prcticas
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
tambin 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
seales 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 seal es DTR en el FDTI Basic y USB Serial
Lightpero RTS en el FTDI Friend. Esa es la diferencia crucial. Como
puente de comunicacin para transferencias de mensajes con la
computadora funcionan igual pues all solo intervienen TXD y RXD
adems 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.Mdulo 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 tensin TTL, la conexin con
el microcontrolador sera directa, sin resistencias, ni diodos zner
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 grabacin AVRDUDE asume que a la
salida del puerto serie las seales tienen polaridad segn el estndar
RS232, esto es, invertidas respecto de las seales TTL. Y segundo,
que los programadores seriales como SI-Progo DASA usan las seales
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 difcilmente las dos a
la vez. Una alternativa para resolver estas dos contrariedades sera
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-UARTLos conversores USB-UART UM232R y
UM232H, de FTDI Chips. Afortunadamente tambin existe una solucin
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 aadir las caractersticas correspondientes de nuestro nuevo
programador que solo usa las seales de los adaptadores FTDI Basic o
FTDI Friend y con las polaridades debidas. Podemos incluirlo en
cualquier parte pero para mantener las categoras 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| avrdude -c ftdi
-p atmega324p -P ft0 U flash:w:main.hex:i-B 1 Por si no qued clara
la interface entre el mdulo FTDI y el AVR, abajo tenemos el
circuito a utilizar. Como se ve, la alimentacin del AVR proviene
del mismo mdulo FTDI. No es recomendable ponerle una fuente propia.
Si el AVR no tiene el pin AVCC pues no pasa nada, y si tiene varias
seales 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 fbrica viene as. Este mdulo 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 seal DTR. Incluye un pequesimo jumper en la parte
posterior para realizar esta maniobra. Otra opcin sera modificar de
nuevo el archivo avrdude.conf como lo hicimos arriba.Esquema para
programar un AVR con un Mdulo FTDI.Mdulo FTDI como programador Boot
Loader de Arduino Una tarjeta Arduino es en ltima instancia un
mdulo FTDI unido a un AVR. Pero no estn unidos como aparece justo
en la figura de arriba. En el Arduino el mdulo FTDI le sirve al AVR
en su funcin 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 aplicacin mediante el Boot Loader
del AVR. En el primer caso las lneas TXD y RXD se conectan con sus
homlogos 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
mdulo FTDI para cargar el nuevo programa del AVR interviene adems
de TXD y RXD la seal DTR, cuya funcin es resetear el AVR para 33.
que reinicie desde elBoot Loader. Para conocer los detalles de este
proceso puedes leer la seccin 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 alimentacin
y la conexin de los pines relacionados a ella. Aqu el AVR siempre
trabaja con un XTAL de 16MHz.Esquema para programar un AVR con un
Mdulo 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 elmdulo FTDI (auto-programacin). Pero para que esto sea
posible primero el AVR debe tener grabado el programa del Boot
Loader. Esto ser sencillo si usamos el mdulo FTDI como programador
de interface SPI, estudiado antes. Luego el trabajo ser ms 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 prcticas de cursomicros.com. 35. Entorno del programa
Xloader.Programador SI-Prog o PonySer Los programadores de puerto
serie o paralelo se estn convirtiendo en herramientas obsoletas por
la casi extincin 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 manipulacin bit a
bit de los datos desde la computadora. No sern los ms veloces pero
s los ms fciles 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 algn
programador de AVR parecido al entraable JDM. Un sencillo pero
fiable y cmodamente portable programador de puerto serie que no
necesitaba de alimentacin externa. El programador ms cercano es el
tambin conocido en la comunidad PIC. Estamos hablando del viejo
superviviente SI-Prog, de Claudio Lanconelli, quiz ms 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 lneas
de programacin (parte inferior) y la que conforma la fuente de
alimentacin (parte superior). He puesto un conector ISP de 6 pines
estndar en vez del conector SIL que figura en el circuito original
y he ignorado la etapa de los zcalos para los AVR que all se
incluan. 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 alimentacin del
SI-Prog parte de los 3 diodos 1N4148 que toman corriente de las
lneas del puerto serie y recargan el capacitor C3. Si el jumper est
cerrado como se ve en la figura tambin participa el capacitor C4
para acumular en la entrada del LM2936Z-5 hasta 12V tensin. El chip
LM2936Z-5 es un regulador parecido al 7805 que a su salida entrega
una tensin de 5V, aunque no deberamos reemplazarlo pues el 7805 no
es LDO. De este modo el circuito obtiene su alimentacin del puerto
serie. Pero si vamos a usar una fuente de alimentacin externa
debemos mover el jumper a la otra posicin. En este caso s podemos
pensar en un 7805 como alternativa. Si quitamos toda la etapa de
alimentacin y nos quedamos con las lneas bsicas de programacin, el
circuito se reduce a su forma ms difundida. Ahora el programador
SI-Prog es netamente ISP porque su fuente de alimentacin 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 mayora de los programas con entorno grfico
para Windows, este software ha quedado desactualizado. Soporta
pocos dispositivos, la mayora antiguos modelos, y difcilmente
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 grfico que lo soportan. Podra citar una lista
de ellos, con caractersticas tan diversas como sus limitaciones,
pero sera en vano, un desperdicio de tiempo tratando de explicar a
quines 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 grfico 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 tambin es reconocido por su alias
ponyser. Por eso tambin se le conoce as. 39. Programadores seriales
bit bang soportados por AVRDUDE. De hecho, y como podremos
comprobar despus, todos los programadores bit bang de puerto serie
tienen la misma estructura de circuito. Esto a veces puede hacer
confusa su identificacin. Por ejemplo, es frecuente encontrar
pequeas 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 cmo se llama. Todo lo que necesitamos es
conocer la relacin de las seales MISO, MOSI, SCK y RST con los
pines del conector DB9. Con estas correspondencias podemos
identificarlo fcilmente. 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,
podramos 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 mdulo
de este tipo es recomendable que leas la pgina delprogramador
FTDI.Programadores DASA Existen 3 programadores de esta serie:
DASA,DASA2 y DASA3. Son programadores que no tienen alimentacin
propia ni derivada del puerto serie y tampoco una seal 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. Seran idnticos de no ser por el diodo
1N4148, que en muchas ocasiones tambin suele aparecer en elSI-Prog,
y porque la conexin de los pines TXD yDTR en el conector DB9 est
permutada.Circuito del programador DASA3. El circuito del
programador DASA2 es ms parecido aun. De hecho podramos decir que
es el mismo SI-Prog reducido. Supongo que por eso no es considerado
por el programa AVRDUDE. Poner su circuito por tanto sera
desperdiciar espacio. La primera versin de esta familia era el
programador DASA. Es el programador serial ms simple de todos. Yo
creo en el adagio kiss pero este circuito no me da mucha confianza.
Me atrevera a armarlo solo como programador provisional. Observa
que nuevamente ha cambiado la conexin de las lneas en el conector
DB9.Circuito del programador DASA. 42. El programador DASA (fuente:
make.larsi.org). Podramos seguir mostrando otros programadores de
puerto serie pero solo descubriramos 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 conexin de seales en el conector
DB9 deben ser aadidas en el archivo avrdude.conf, que utiliza
AVRDUDE. Ms adelante veremos cmo 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 identificacin
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 tuviramos 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,
podramos 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 mdulo de este tipo es
recomendable que leas la pgina delprogramador FTDI.Programador
USBasp USBasp deber por mucho el programador USB para AVR ms
vendido y tambin el ms 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 adems 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 caractersticas entres
pros y contras. Programador usbaspProgramadores USBasp. Soporta las
interfaces de programacin SPI y TPI. Con SPI podemos programar
todos losmegaAVR y la gran mayora de los tinyAVR. Con TPI cubrimos
el pequeo restante de los tinyAVR. Recordemos que la programacin
TPI tambin puede realizarse en alto voltaje, pero ese modo no es
manejado por USBasp. Fue diseado por Thomas Fischl utilizando la
librera V-USB de Christian Starkjohann que administra todo el
protocolo de comunicacin 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
librera V-USB trabaja en bit banging (bit a bit), las
transferencias de datos se dan a la mnima velocidad del protocolo
USB, esto es, 1.5 Mb/s (modo Low Speed). A pesar de ello la
velocidad de programacin alcanza los 5 kB/s. Es bastante rpido. Usa
un jumper para activar la alimentacin Vcc al AVR target y otro para
frenar cuando sea necesario la velocidad de programacin. Mover
jumpers cada vez que vamos a programar un AVR podra 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 lnea 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 estn incompletos en especial por las
ventanas de configuracin de los fuses. Inicialmente eso me
disgustaba pero luego vi que los fuses no los programaba ms 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
ningn inconveniente en Mac OS X y Linux. En Windows requiere la
instalacin del driver open source para USB libusb. No tendra 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 librera 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 debera hacer mi aporte para
remediar sus supuestas deficiencias. De hecho lo pens al principio
pero luego comprend por qu otros no lo haban hecho antes. Por qu?
Si echamos un vistazo al sitio web oficial de USBasp, quiz nos
sorprenda encontrar adems del diseo original las distintas
adaptaciones que hicieron muchos usuarios. Por qu tantas
versiones?, Sern igualmente fiables?, Cul me conviene construir? No
es fcil responder a estas preguntas para alguien que pretende ser
imparcial. As que en vez de dar un s, no, ste o aqul, vamos a hacer
un pequeo viaje para conocer las caractersticas 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 enva
la computadora. Esto se consigue usando la interrupcin INT0 para
detectar los cambios de nivel en la lnea D+. Se puede editar
fcilmente el firmware del AVR para conectar las lneasD+ y D- a
otros pines del AVR (siempre que 47. pertenezcan al mismo puerto),
pero la conexin deD+ al pin INT0 debe permanecer. En realidad, segn
la librera 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 conexin pero con una edicin un poco ms
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 tratara 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 tensin muy altos. Por eso el USB fue diseado para que
sus lneas de datos D+ y D-manejen seales 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 estn alimentados
por Vcc = 5V. Pero como el USBasp no lleva uno de esos, tiene que
usar diodos zner. Nota que si fueran de 3.3V, estaramos 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 tensin e impedancias que
el estndar USB puede aceptar.Interface USB del programador USBasp.
Uno de los diseos que me llam la atencin rpidamente por su PCB
compacto (solo tiene 3 discretos puentes) era el de J.A. de Groot.
Pero me desilusion al percatarme de que le haba quitado los diodos
zner. Yo no habra hecho eso, pues la especificacin 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 zner. 48. Programador USBasp modificado por J.A. de
Groot.La interface SPI En el circuito del USBasp original las lneas
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) tambin lo haga o, de lo contrario, no se podrn
entender. Hasta all no parece haber nada novedoso, verdad?Interface
SPI del programador USBasp. 49. Sin embargo, varias personas
decidieron interponer elementos en las lneas 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. Adems 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 crticos, no significa que tengamos que llegar a esos
extremos). En algunos rediseos como el de Fisch und Fischl GmbH y
Thomas Pfeifer se han puesto resistencias con el propsito adicional
de prevenir cortocircuitos. En otros diseos como Pawel Szramowski o
yuki-lab.jp han ido ms 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 programacin dejando que
AVR target trabaje con su propia alimentacin (inferior a 5V).
Programador usbaspInterface 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
programacin del USBasp. Por defecto, cuando este jumper est
abierto, la velocidad del bus SPI se establece a Fsck = 375kHz
(frecuencia de la seal SCK). En la gran mayora 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 condicin 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 va hardware,
cerrando el jumper Slow SCK, y por la va 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 programacin 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-programacin. Los programadores USB suelen tener un jumper
similar para permitir la actualizacin automtica de su firmware,
pero este no es el caso. En el USBasp la actualizacin o la primera
grabacin del firmware 51. es manual. Si queremos hacerlo, debemos
grabar el AVR del USBasp con otro programador. Solo en esa ocasin
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 lneas Vcc del
programador USBasp y del circuito de aplicacin (target). Aunque eso
te parezca obvio, debes notar que si el circuito target tiene su
propia alimentacin activada, el jumper cerrado podra dejar el
puerto USB daado. El USB en este caso est configurado para brindar
alimentacin [al USBasp y al circuito target inclusive]; no para
recibirla. As que antes de cerrar el jumper, es recomendable apagar
la alimentacin 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 alimentacin es til cuando
sta tiene un valor inferior a 5 V. Recordemos que esto requiere la
adaptacin de las lneas del bus SPI con buffers o al menos con
resistencias en serie. Para ms informacin ver la interface SPI.Los
diodos LED Son elementos bsicamente 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
grabacin del AVR. Desde el firmware es posible reubicarlos as como
editar su funcin. Yo por ejemplo modifiqu el cdigo para que el LED
verde se encienda tras la correcta enumeracin del programador, o
sea cuando la computadora lo haya reconocido correctamente. Tambin
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 tamao el programador necesitar un cable para
conectarse a la computadora, se usar un conector de recepcin de
tipo B estndar (ese que tiene forma de cajita y es el ms usado) o
micro (demasiado pequeo). Aunque los conectores mini ya no estn
contemplados en especificacin 3.0 del USB, todava se encuentran en
el mercado y son muy populares en dispositivos porttiles. Pero si
el programador es muy pequeo 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 usbaspAdaptaciones del USBasp de Fabio Baltieri
(izquierda) y Sven Hedin (derecha). Los dos diseos se ven muy
parecidos, uno ms 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. Adems de las lneas de programacin propias de la
interface SPI (MISO, MOSI, SCK, RST) y de alimentacin (VCC y GND),
estn conectadas las lneas de transmisin TXD y recepcin RXD del
USART. El USART sirve para comunicarse con la computadora por el
puerto serie. El autor, Thomas Fischl, la puso para la depuracin
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 lneas muertas,
de modo que pueden prescindir de ellas. Sin las lneas del USART
basta con un conector de 6 pines para el programador.Lneas 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 todava 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 diseadores 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 versin through hole.
Recuerdo haber visto tambin el programador de yuki-lab.jp con un
conector ISP6PIN.Los zcalos Para ser sincero, yo era de los que
venan del mundo de los PIC y tena la casi viciosa costumbre de
utilizar un programador con zcalo donde colocar el PIC para despus
54. retirarlo y llevarlo al circuito de aplicacin. Con los AVR me
deshice definitivamente de esa prctica. Luego entenders por qu.
Programador usbaspProgramadores USBasp con zcalos. Un turco de
nickname gevv arm un USBasp con zcalo 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 zcalo; es el de la imagen derecha. Es
uno de mis anhelos llegar algn da a Turqua, 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
inters en su programador. El programador de la imagen izquierda es
la adaptacin de Matthias Grner utilizando zcalos ordinarios de 28 y
40 pines. No tiene conector ISP para programar los AVR que no
quepan en sus zcalos. Si al igual que a m, no te gusta ninguno de
los dos programadores mostrados, puedes rehacer el tuyo propio segn
tus preferencias. Con el firmware y el circuito a tu disposicin
solo necesitas conocer dos cosas: Las seales del programador MOSI,
MISO, SCK y RST deben ir a los pines del AVR con el mismo nombre.
Se da por hecho la conexin de todos los pines de alimentacin GND,
VCC y, si existe, tambin AVCC. Puedes encontrar informacin
adicional en la seccin interface de programacinSPI. El modo de
programacin es una de las formas de trabajo del AVR, y para que
trabaje el AVR necesita de una seal de reloj que puede ser interno
o venir del exterior. Cuando el AVR es nuevo su reloj es el
circuito RC interno. Despus 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 sera generar
una onda cuadrada peridica en el AVR del programador y aplicarla al
55. pinXTAL1 del AVR target. Esta seal 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 cermico, circuito RC o simplemente una seal cuadrada en
el pin XTAL1; no significa que una configuracin de reloj impedir el
funcionamiento del AVR con la otra fuente de reloj externa, solo
que quiz no ser la mejor opcin. Un programador con zcalos puede ser
realmente til cuando nos dedicamos a la programacin en serie de
microcontroladores. Las pocas veces que tuve que hacerlo fue
utilizando microcontroladores de 28 o 40 pines (comprndolos en
cantidades, los microcontroladores pequeos 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
zcalo, sera con un ZIF para los AVR de 28 y 40 pines. En el
hardware puse un ATmega88 SMD para reducir el tamao de la PCB y en
el firmware configur el Timer2 para generar una onda cuadrada de
2MHz como reloj del AVR target. Programador usbaspProgramador
USBasp con zcalo 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 tendrs un microcontrolador, un
programador, un conversor USB-UART (puerto serie para tu laptop) y
hasta una fuente de alimentacin 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 programacin SPI (ISP por
antonomasia). Describamos algunas de sus caractersticas: 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 alimentacin
proviene del puerto USB. Tambin puede suministrar alimentacin 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 programacin de 1kB/s. Para tener una referencia
prctica, los programas de cursomicros son de 2kB en promedio, as
que grabarlos en el AVR tomara 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 limitacin y por
el costo. Este programador no est disponible comercialmente en
versin 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 usbaspVistas exterior e interior del
programador USBtinyISP (fuente: ladyada.net). Las lneas de la
interface de programacin SPI del USBtinyISP se renen en los dos
conectores estndar: 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 alimentacin (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 alimentacin, lo cual es deseable cuando su nivel es
diferente de 5 V. Actualmente el USBtinyISP se encuentra en su
versin 2.0. La diferencia notoria respecto de la versin 1.0, aparte
de algunos pequeos ajustes en el firmware, est en el buffer
74AHC125Ncolocado en las lneas de programacin MISO, MOSI, SCK y
RST, del hardware. Adems de aislante, este CI sirve de puente entre
las seales 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 versin 1.0 en lugar de los buffers las lneas de
programacin se aislaban con resistencias de 1.5k. En teora, tambin
permiten la comunicacin entre dos microcontroladores que operan a
diferente nivel de Vcc, pero algunos dicen que en la prctica no es
una interface muy fiable.Circuito del programador USBtinyISP,
versin 2.0. 58. Circuito del programador USBtinyISP, versin
1.0.Construccin de un USBtinyISP El programador USBtinyISP es open
source. Todos los archivos estn disponibles en la web de su autora,
www.ladyada.net. Como no pasa por muchas actualizaciones aqu estn
algunas rplicas, actualizadas a noviembre de 2012. Circuito y PCB
en Eagle. (Versin 2.0) Firmware del microcontrolador ATtiny2313.
(Versin 2.0) Circuito y PCB en Eagle. (Versin 1.0) Firmware del
microcontrolador ATtiny2313. (Versin 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 zcalo en vez del AVR del programador. Aqu
terminaramos si el programador no se basara en un microcontrolador.
De hecho, si compraste el kit de ensamblaje deadafruit, coloca el
ATtiny2313 en el zcalo y ya puedes empezar a usar tu
programadorUSBtinyISP. Quienes estn armando su programador con
componentes propios, debern enfrentarse a la siguiente parte.
Programar el AVR del programador usando otro programador. Esta fase
puede ser la ms tediosa. Si al inicio nos cuesta conseguir ese otro
programador, despus nos quebrar la paciencia usarlo con AVRDUDE. Si
ya ests 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
pginawww.ladyada.net/make/usbtinyisp/make.html de su web.
Desafortunadamente Limor solo gua durante la primera etapa. Y lo
que para muchos puede caer como baldazo de agua fra, nos pide que
no busquemos ayuda sobre la grabacin del firmware en su foro. ?
Debe ser porque la respuesta involucra mltiples 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 enumeracin 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 podramos ejecutar:>avrdude c
usbtiny p atmega324p U flash:w:main.hex:i El LED rojo se enciende
durante el proceso de grabacin. La instalacin 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 programacin estndar 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
aplicacin que hace la conversin del protocolo en la computadora.
Para decirlo burdamente, se trata de un parche que engaa a Atmel
Studio 6 hacindole 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 calibracin.
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. Adems la
calibracin del circuito RC interno tambin se puede hacer en tiempo
de ejecucin, es decir, podramos aadir un par de lneas 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 programacin. El USBtinyISPacepta los comandos para
cambiar la velocidad de programacin 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
aplicacin 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 perifrico 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 libreras de USB software. Son libreras
optimizadas a nivel ensamblador que manejan las rutinas mnimamente
necesarias del protocolo USB. Tenemos por ejemplo, la librera de
Igor Cesko explicada en la nota de aplicacinAVR309 de Atmel. Otra
librera, con mejor soporte y actualizacin, es VUSB (acrnimo de
Virtual USB), de Christian Starkjohann. Es la misma librera 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 caractersticas son tambin
apreciables en otros programadores: se alimenta desde el puerto
USB, posee buffers en las lneas de programacin 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 programacin) similar al
USBasp. El firmware del programador AVR Doper est basado en el
protocolo de programacin STK500v2de Atmel y como tal puede
programar todos los megaAVR y la mayora de los tinyAVR. El
protocolo original maneja las tres interfaces de programacin: SPI,
HVSP y HVPP, de los cuales AVR Doper acepta los dos primeros.
Utiliza un conector de 10 pines para la programacin SPI que, con
algunas variaciones, todava es compatible con el estndar de Atmel.
Para la programacin de alto voltaje dispone de dos zcalos para los
[tiny] AVR de 8 y 14 pines. Est