Los microcontroladores son circuitos integrados programables que contienen una unidad de procesamiento, memoria y puertos de entrada/salida en un solo chip. Pueden programarse para controlar una amplia variedad de tareas en dispositivos electrónicos como computadoras, electrodomésticos, teléfonos y más. Los microcontroladores más comunes son los PIC de Microchip y los AVR de Atmel, que se utilizan ampliamente debido a su bajo costo, facilidad de uso y soporte de software gratuito.
What is Microcontroller, Microcontroller vs Microprocessor, Development/Classication of microcontrollers, Harvard vs. Princeton Architecture, RISC AND CISC CONTROLLERS
Features of RISC, Microcontroller for Embedded Systems
10 x86 PC Embedded Applications, Choosing a Microcontroller
Criteria for Choosing a Microcontroller, Mechatronics, and Microcontrollers, A brief history of the PIC microcontroller, PIC Microcontrollers, Feature: PIC16F877, Simplied Features.
Addressing mode and instruction set using 8051logesh waran
1. Immediate addressing mode:
In this type, the operand is specified in the instruction along with the opcode. In simple way, it means data is provided in instruction itself.
Ex: MOV A,#05H -> Where MOV stands for move, # represents immediate data. 05h is the data. It means the immediate date 05h provided in instruction is moved into A register.
2.Register addressing mode:
Here the operand in contained in the specific register of microcontroller. The user must provide the name of register from where the operand/data need to be fetched. The permitted registers are A, R7-R0 of each register bank. Ex: MOV A,R0-> content of R0 register is copied into Accumulator.
3. Direct addressing mode:
In this mode the direct address of memory location is provided in instruction to fetch the operand. Only internal RAM and SFR's address can be used in this type of instruction.
Ex: MOV A, 30H => Content of RAM address 30H is copied into Accumulator.
4. Register Indirect addressing mode:
Here the address of memory location is indirectly provided by a register. The '@' sign indicates that the register holds the address of memory location i.e. fetch the content of memory location whose address is provided in register.
Ex: MOV A,@R0 => Copy the content of memory location whose address is given in R0 register.
5. Indexed Addressing mode:
This addressing mode is basically used for accessing data from look up table. Here the address of memory is indexed i.e. added to form the actual address of memory.
Ex: MOVC A,@A+DPTR => here 'C' means Code. Here the content of A register is added with content of DPTR and the resultant is the address of memory location from where the data is copied to A register.
What is Microcontroller, Microcontroller vs Microprocessor, Development/Classication of microcontrollers, Harvard vs. Princeton Architecture, RISC AND CISC CONTROLLERS
Features of RISC, Microcontroller for Embedded Systems
10 x86 PC Embedded Applications, Choosing a Microcontroller
Criteria for Choosing a Microcontroller, Mechatronics, and Microcontrollers, A brief history of the PIC microcontroller, PIC Microcontrollers, Feature: PIC16F877, Simplied Features.
Addressing mode and instruction set using 8051logesh waran
1. Immediate addressing mode:
In this type, the operand is specified in the instruction along with the opcode. In simple way, it means data is provided in instruction itself.
Ex: MOV A,#05H -> Where MOV stands for move, # represents immediate data. 05h is the data. It means the immediate date 05h provided in instruction is moved into A register.
2.Register addressing mode:
Here the operand in contained in the specific register of microcontroller. The user must provide the name of register from where the operand/data need to be fetched. The permitted registers are A, R7-R0 of each register bank. Ex: MOV A,R0-> content of R0 register is copied into Accumulator.
3. Direct addressing mode:
In this mode the direct address of memory location is provided in instruction to fetch the operand. Only internal RAM and SFR's address can be used in this type of instruction.
Ex: MOV A, 30H => Content of RAM address 30H is copied into Accumulator.
4. Register Indirect addressing mode:
Here the address of memory location is indirectly provided by a register. The '@' sign indicates that the register holds the address of memory location i.e. fetch the content of memory location whose address is provided in register.
Ex: MOV A,@R0 => Copy the content of memory location whose address is given in R0 register.
5. Indexed Addressing mode:
This addressing mode is basically used for accessing data from look up table. Here the address of memory is indexed i.e. added to form the actual address of memory.
Ex: MOVC A,@A+DPTR => here 'C' means Code. Here the content of A register is added with content of DPTR and the resultant is the address of memory location from where the data is copied to A register.
This presentation gives an overview of the PIC micro-controllers. Additionally, it describes the advantages, disadvantages and applications of these micro-controllers. It also explains real-world projects that are possible using the PIC micro-controllers.
In this presentation we can learn about basic concept of Instruction set, Byte Oriented Instructions, Bit Oriented instructions, Literal Instructions clearly.
Communication protocols in Embedded Systems. This presentation focused mainly on lower level protocols. Ideal for the beginner to build understanding on these protocols like I2C, USB, SPI etc.
This presentation gives an overview of the PIC micro-controllers. Additionally, it describes the advantages, disadvantages and applications of these micro-controllers. It also explains real-world projects that are possible using the PIC micro-controllers.
In this presentation we can learn about basic concept of Instruction set, Byte Oriented Instructions, Bit Oriented instructions, Literal Instructions clearly.
Communication protocols in Embedded Systems. This presentation focused mainly on lower level protocols. Ideal for the beginner to build understanding on these protocols like I2C, USB, SPI etc.
Introduccion a los Sistemas Embebidos - 4to Contreso de Electronica, Control y Telecomunicaciones - Universidad Distrital Francisco Jose de Caldas - Facultad Tecnologica - Bogotá Colombia
Técnicas para la localización de averías en los sistemas digitalesJomicast
Descripción de las técnicas y fases de localizacion de averias en equipos y circuitos digitales. Desde su detección, diagnostico y localización de la avería hasta su prueba y verificación y puesta en funcionamiento.
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Telefónica
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0xWord escrito por Ibón Reinoso ( https://mypublicinbox.com/IBhone ) con Prólogo de Chema Alonso ( https://mypublicinbox.com/ChemaAlonso ). Puedes comprarlo aquí: https://0xword.com/es/libros/233-big-data-tecnologias-para-arquitecturas-data-centric.html
En este documento analizamos ciertos conceptos relacionados con la ficha 1 y 2. Y concluimos, dando el porque es importante desarrollar nuestras habilidades de pensamiento.
Sara Sofia Bedoya Montezuma.
9-1.
Inteligencia Artificial y Ciberseguridad.pdfEmilio Casbas
Recopilación de los puntos más interesantes de diversas presentaciones, desde los visionarios conceptos de Alan Turing, pasando por la paradoja de Hans Moravec y la descripcion de Singularidad de Max Tegmark, hasta los innovadores avances de ChatGPT, y de cómo la IA está transformando la seguridad digital y protegiendo nuestras vidas.
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital, siendo este un componente electrónico, por tanto se ha desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento de datos.
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...espinozaernesto427
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta intensidad son un tipo de lámpara eléctrica de descarga de gas que produce luz por medio de un arco eléctrico entre electrodos de tungsteno alojados dentro de un tubo de alúmina o cuarzo moldeado translúcido o transparente.
lámparas más eficientes del mercado, debido a su menor consumo y por la cantidad de luz que emiten. Adquieren una vida útil de hasta 50.000 horas y no generan calor alguna. Si quieres cambiar la iluminación de tu hogar para hacerla mucho más eficiente, ¡esta es tu mejor opción!
Las nuevas lámparas de descarga de alta intensidad producen más luz visible por unidad de energía eléctrica consumida que las lámparas fluorescentes e incandescentes, ya que una mayor proporción de su radiación es luz visible, en contraste con la infrarroja. Sin embargo, la salida de lúmenes de la iluminación HID puede deteriorarse hasta en un 70% durante 10,000 horas de funcionamiento.
Muchos vehículos modernos usan bombillas HID para los principales sistemas de iluminación, aunque algunas aplicaciones ahora están pasando de bombillas HID a tecnología LED y láser.1 Modelos de lámparas van desde las típicas lámparas de 35 a 100 W de los autos, a las de más de 15 kW que se utilizan en los proyectores de cines IMAX.
Esta tecnología HID no es nueva y fue demostrada por primera vez por Francis Hauksbee en 1705. Lámpara de Nernst.
Lámpara incandescente.
Lámpara de descarga. Lámpara fluorescente. Lámpara fluorescente compacta. Lámpara de haluro metálico. Lámpara de vapor de sodio. Lámpara de vapor de mercurio. Lámpara de neón. Lámpara de deuterio. Lámpara xenón.
Lámpara LED.
Lámpara de plasma.
Flash (fotografía) Las lámparas de descarga de alta intensidad (HID) son un tipo de lámparas de descarga de gas muy utilizadas en la industria de la iluminación. Estas lámparas producen luz creando un arco eléctrico entre dos electrodos a través de un gas ionizado. Las lámparas HID son conocidas por su gran eficacia a la hora de convertir la electricidad en luz y por su larga vida útil.
A diferencia de las luces fluorescentes, que necesitan un recubrimiento de fósforo para emitir luz visible, las lámparas HID no necesitan ningún recubrimiento en el interior de sus tubos. El propio arco eléctrico emite luz visible. Sin embargo, algunas lámparas de halogenuros metálicos y muchas lámparas de vapor de mercurio tienen un recubrimiento de fósforo en el interior de la bombilla para mejorar el espectro luminoso y reproducción cromática. Las lámparas HID están disponibles en varias potencias, que van desde los 25 vatios de las lámparas de halogenuros metálicos autobalastradas y los 35 vatios de las lámparas de vapor de sodio de alta intensidad hasta los 1.000 vatios de las lámparas de vapor de mercurio y vapor de sodio de alta intensidad, e incluso hasta los 1.500 vatios de las lámparas de halogenuros metálicos.
Las lámparas HID requieren un equipo de control especial llamado balasto para funcionar
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.