curso micros

1115
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

Upload: josue-ramirez-tafolla

Post on 01-Jul-2015

3.321 views

Category:

Technology


27 download

DESCRIPTION

microchip atmel

TRANSCRIPT

  • 1. Qu son los microcontroladores y para qu sirven Respondiendo a la primera parte, un microcontrolador (C o MCU para abreviar) es un circuito integrado programable capaz de llevar a cabo una determinada tarea. El tipo de tarea vendra a ser la segunda parte. Si alguien nos preguntara qu es lo que hace una computadora personal, le responderamos de todo, segn el programa que le instalemos. De igual modo, un microcontrolador, como un micro computador" que es, puede hacer casi de todo (dentro de sus posibilidades, claro est), segn el programa grabado en su memoria. La analoga de un microcontrolador con una computadora va ms all de su programacin. Los microcontroladores son circuitos integrados que encierran en un solo chip un CPU (unidad central de procesamiento), las memorias ram y rom, los diversos perifricos especiales y los puertos de entrada/salida.Diagrama de bloques de un microcontrolador Si echamos un vistazo a nuestro alrededor, podremos notar que estamos cada vez ms rodeados de los microcontroladores: los perifricos de nuestras computadoras, como las impresoras, teclados, ratones, monitores y dems, tienen incorporados uno o ms microcontroladores. Los electrodomsticos, cada vez ms modernos, como equipos de sonido, televisores LCD, reproductores de DVD, etc., sin duda tienen microcontroladores que guan sus funciones. Los aparatos de entretenimiento como los reproductores de MP3 y MP4 porttiles tambin tienen microcontroladores en su parte cerebral. Los telfonos celulares, las cmaras digitales, etc., etc. De hecho, los microcontroladores se han infiltrado en todos los campos de la vida moderna, desde los pasatiempos hasta la

2. industria robtica, de telecomunicaciones, automovilstica... En fin, todava quieres saber para qu sirven?Caractersticas de los AVR Los productos estrella de Atmel son sus microcontroladores AVR. Comparado con otros microcontroladores, en distintos modelos por supuesto, pueden tener memoria de programa flash reprogramable, capacidad ISP (In System Programming), puertos configurables como E/S pin a pin, interfaces de comunicacin serial RS232 e I2C, mdulos generadores de onda PWM, etc. Yo pienso que una de las razones por las que la gente novel no empieza por los AVR es su set de 130 instrucciones; una cantidad que los hara desistir. Este hndicap inicial se invierte cuando se utiliza un compilador de alto nivel, ya que los AVR fueron diseados para un ptimo trabajo con el lenguaje C. Por si fuera poco, la gente del software libre ha desarrollado el poderoso compilador AVR GCC, el cual est disponible en sus versiones para Windows y Linux. As que, si de herramientas para desarrollar proyectos se trata, los AVR toman la delantera y se convierten en serios competidores de los actuales monarcas de Microchip. Las caractersticas de cada AVR son descritas con todo detalle en el captulo Arquitectura interna de los AVR.Microcontroladores con Arquitectura Harvard Como todos los microcontroladores modernos, los AVR fueron diseados con arquitectura Harvard. Con esta estructura los microcontroladores AVR disponen de dos memorias, una que contiene el programa y otra para almacenar los datos. De este modo el CPU puede tener acceso simultneo a ambas memorias utilizando buses diferentes. Ms especficamente, el CPU puede leer la siguiente instruccin de programa mientras est procesando los datos de la instruccin actual.Arquitectura Harvard de un microcontrolador Antiguamente los microcontroladores tenan una arquitectura Von Neumann. Como se ve en el diagrama de abajo, estos microcontroladores usaban una memoria nica que constitua tanto el segmento de memoria de programa como el de datos. Con un solo bus 3. de comunicacin entre dicha memoria y el procesador no es posible realizar diversos accesos a la vez.Arquitectura Von Neumann de un microcontroladorMicrocontroladores con Instrucciones RISC RISC es sigla de Reduced Instruction Set Computer. Tambin es una caracterstica propia de los microcontroladores actuales como los AVR. Estos microcontroladores cuentan con instrucciones sencillas y en un nmero mnimo. En muchos casos ello permite que la programacin en ensamblador sea una labor cmoda y est al alcance de todos. Sin embargo, cuando se desarrollan proyectos mucho ms complejos, el uso del lenguaje ensamblador se torna cada vez ms engorroso. Entonces se prefiere optar por los compiladores de alto nivel, para los cuales un set CISC no es obstculo. CISC significa Complex Instruction Set Computer y era un distintivo de los primeros microcontroladores que aparecieron en el mundo, los cuales estaban inspirados en los procesadores de los grandes computadores de la poca. Es complejo porque consta de muchas instrucciones, complicadas y difciles de recordar a la hora de programar en lenguaje ensamblador. Adems, al crecer el nmero de instrucciones tambin crecern los cdigos de las instrucciones, lo cual deriva en una mella en la eficiencia del microcontrolador.Caractersticas de los AVR Algunas de las caractersticas y recursos generales y comunes a casi todos los AVR son: Estn fabricados con tecnologa CMOS. Aunque los dispositivos CMOS son ms lentos que los TTL, son ideales para los microcontroladores porque requieren de menor consumo de energa. Es posible implementar sistemas que solo se alimenten de bateras corrientes. La tecnologa CMOS, como sabemos, tambin significa que los transistores, al ser mucho menos, ocupan mucho menor espacio en el chip. Memorias de programa (FLASH o ROM), memoria de datos esttica (SRAM) y memoria EEPROM internas. Puertos de E/S bidireccionales configurables independientemente pin por pin. Suministro de alta corriente en los puertos de E/S. 4. Timers. Temporizadores de alta precisin o contadores de pulsos externos. Tambin funcionan como generadores de ondas PWM (Pulse Width Modulation), particularmente tiles para controlar la velocidad de los motores DC. WatchDog. Monitoriza que el AVR funcione adecuadamente a lo que se esperaba y no se cuelgue. ISP (In System Programming). Permite realizar la programacin del AVR utilizando una interface serial con muy pocos pines. Fuses y Lock bits, permiten establecer un determinado modo de funcionamiento del AVR, como el tipo de oscilador que utilizar o si el cdigo grabado podr o no ser ledo despus de la programacin. Otros recursos, ms avanzados, son especficos a cada familia de AVR y pueden ser: Conversores Analgico-Digital, ADC. Para recibir seales del mundo analgico. Mdulos SPI. Para la comunicacin con dispositivos que utilizan el bus SPI. Mdulos TWI. Para la comunicacin con dispositivos que utilizan el bus I2C. USART, Transmisor Receptor Sncrono Asncrono Universal. Para comunicarse mediante los protocolos RS232 con cualquier dispositivo que tambin lo soporte. Por ejemplo, podemos conectar nuestro AVR al puerto serie del PC o a cualquier otro microcontrolador con USART. Mdulo Comparador Analgico. Nos puede ahorrar un OP-AMP y algo ms. Mdulo CAN. Para facilitarle al AVR su conexin con otros microcontroladores en una pequea red LAN con un protocolo robusto para trabajar en condiciones extremas. Mdulo USB. Casi todos los dispositivos digitales modernos presentan interface USB. Con esto podemos disear sistemas que no tengan nada que envidiarles. Etc., etc.Clasificacin de los AVR. Con qu AVR empezar? Cuando la gente va a trabajar con una nueva familia de microcontroladores como los AVR revisa primero su clasificacin para saber con cul puede empezar. Normalmente esta gente ha tenido alguna experiencia previa con otros microcontroladores como los PIC y suele pensar que para programar los AVR primero hay que empezar por lo ms bsico as como el PIC16F84 en el mundo de los PICs. y seguir avanzando con el PIC16F877 y luego con el PIC18F4550 y as... Bueno, no los puedo culpar, pues yo mismo pensaba as :) Aqu descubriremos por qu esa idea es errnea. Pero volviendo al tema, en el mundo de los AVR hay 4 familias de ellos: los tinyAVR, los megaAVR, losXMEGA y los AVR32. A la vez, puede haber varias decenas de AVR dentro de cada familia, pero las diferencias entre ellos son cada vez menores, como tener algunos pines de E/S ms o menos, tener 5. algo de memoria ms o menos, tener un Timer ms o menos, emplear otro tipo de memoria, y dems detalles de ese tipo.Clasificacin de los AVR (fuente: atmel.com).Los tinyAVR Son los "tiny toons" de los AVR, son los microcontroladores de Atmel con menos recursos de memoria y perifricos posibles. Sin embargo, son muy veloces, alcanzando a operar a 20 MIPS (millones de instrucciones por segundo). As que tampoco los deberamos subestimar y no se te vaya ocurrir equipararlos con un PIC16F84 o similar. Es tranquilamente factible usar un tinyAVR para conectarse al puerto USB de una computadora con todo el firmware implementado a nivel software. Por ejemplo,Limor Fried uso un ATtiny2313 para su programador USBtinyISP. Crees que un PIC16F84A podra hacer eso? Muy difcil, verdad? Yo no conozco aplicaciones similares ni siquiera con un PIC16F877A (Debe ser mi ignorancia). Inicialmente todos eran muy pequeos en tamao, por lo general de 8 pines, pero ltimamente estn apareciendo modelos que llegan a los 20 pines. Lo que vara muy poco es su set de cerca de 130 instrucciones, que es el mismo set base de los megaAVR y XMEGA. Es decir, que sean los ms limitados no significa que sean los ms fciles de programar.Los megaAVR. Popular e inapropiadamente conocidos como ATmegas, son los microcontroladores de 8 bits ms sobresalientes de Atmel. Detesto hacer estas comparaciones pero creo que son un buen referente para conocer de forma rpida los AVR. Pero bueno, yo dira que en general los megaAVR son como losPIC18 de Microchip. Claro que habr diferencias a favor y en contra: los PIC18 tienen mayor variedad de ejemplares (personalmente me confunde ms) y los megaAVR trabajan un poco ms veloz, y etc., etc... No voy a abrir un debate aqu. Todos los megaAVR tienen ms de 130 instrucciones, la mayora de 16 bits, y pueden llegar a velocidades de 20 MIPS. Sus memorias flash pueden alcanzar 256 kB para almacenas 6. hasta 128k instrucciones y sus memorias RAM pueden alojar hasta 4 kB de datos temporales. En general, en ellos se pueden encontrar casi todos los recursos hardware buscados en un microcontrolador de 8 bits, por eso se suele tomar de aqu algunos modelos como punto de partida de aprendizaje. Ahora bien, dentro de la familia de los megaAVR todava debemos distinguir dos grupos: Los clsicos megaAVR, que ahora Atmel denomina los viejos AVR, como los ejemplares cuyos nombres empiezan con AT90S (AT90S8535, AT90S2313, etc.) e incluso los no tan antiguos ATmega8, ATmega16, ATmega32, ... y dems. Los nuevos megaAVR. Bueno, eso de "nuevos" lo puse yo, por si acaso, solo para darles cierta distincin. No es que estos AVR hagan la gran revolucin por el hecho de que puedan trabajar hasta a 20 MIPS en lugar de los 16 MIPS de sus antecesores o porque sus Timers puedan generar 2 canales de ondas PWM cada uno. En cursomicros.com trabajamos con los nuevos megaAVR, en especial con los de la serie ATmegaXX8 yATmegaXX4, que son los megaAVR ms potentes que se pueden conseguir en empaques DIP de 28 y 40 pines respectivamente. Los otros megaAVR son ms grandes en cuanto a numero de pines y por tanto solo vienen en empaques TQFP, QFN, etc. Sus perifricos son bsicamente los mismos, solo suelen diferenciarse por tener ms puertos de E/S. No digo que lo viejos AVR no sirvan para nada. Si bien es cierto que pueden tener pequeos bugs (como cualquier microcontrolador de cualquier otra marca), los miles de proyectos disponibles enAVRfreaks.net e incluso los primeros Robots de Dale Heatherington demuestran que se pueden hacer maravillas con ellos. Yo solo digo que si podemos elegir entre un buen producto y otro un poco mejor, por qu no tomar el mejor?Los XMEGA Son microcontroladores de 8 bits pero con injertos de un tpico microcontrolador de 16 bits que elevan su performance hasta equipararse con los verdaderos microcontroladores de 16 bits como algunos dsPIC de Microchip. Solo que a diferencia de ellos, ningn Xmega viene en empaque DIP, lo cual dificulta su empleo para fines de experimentacin de un principiante. Los AVR XMEGA alcanzan velocidades de hasta 33 MHz pero solo operan a tensiones de hasta 3.3V. Su memoria de programa flash llega a 384 kB. Debido a su renovada arquitectura presentan muchas instrucciones nuevas pero su set bsico sigue siendo compatible con las 130 instrucciones de losmegaAVR y tinyAVR.Los AVR32 Son los microcontroladores AVR de 32 bits. Aqu hay dos grupos: los de la serie UC3 y los de la serieAP7. Son AVRs que para los noveles diseadores deberan ser descartados como punto de partida.Otros Microcontroladores 7. Hay muchas marcas de microcontroladores en el mercado. De ellas solo mencionar las que creo ms populares. A veces un mismo tipo de microcontrolador lo suelen proveer diversos fabricantes, por lo que sta no es una clasificacin estrictamente metdica En esta presentacin las descripciones se hacen teniendo en cuenta solo a los microcontroladores de 8 bits. En este sentido, salvo el caso peculiar de los Basic Stamp, personalmente no encuentro diferencias notables en el hardware interno de cada microcontrolador que me hagan optar por uno u otro para un proyecto en especfico. No puedo decir lo mismo sobre la disponibilidad de herramientas de desarrollo software y hardware.Los Microcontroladores PICmicro o PIC de Microchip Sin lugar a dudas, son los microcontroladores que han fascinado al mundo en los ltimos aos. Su facilidad de uso, comodidad y rapidez en el desarrollo de aplicaciones, abundante informacin y libre disposicin de herramientas software proporcionada por Microchip le han permitido ganar terreno rpidamente en el mercado de los microcontroladores a nivel mundial, hasta convertirse en los microcontroladores ms vendidos en la actualidad. Los buenos resultados que le dieron a Microchip la estrategia de proveer libremente a los usuarios de muchas herramientas software para el desarrollo de proyectos con sus productos hicieron que los otros fabricantes de microcontroladores tambin la adoptaran, aunque parece que la ventaja de Microchip en el mercado est ya marcada y tal vez se acente ms en el futuro.Por qu empezar con los PICS Por su fcil adquisicin. Se pueden conseguir en casi cualquier tienda de electrnica. Por su pequeo set de instrucciones, que no logra ser igualado por ningn otro microcontrolador. Es casi mgica la forma cmo se pueden implementar fcilmente casi cualquier algoritmo de programa con solo sus 35 instrucciones bsicas. Por su bajo costo. Los PICs son tal vez los microcontroladores ms baratos con las caractersticas que poseen. Por su fcil aprendizaje. Los PICs cuentan con el menor conjunto de instrucciones, y no por ello menos eficientes, que los convierten de lejos en los de mejor aprendizaje. Por la disponibilidad de herramientas. Las herramientas de hardware y software son de amplio alcance. Eso nos permitir empezar muy pronto con la experimentacin sin la preocupacin por mayores recursos.Los Microcontroladores de Freescale Hasta no hace muchos aos Motorola era uno de los fabricantes de microcontroladores con mayores ventas en el mundo. En esos tiempos el trabajo con microcontroladores era una actividad casi exclusiva de los considerados gures de la microelectrnica y que contaban con suficientes medios para acceder a las herramientas necesarias. Lo cierto es que con el tiempo Motorola empez a perder su liderazgo y ha preferido ceder la franquicia a Freescale. 8. Freescale contina con la produccin de microcontroladores basados en la arquitectura los viejos productos de Motorola y dotndoles de todo el arsenal tecnolgico de la actualidad. Salvo el prestigio legado no tienen nada nuevo en su hardware que no se pueda hallar en otros microcontroladores.Los Microcontroladores 8051 de Intel Intel era otro de los gigantes de los microcontroladores y Ps. Sus productos ms conocidos eran los famosos 8051, 80151 y 80251, pero actualmente ya no tiene inters en fabricarlos. En su lugar, fueron otras compaas, como Atmel, Philips, Infineon, Dallas, entre otros, las que tomaron la posta y fabrican algunas partes compatibles. Cabe mencionar que, salvo raras excepciones (como los PICs), el resto de los microcontroladores fueron inspirados en la arquitectura de estos procesadores de Intel. Por lo dems, no tiene caso especificar sus caractersticas porque no hay diferencias grandes respecto de los otros productos. En este sentido, no se puede afirmar qu marca de microcontrolador es mejor o peor. Es decir, si tomamos un microcontrolador cualquiera, siempre podremos encontrar un modelo de otro fabricante que pueda sustituirlo en una determinada aplicacin.Los Mdulos Basic Stamp de Parallax Los Basic Stamp nos son una nueva familia de microcontroladores; son mdulos montados sobre otros microcontroladores. Cuentan con un microcontrolador, un circuito oscilador, el circuito de interface con el puerto serie de la computadora, una memoria externa para almacenar el programa y un regulador de tensin; todo en una pequea tarjeta directa y/o fcilmente conectable a las computadoras. Una vez cargado el programa, el mdulo est listo para ser insertado en el circuito de aplicacin, incluso si est armado en un simple breadboard. Los programas se desarrollan ntegramente en un lenguaje Basic adaptado. El programa se carga en la EEPROM serial y el microcontrolador del Basic Stamp tiene que interpretarlo. Constitucin de un mdulo Basic stamp 9. Constitucin de un mdulo Basic Stamp Por ejemplo, el BS2sx mostrado arriba cuenta con un microcontrolador que est pre programado especficamente para trabajar como intrprete, esto es, para leer las sentencias de comando de la EEPROM serial, decodificarlas y ejecutar las instrucciones que representan. El microcontrolador no se puede reprogramar, viene as de fbrica. Aunque el intrprete opera a toda su potencia, la mayor parte del tiempo la "desperdicia" leyendo la EEPROM serial y decodificando sus comandos. Por tanto, el campo de aplicacin de los Basic Stamp es ms bien de carcter didctico y de entrenamiento; no son para grandes proyectos. Actualmente solo hay tres familias de Basic Stamp, cada una con muy pocas variantes, referidas bsicamente a la velocidad de operacin, capacidad de memoria y cantidad de pines de I/O. En realidad, el tercer grupo est formado por los Javelin Stamp, que interpretan cdigo Java en vez de Basic. Si despus de todo an tuvieras inters por estos mdulos, los circuitos de hardware y las herramientas software estn a libre disposicin en la web de la firma http://www.parallax.com/.Programadores de microcontroladores AVR Conseguir las herramientas software siempre es la tarea ms fcil comparada con la parte hardware. Podemos incluso trabajar con las versiones demo de los programas y ver por nosotros mismos cul nos resultar ms conveniente. Pero con el hardware no podemos darnos el lujo de ir probando los que queramos. As que debemos informarnos bien antes de gastar dinero en una compra inadecuada y/o de perder tiempo construyendo un programador que ms tarde nos pueda decepcionar. Pero como en ninguna otra marca de microcontrolador que haya conocido, los programadores de AVR son tan diversos que mucha gente novata se estanca buscando un 10. buen programador por no saber exactamente lo que quiere, gente que mientras ms busca en Internet, ms opciones y trminos nuevos encuentra que al finalmente queda ms confundida. As que si eres nuevo en esto, no pienses que la lectura de este extenso captulo puede frenar tu progreso. Todo lo contrario, despacio se llega lejos.Esquema de la programacin de un AVR. Para evaluar a priori la utilidad y calidad de un producto tenemos que comparar sus caractersticas. En el caso de un programador de AVR nosotros vamos a considerar su interface con la PC, su interface con el microcontrolador y el software de computadora con el que lo utilizaremos. La siguiente tabla nos muestra los programadores ms reconocidos. Por supuesto que existen muchos otros, pero como veremos luego, la mayora de ellos son variaciones o derivados de estos. Tabla Programadores de AVRProgramadorInterface con Interface con el AVR la PCSoftwareBoot LoaderUSB, COMUSART, USB,AVRDUDE, AVROSP, FLIP,...USBaspUSBSPI y TPIAVRDUDEUSBtinyISPUSBSPIAVRDUDE, Studio 6AVR DoperUSBSPI y HVSPAVRDUDE, Studio 6HVProgCOMSPI, HVSP y HVPPAVRDUDE, Studio 6 11. Tabla Programadores de AVRProgramadorInterface con Interface con el AVR la PCSoftwareAVRminiProgUSBSPI, JTAG, HVSP y HVPPAVRDUDE, Studio 6ArduinoISPUSBSPIAVRDUDEFTDIUSBSPIAVRDUDESI-ProgCOMSPIAVRDUDEDASACOMSPIAVRDUDEBSDLPTSPIAVRDUDEAVR910COMSPIAVRDUDE, AVROSPAVRISPCOMSPIAVRDUDE, Studio 6STK500COMSPI, HVSP, y HVPPAVRDUDE, Studio 6AVRISP MkIIUSBSPI, PDI y TPIAVRDUDE, Studio 6STK600USBSPI, PDI, TPI, TPI-HV, JTAG, aWire, HVSP y HVPPAVRDUDE, Studio 6AVR DragonUSBSPI, PDI, JTAG, aWire, HVSP y HVPPAVRDUDE, Studio 6JTAGICE MkIIUSBSPI, PDI, JTAG y aWireAVRDUDE, Studio 6AVR ONE!USBSPI, PDI, JTAG y aWireAVRDUDE, Studio 6Si te preguntas por qu en nuestra tabla de comparacin no hemos considerado la cantidad o el tipo de microcontroladores que cada programador soporta, es porque est indicado de forma implcita. Es decir, eso depende de la interface de programacin del AVR. Por ejemplo, si vamos a trabajar con un AVR XMEGA, debemos saber que ellos tienen interface de programacin PDI y por tanto en ese caso necesitaremos un programador como el AVRISP MkII. Simple, verdad? En principio s, pero los AVR pueden tener ms de una interface de programacin, unas con ms alcance que otras. Enseguida las explicamos. 12. Programacin Serial y Paralela La interface entre el programador y el microcontrolador puede ser Serial y Paralela. En la tabla de arriba la Interface paralela figura como HVPP. Todas las otras interfaces desde SPI hasta aWire son seriales. Las lneas de las interfaces seriales varan segn el protocolo. En cambio la interface paralela es nica y consta de 16 lneas sin contar los pines de alimentacin del AVR. Se deduce fcilmente que este modo solo est disponible en los AVR de bastantes pines, ms de 14 pines, si queremos establecer una regla.Programacin de Alto Voltaje HVPP y HVSP Antes hablamos de la dicotoma serie-paralela. Ahora describiremos los modos de programacin en alto y bajo voltaje as como de la relacin entre todos ellos. El alto voltaje es un modo de programacin adicional que solo est disponible en los AVR de las familias tinyAVR y megaAVR. Es un modo cuya interface de programacin involucra el pin de RESET, pues all donde se aplica el voltaje de 12V. Es el nico pin diseado para soportar ese nivel de tensin. La programacin de alto voltaje ofrece algunas opciones que no se pueden encontrar en la programacin de bajo voltaje como programar los fuses SPIEN (para activar o desactivar la programacin serial) y RSTDISBL (para rehabilitar el pin RESET). En la programacin de bajo voltaje el AVR trabaja con su alimentacin habitual de 5V mientras que el pin de RESET permanece en 0V. Este modo tiene algunas limitaciones como impedirnos el acceso al fuse SPIEN, para bien o para mal. Advertencia: en los algunos AVR (los ATmegaXX8 de nuestro curso) el pin de RESET puede ser programado por el fuse RSTDISBL para que trabaje como un pin de puerto ms, o sea, para que lo usemos para sacar o leer datos por l, aunque el precio a pagar puede ser muy alto. A eso se llamadeshabilitar el pin RESET. Podemos hacerlo desde la programacin de alto o bajo voltaje, pero para volver a habilitarlo el nico camino ser la programacin de alto voltaje. Me pregunto si puedes descubrir el porqu. La programacin serial puede ser de alto o bajo voltaje. En cambio, la programacin paralela (PP) es siempre de alto voltaje. Por eso es casi redundante su denominacin de HVPP (High Voltage Parallel Programming). La sigla HVPP aparece en el manual de Atmel Studio 6 solo una vez. Antes me desagradaba pero ahora me empieza a gustar. Las lneas de la interface paralela son 16 sin contar los pines de alimentacin del AVR. De aqu concluimos que este modo solo est disponible en los AVR de bastantes pines, ms de 14 pines, si queremos establecer una regla. 13. Lneas de interface de la programacin paralela, HVPP. La programacin serial de alto voltaje est presente en los tinyAVR que cuentan con 14 pines o menos. Si uno de estos AVR tiene interface de programacin SPI entones su programacin serial de alto voltaje se denomina HVSP (High Voltage Serial Programming). Igualmente parece poco apropiado limitar el calificativo porque los tinyAVR cuya interface de programacin es TPI tambin soportan el alto voltaje. Debe ser porque son muy poquitos :-(. Lo anterior no significa que la programacin HVSP vaya por el puerto SPI. Los pines de interface en este caso son otros, tal como se ve en la siguiente imagen.Lneas de interface de la programacin serial de alto voltaje, HVSP. Serial, paralelo, alto, bajo, ms o menos de 14 pines. S que todo esto suena algo enredado sobre todo si los modos e interfaces tambin se cruzan, pero se puede resumir y entender fcilmente as: En principio todo AVR debe tener al menos una programacin serial de bajo voltaje. Adicionalmente puede tener una programacin de alto voltaje, que debe ser paralela si el AVR tiene ms de 14 pines o serial si el AVR tiene 14 pines o menos. El pin RESET es determinante en el modo de operacin del AVR. Si aplicamos 12 V (vale entre 11.5V y 12.5V) al pin RESET, el AVR entra en modo de programacin de alto voltaje (serial o paralela, segn el AVR). 14. Si aplicamos 5 V al pin RESET, el AVR trabaja en operacin normal, o sea, empieza a ejecutar su programa. Si mantenemos el pin RESET en 0V, el AVR permanece en estado de RESET, es decir, no hace nada y se queda esperando a que el pin RESET valga 5V para iniciar su operacin normal o esperando a que lleguen las instrucciones para entrar en modo de programacin de bajo voltaje. Si ponemos el pin RESET en 0 V y luego iniciamos la secuencia de programacin, uno de cuyos paso incluye aplicar algunos pulsos al mismo pin RESET, entonces el AVR entra en modo de programacin de bajo voltaje (serial, obviamente). Aqu hay una leccin importante que debemos aprender. Algunos AVR tienen la capacidad de multiplexar la funcin del pin de RESET mediante el fuse RSTDISBL. Si dejamos este fuse con su valor de fbrica (sin programar), el pin RESET servir para resetear el AVR, o sea, con su funcin habitual. Pero si lo programamos, el pin RESET trabajar como un pin de puerto convencional. Es til si queremos ampliar nuestras lneas de E/S, pero observa que ello impedir que el AVR pueda volver a entrar en modo de programacin de bajo voltaje. La nica seal que le har recordar al pin RESET su funcin primigenia es la tensin de 12 V, es decir, necesitaremos de un programador de alto voltaje.Interfaces de programacin Aqu estudiaremos las interfaces SPI, TPI, PDI, JTAG y aWire, que podemos juntarlas a las de alto voltaje HVSP y HVPP examinadas previamente. A todas se les suele tambin denominar modos de programacin.Interface de programacin SPI Al ser esta la principal interface de programacin de los AVR tinyAVR y megaAVR, vamos a explicarlo largo y tendido, as que hecha esa salvedad espero que no te me desanimes. Bueno, empezaremos por distinguir entre los trminos ISP y SPI. ISP es la sigla de In System Programming y hace referencia al tipo de programacin realizada estando el AVR en su circuito de aplicacin, es decir, no es necesario quitarlo de all y colocarlo en el hardware del programador. Alguna gente le suele llamar tambin ICSP, por In Circuit Serial Programming, que viene a significar lo mismo, pero se usa ms con otros microcontroladores como los PICs. Adems ese trmino es marca registrada de Microchip. SPI es la sigla de Serial Port Interface, que es un bus de comunicacin serial, as como lo son los buses RS232, I2C o USB. Los microcontroladores suelen tener un mdulo hardware tambin llamado SPI que facilita las comunicaciones con otros dispositivos usando este protocolo. En los AVR ese mismo mdulo SPI sirve tambin como su interface de programacin. Tcnicamente hablando todas las interfaces de programacin permiten programar el AVR estando en su circuito de aplicacin (In System), as que todos los programadores podran merecer el calificativo de ISP. Debemos tener eso en cuenta porque hasta en la documentacin de Atmel es frecuente hablar de programacin ISP como sinnimo de la interface SPI. 15. Las comunicaciones por el puerto SPI se llevan a cabo en una relacin maestro-esclavo. En este caso el maestro es el programador y el esclavo es el dispositivo programado (AVR). Las transferencias de datos requieren de 4 lneas de interface: MISO, MOSI, SCK y SS. Para la programacin del AVR sin embargo se omite la lnea SS. En su lugar se usa el pin de RESET y en algunos casos hasta una seal de reloj para AVR puede ser necesaria. En este momento no vamos a profundizar ms sobre el control del bus SPI, pero s vamos a explicar la funcin de sus pines para que al menos sepamos cmo conectarlos cualquiera que sea el AVR o el programador que usemos.Lneas de interface de la programacin SPI. MISO. Master Input Slave Output. Es la lnea por donde el maestro recibe datos del esclavo, es decir, en el maestro el pin MISO es entrada y en el esclavo es salida. MOSI. Master Output Slave Input. Es la lnea por donde al maestro enva datos al esclavo, es decir, en el maestro el pin MOSI es salida y en el esclavo es entrada. SCK. Serial Clock. Es la seal de reloj. En la comunicacin SPI el reloj est siempre a cargo del maestro as que el pin SCK es salida en el maestro y entrada en el esclavo. Con esta seal se establece la velocidad de transferencia de datos. Segn el diseo del puerto SPI de los AVR, esta velocidad debe ser como mucho igual a la cuarta parte de la frecuencia del procesador. Por ejemplo, si un AVR trabaja con un XTAL de 8MHz, la frecuencia de SCK no debe superar los 2MHz. RESET. Esta seal no forma parte del bus SPI pero siempre debe haber una lnea con el mismo nombre que sale del programador y va al pin RESET del AVR a programar para iniciar el modo de programacin. Encuentras ms informacin sobre la funcin de este pin en la seccinProgramacin de alto voltaje HVSP y HVPP. XTAL1. Esta seal es necesaria solo si el AVR est configurado para trabajar con reloj externo. De fbrica no lo est. En un AVR nuevo los fuses de reloj seleccionan el oscilador RC interno, as que la primera programacin no necesita esta seal. Pero desde el principio lo comn es reprogramar los fuses de reloj para seleccionar una fuente de reloj externa, como un XTAL o resonador cermico. Solo en esos casos debemos usar la seal XTAL1. SS significa Slave Select. En principio esta seal sirve para que el maestro seleccione el esclavo con el que entablar la comunicacin, pues en una red SPI puede haber varios esclavos. Sin embargo, no participa en la programacin porque el AVR target da por hecho que es el esclavo elegido desde el momento en que entra en modo de programacin. 16. VCC y GND. Naturalmente son los pines de alimentacin del AVR. La seal VCC suele a veces aparecer con el nombre de VTG, por Voltage of Target. Hay dos tipos de conectores para la interface de programacin SPI. El grande es de 10 pines llamadoISP10PIN. Es un conector antiguo que todava se encuentra en la placa STK500 e incluso en la STK600pero solo por compatibilidad. Aunque parece mejor para el diseo de PCB, Atmel nos recomienda dejarlo de lado y que procuremos usar el conector de 6 pines ISP6PIN, que debiera estar presente en todo hardware para AVR moderno. Conectores ISP6PIN e ISP10PIN de la interface de programacin SPI.Conectores ISP6PIN e ISP10PIN de la interface de programacin SPI.Interface de programacin TPI TPI quiere decir Tiny Programming Interface es decir es una interface de programacin de los "tiny" AVR. Con eso podramos pensar que est presente todos los tinyAVR, pero no. La mayora de lostinyAVR utilizan las dos interfaces de programacin SPI y HVSP. La interface TPI solo est disponible en los ATtiny4, ATtiny5, ATtiny9, ATtiny10, ATtiny20, ATtiny28 y ATtiny40. Por otro lado, la documentacin de Atmel y algunos autores dicen que esta interface queda destinada a los tinyAVR de 6 pines pero los ATtiny20, ATtiny28 y ATtiny40 echan por tierra esa teora. Ellos tienen como 20 pines y sin embargo tambin se programan va TPI. Como sea, la interface TPI utiliza dos lneas de comunicacin llamadas TPIDATA y TPICLK, para datos y reloj, evidentemente. Para la programacin tambin es necesaria la intervencin del pin de RESET y segn el nivel de tensin que se le aplique el tinyAVR puede entrar en dos modos de programacin: Si se aplica 12V al pin RESET, el tinyAVR entra en modo de programacin de alto voltaje. No tiene una sigla o abreviatura propia, as que en la primera tabla presentada le llam simplemente TPI-HV. En este modo podemos habilitar y deshabilitar el pin de RESET para que trabaje como el pin GPIO PB3. Si el programador no puede entregar 12V, debe mantener el pin de RESET en 0V para iniciar el modo de programacin convencional (de bajo voltaje). Tambin en este caso tendremos acceso al fuseRSTDISBL para configurar el pin RESET como pin PB3, pero ya no 17. podremos devolverle su funcin de pin de RESET a menos recurramos a la programacin de alto voltaje.Lneas de interface de la programacin TPI. El conector que usa la interface TPI es el mismo conector ISP6PIN visto arriba, solo que con diferentes nombres de seal.Conector de la interface de programacin TPI.Interface de programacin PDI Como su nombre indica PDI (Program and Debug Interface) es la interface de dos lneas diseada por Atmel con fines de programacin y depuracin exclusivamente para sus AVR de la familia XMEGA. Adicionalmente los XMEGA tienen la interface JTAG, tambin con propsitos de programacin y depuracin. Eso es todo; ellos no tienen interface aWire ni mucho menos SPI ni TPI. Los XMEGA tambin poseen fuses y lock bits para establecer diferentes formas de operacin y niveles de seguridad, incluso tienen la capacidad de poder configurar su pin de RESET mediante el fuseRSTDISBL, pero ellos lo hacen todo mediante su interface PDI y no necesitan programacin de alto voltaje. Las transferencias de datos en una comunicacin PDI se rigen por un protocolo muy similar al delUSART trabajando en modo sncrono. La seal de datos, llamada DATA o PDI_DATA, es bidireccional y utiliza un pin dedicado del XMEGA; en tanto que la seal de reloj, CLOCK o PDI_CLK, es siempre controlada por el programador y est multiplexado con el pin RESET. 18. Lneas de la interface de programacin y depuracin PDI. El conector que usa la interface PDI tambin es el mismo conector ISP6PIN, pero con diferentes nombres de seal. Por eso el programador AVRISP MkII utiliza el mismo conector para las interfaces SPI, PDI y TPI.Interface de programacin JTAG JTAG tambin es una interface de programacin y depuracin presente en los AVR32, XMEGA y en losmegaAVR de 40 pines o ms. A diferencia de las interfaces PDI y aWire, su principal modo de operacin siempre ha sido la depuracin, quedando su funcin de programador como recurso auxiliar. El conjunto de los pines de la interface JTAG se conoce como TAP, por Test Access Port. De ellos los 4 pines que participan en la programacin del AVR son: TMS. Test Mode Select. Indica el estado el controlador Test. TCK. Test Clock. Es la seal de reloj. TDI. Test Data Input. Es la lnea de entrada para las instrucciones de datos o de comando. TDO. Test Data Output. La lnea por donde el AVR enva los datos seriales.Lneas de la interface de programacin y depuracin JTAG. El conector de la interface JTAG segn el estndar IEEE incluye tambin dos pines de RESET: nSRSTque servira para producir un reset software y nTRST para un reset del controlador TAP. Ninguno se usa como tal en el AVR. En su lugar el mdulo TAP puede regresar a su estado inicial manteniendo la lneaTMS durante 5 periodos de reloj. A veces 19. se usa la seal nTRST pero aplicada al pin RESET del AVR para un RESET convencional. Eso es til no directamente para llevar al AVR al modo de programacin sino como una forma alterna de limpiar el bit JTD del registro MCUCR. Eso junto con el fuse JTAGENprogramado son condiciones para que se abra el puerto JTAG, ya sea para programacin o depuracin.Conector de la interface de programacin y depuracin JTAG.Interface de programacin aWire Es la interface de programacin y depuracin constituida por un solo cable que tienen los AVR32 de pocos pines, aunque eso parezca exagerado pues como mnimo los AVR32 tienen 48 pines. Lo que s es seguro es que no est disponible en ningn AVR de 8 bits. A pesar de su requerimiento mnimo, como interface de depuracin ofrece el mismo alcance que JTAG. La nica seal, DATA, es bidireccional y en el AVR32 corresponde al pin de RESET.Lneas de la interface de programacin y depuracin aWire. 20. Conector de la interface de programacin y depuracin aWire.Boot Loader Pongo el Boot Loader en el primer lugar de la lista porque quiero que le demos especial consideracin. Quienes empezamos programando los PIC adquirimos la costumbre de trabajar con un programador. Utilizar un Boot Loader en ese mundo era una alternativa superflua o un camino para los aventureros. Es comprensible entonces que al migrar a los AVR nos preguntemos y ahora qu programador vamos a utilizar? Tenemos muchas pginas despus de sta donde hallar una respuesta. Pero antes de pensar en un programador deberamos saber que en el mundo de los AVR el Boot Loader es la mejor opcin. Al menos es mi conclusin personal. Pero, qu es un Boot Loader? Es un programa de microcontrolador que le permite auto-programarse. Mediante el Boot Loader el AVR recibe su nuevo programa directamente de la computadora sin intermediacin de ningn dispositivo programador y lo graba en su memoriaFLASH. La transferencia se realiza por cualquier interface disponible, siendo las ms comunes los puertos serial y USB. La siguiente figura nos ayudar a entender su mecanismo de funcionamiento.Esquema de la auto-programacin de un AVR usando un Boot Loader. La memoria FLASH, mostrada en color naranja, es donde se almacena el programa del AVR, o sea, el firmware. En tiempo de ejecucin el CPU lee cada una de las instrucciones de esta memoria, las decodifica y las lleva a cabo. Aunque aparece dividida en dos secciones, fsicamente la memoria FLASH es un bloque compacto y el firmware puede ocupar parte o todo el espacio disponible. Anteriormente lo habitual era tener un solo firmware en el microcontrolador, que realizaba la tarea de usuario como controlar dispositivos externos, comunicarse con la computadora, etc. Ahora lo llamaramos firmware de aplicacin. 21. Siendo el Boot Loader un firmware tambin, significa que podemos tener dos firmwares en el AVR. El firmware de aplicacin va en la Seccin de Aplicacin y el firmware de Boot Loader, en laSeccin de Boot Loader. Cmo sabr el AVR qu cdigo ejecutar? Cada vez que se inicia el programa de un AVR, esto es tras un RESET, el CPU empieza por ejecutar el Boot Loader si existe para ver si la computadora le est enviando datos que representan un nuevo firmware de aplicacin. De ser as, recibe los datos y los graba en la seccin de Aplicacin, operando en lo que podemos llamar modo de auto-programacin. Pero si no encuentra nada, el CPU pasa a ejecutar el firmware de Aplicacin; operacin en modo normal, por as decirlo. As como la memoria FLASH el Boot Loader tambin permite programar la memoria EEPROM y el Byte de Lock bits. Adems puede tener acceso de lectura a los fuses aunque no los puede modificar. Cuando trabajamos con la auto-programacin dejamos de lado ese trmino para introducir otros dos. El proceso de cargar un firmware de aplicacin en el AVR mediante el Boot Loader se denomina upload o subir. Y como el Boot Loader tambin permite leer el firmware, a dicho proceso se denomina download o bajar.Ventajas y desventajas El uso de un Boot Loader tiene sus pros y contras respecto de un programador convencional. El espacio que el cdigo del Boot Loader ocupa en la memoria FLASH lo descarta como opcin de la mayora de los microcontroladores pequeos. Generalmente un Boot Loader puede abarcar entre 1 kB y 2 kB de memoria. Para los tinyAVR cuya FLASH anda por estos rangos no tendra sentido. En cambio para los megaAVR cuyas memorias llegan hasta los 256 kB, el Boot Loader apenas si se deja notar. El cdigo del Boot Loader debera ser compilado o ensamblado para cada tipo de microcontrolador. Es raramente compatible por ejemplo un Boot Loader para un ATmega16 que para un ATmega32, a pesar de pertenecer a la misma serie. El primer requisito de compatibilidad es que los AVR tengan el mismo tamao de memoria FLASH puesto que el Boot Loader se aloja en su parte final. El Boot Loader no puede programar los fuses. A veces esto puede ser una pena pero en general ser una bendicin. Existen algunos microcontroladores que ya traen un Boot Loader de fbrica, pero en su gran mayora vienen vacos. El Boot Loader lo tenemos que grabar como cualquier otro programa, con un dispositivo programador convencional. Si nos vamos a dedicar a la programacin masiva de microcontroladores, nos puede resultar poco prctico grabar el Boot Loader primero y subir elfirmware de aplicacin despus. Sin duda en esos casos sera mejor usar un programador para grabar el firmware de aplicacin directamente. 22. Por otro lado, en los procesos de aprendizaje y de desarrollo de proyectos, donde modificamos constantemente el firmware de aplicacin, el uso del Boot Loader es la mejor opcin. Aqu nos basta con un microcontrolador para experimentar con diferentes programas y en diferentes circuitos. Para no exagerar y asumiendo la realidad de los microcontroladores que quemaremos en camino podemos preparar el Boot Loader en varios de ellos. ste ser el paso ms difcil pero bien habr valido la pena porque despus solo necesitaremos de un clic para subir un nuevo firmware sin ni siquiera tener que desconectar nuestro circuito de aplicacin.Boot Loader AVR109 y Butterfly La variedad de Boot Loaders es tan amplia como la de los programadores mismos. Los hay con diferente interface, con diferente protocolo, propietarios o de cdigo abierto, y para diferentes series de AVR. Aqu nos ocuparemos brevemente de los ms reconocidos. AVR109 y Butterfly son trminos sinnimos para identificar el mismo tipo de Boot Loader que se presenta en la nota de aplicacin AVR109 de Atmel. Este Boot Loader est escrito en C para los compiladores AVR IAR C y AVR GCC. Su cdigo es de libre disposicin as que podemos compilarlo para cualquiera de nuestros AVR con seccin de Boot Loader. Utiliza el puerto serie para conectarse con la computadora. En una laptop un conversor USB-UART funciona bastante bien. La computadora por su parte deber correr un software que entienda el protocolo AVR109. El ms sobresaliente es AVR OSP, descrito en la nota de aplicacin AVR911 de Atmel. Su nombre significa AVR Open Source Programmer, as que tambin es libre. Pero lo mejor de todo es que trabaja con los archivos XML de dispositivo originales y actuales de Atmel, es decir, soporta todos los AVR con Boot Loader. Abajo tenemos una versin para Windows de AVR OSP editada por Mike Henning. 23. Entono del programa AVR-OSP II. Butterfly para ser ms precisos es una adaptacin del Boot Loader AVR109 hecha por Atmel para su mini tarjeta de desarrollo del mismo nombre. La tarjeta AVR Butterfly est basada en un ATmega169, el cual adems del Boot Loader se puede programar mediante las interfaces SPI yJTAG. Esta tarjeta ofreca caractersticas muy tiles a un bajo precio, por eso Joe Pardue apost por ella al escribir su eBook C Programming for Microcontrollers, pero actualmente su preferencia ha sido desplazada por el Arduino. 24. Anverso y reverso de la tarjeta de desarrollo AVR Butterfly (fuente: atmel.com).Boot Loader de Arduino El Arduino es, sin duda, el sistema de desarrollo del momento. Su tarjeta se puede reducir a un megaAVR y un conversor USB-UART. Siendo as de simple es sorprendente el xito que ha alcanzado. Mucho se debe al framework de su lenguaje de programacin pero en cuanto al hardware contribuy el hecho de que el conversor USB-UART se conecte a la computadora para el data logging as como para recibir el nuevo firmware de aplicacin del megaAVR.Tarjeta del Arduino. Al igual que la tarjeta AVR Butterfly, el Arduino tambin posee un conector ISP6PIN para la programacin SPI de su megaAVR. Es solo una alternativa, pues el principal medio de su [auto] programacin sigue siendo el Boot Loader. El Boot Loader del Arduino est basado en el protocolo de programacin STK500 1.x. 25. El IDE del Arduino permite subir al megaAVR el cdigo del firmware automticamente despus de compilar el programa tan solo con presionar el botn Upload (ver la figura de abajo). El usuario no tiene que saber dnde se encuentra el archivo hex generado ni mucho menos conocer de los protocolos que operan detrs del escenario. Genial!Entorno de Desarrollo Integrado del Arduino. Empero a nosotros nos interesar saber que detrs de esta ventana corre AVRDUDE luego de presionar Upload. AVRDUDE es un programa open source que soporta casi todos los programadores de AVR. Como no tiene un entorno propio se han hecho muchos intentos de darle uno; aunque todos quedaron incompletos. Geir Lunde escribi una aplicacin Windows para AVRDUDE que permite usarlo para subir o cargar el archivo hex al AVR del Arduino. Por lo visto arriba esto parecera innecesario, pero resulta sumamente til cuando trabajamos fuera del entorno del Arduino. El 26. programa se llama Xloader y lo puedes encontrar en versin ms reciente en su web russemotto.com.Entorno del programa Xloader. El Boot Loader del Arduino est hecho para los AVR de sus tarjetas: ATmega328, ATmega2560 o ATmega32U4, por ejemplo. La buena noticia es que es fcilmente recompilable para cualquiermegaAVR con soporte de Boot Loader, en especial de las series ATmegaXX4 y ATmegaXX8, que son los usados en cursomicros.com. Tambin es posible compilarlo para los XMEGA e incluso para los tinyAVR pero eso requerira de edicin extra. Para los AVR con perifrico USB se usa el Boot Loader llamado Caterina escrito por Dean Camera usando su librera LUFA. Hay una caracterstica en el Boot Loader del Arduino que lo convierte en mi favorito y es que su ejecucin es ntegramente controlada por el software de la computadora. Con otros Boot Loaders como el del AVR109 suele ser necesario presionar algn botn en el circuito del AVR aparte del botn RESET para entrar en modo de autoprogramacin. En el Arduino el reset se genera mediante el conversor USB-UART. A decir verdad en algunas variaciones del Arduino s se requiere presionar algn botn pero como todo el cdigo es abierto lo podemos modificar a placer. Los cdigos de Boot Loader de Arduino estn en la subcarpeta hardwarearduinobootloaders.Programador FTDI Los mdulos FTDI que estudiaremos son los mismos puentes USB-UART que usaremos intensivamente para las comunicaciones de nuestro AVR con la computadora. Son los comercialmente conocidos como conversores USB a Puerto Serie, solo que ahora los veremos en su desempeo como programadores de AVR. Bueno, en realidad no hay ningn programador llamado como tal. Denominamos as a los mdulos de comunicacin basados en el transceiver FT232R o similar. Este chip es un conversor USB-UART fabricado por FTDI chip. De ah su apelativo, aunque ello no quita la posibilidad de usar este mtodo con un transceiver de otra marca, como por 27. ejemplo el CP2102 de Silicon Labso el MCP2200 de Microchip, o un conversor personalizado basado en un microcontrolador, como el USB Serial Light apoyado por el Arduino. De hecho dicen que el MCP2200 es en realidad un PIC pre programado. Los mdulos FTDI estn difundidos en dos formas: Como un conversor USB - Puerto Serie y como un conversor USB-UART. Dos ejemplos del primer grupo son los mdulos EVAL232R y USB-to-RS232, de la misma FTDI Chips, los cuales ofrecen a la salida un conector DB9 con los 9 pines completos, con los voltajes y niveles lgicos del Estndar RS232. Se comportan como autnticos puertos serie. Muy buenos. Adems los circuitos de estos y otros productos similares estn disponibles en su web. Conversores USB-UARTLos conversores USB-Puerto Serie EVAL232R y USB-to-RS232, de FTDI Chips. Por otro lado, quienes trabajamos con microcontroladores utilizamos el puerto serie para intercambiar con la computadora datos que no tienen que viajar en los niveles y voltajes RS232. Tampoco solemos emplear las 9 seales disponibles. Muchas de ellas solo son un legado de los antiguos mdems. Es por eso que varias empresas como Adafruit o Sparkfun comercializan conversores USB-UART. Estos son como la tarjeta EVAL232R pero sin el transceiver MAX232, encargado de la conversin de los niveles de voltaje. En lugar del DB9 poseen un conector lineal que solo brinda las seales tiles para nosotros. Para decirlo de otra forma, son pequeas tarjetas que bsicamente unen las lneas del FT232RL a un conector USB por un lado y a un conector plano por el otro. En las imgenes mostradas abajo puedes ver que casi no tienen ms elementos que esos. Por eso a veces se les llama tambin cables FTDI. En ingls un trmino muy extendido es Breakout. As aparece identificado en los circuitos de las prcticas de cursomicross.com. conversores USB-UART 28. Los conversores USB-UART FTDI Friend, FTDI Basic y USB Serial Light El conversor USB Serial Light es una tarjeta basada en un microcontrolador ATmega8U2 programado para emular un puerto serie. El AVR funciona tambin como el FT232RL aunque a nivel software los drivers con que trabaja no tienen el prestigio de FTDI chips. Los tres adaptadores son muy parecidos. Lo que nos interesa a fin de cuentas son las 6 seales de salida que proveen. Las 5 primeras son las mismas: GND, CTS, VDD, TXD y RXD (los nombres cambian un poco pero son las mismas). La sexta seal es DTR en el FDTI Basic y USB Serial Lightpero RTS en el FTDI Friend. Esa es la diferencia crucial. Como puente de comunicacin para transferencias de mensajes con la computadora funcionan igual pues all solo intervienen TXD y RXD adems de VDD y GND claro est. Sin embargo, como circuito para programar un AVR ya sea mediante el Boot Loader del Arduino o por la interface SPI, s debemos considerar esa diferencia.Mdulo FTDI como programador de interface SPI Mediante el chip FT232RL podemos emular cualquier programador de puerto serie de los llamados bit bang como el programador SI-Prog o los programadores DASA. Puesto que elFT232RL puede manejar niveles de tensin TTL, la conexin con el microcontrolador sera directa, sin resistencias, ni diodos zner ni transistores. Pero si vamos a trabajar con un adaptador como alguno de los tres mencionados arriba, debemos considerar dos puntos. Primero, que el software de grabacin AVRDUDE asume que a la salida del puerto serie las seales tienen polaridad segn el estndar RS232, esto es, invertidas respecto de las seales TTL. Y segundo, que los programadores seriales como SI-Progo DASA usan las seales DTR y RTS al mismo tiempo, lo cual deriva en un escollo puesto que los adaptadores FTDI Basic y USB 29. Serial Light solo usan DTR, en tanto que FTDI Friend o usa DTR oRTS pero muy difcilmente las dos a la vez. Una alternativa para resolver estas dos contrariedades sera usar un conversor que nos brinde todos los pines del puerto serie necesarios, como por ejemplo el UM232R o el UM232H, mostrados abajo. conversores USB-UARTLos conversores USB-UART UM232R y UM232H, de FTDI Chips. Afortunadamente tambin existe una solucin software. Para ello debemos abrir en un editor de texto el archivo avrdude.conf que usa AVRDUDE. Se halla en el mismo directorio donde resideavrdude.exe, por ejemplo en C:WinAVR-20100110bin, suponiendo que lo instalamos con las opciones por defecto de WinAVR. Entre otras cosas el archivo avrdude.conf contiene las descripciones e interfaces de todos los programadores que soporta. Lo que haremos ser aadir las caractersticas correspondientes de nuestro nuevo programador que solo usa las seales de los adaptadores FTDI Basic o FTDI Friend y con las polaridades debidas. Podemos incluirlo en cualquier parte pero para mantener las categoras lo pondremos entre los programadores seriales bit bang. Como ves en el extracto mostrado abajo, yo lo puse en el segundo lugar del grupo, entre ponyser y siprog. Es todo el contenido con fondo gris.# # some ultra cheap programmers use bitbanging on the # serialport. # # PC - DB9 - Pins for RS232: # # GND 5 -- |O 30. #| O| avrdude -c ftdi -p atmega324p -P ft0 U flash:w:main.hex:i-B 1 Por si no qued clara la interface entre el mdulo FTDI y el AVR, abajo tenemos el circuito a utilizar. Como se ve, la alimentacin del AVR proviene del mismo mdulo FTDI. No es recomendable ponerle una fuente propia. Si el AVR no tiene el pin AVCC pues no pasa nada, y si tiene varias seales VCC o GND, se conectan todas. El circuito del XTAL no ser necesario si el AVR est configurado para operar con su reloj interno. De fbrica viene as. Este mdulo FTDI es perfectamente compatible con el FTDI Basic y USB Serial Light. Para el FTDI Friend debemos aclarar que el pin RTS se debe re direccionar para unirse con la seal DTR. Incluye un pequesimo jumper en la parte posterior para realizar esta maniobra. Otra opcin sera modificar de nuevo el archivo avrdude.conf como lo hicimos arriba.Esquema para programar un AVR con un Mdulo FTDI.Mdulo FTDI como programador Boot Loader de Arduino Una tarjeta Arduino es en ltima instancia un mdulo FTDI unido a un AVR. Pero no estn unidos como aparece justo en la figura de arriba. En el Arduino el mdulo FTDI le sirve al AVR en su funcin original de comunicarse con la computadora como puerto serie virtual, ya sea para intercambiar simples mensajes de texto o para cargar el nuevo firmware de aplicacin mediante el Boot Loader del AVR. En el primer caso las lneas TXD y RXD se conectan con sus homlogos en el AVR de forma cruzada. No hay novedad en ese aspecto, as que ni ponemos un circuito. Por otro lado, cuando se usa el mdulo FTDI para cargar el nuevo programa del AVR interviene adems de TXD y RXD la seal DTR, cuya funcin es resetear el AVR para 33. que reinicie desde elBoot Loader. Para conocer los detalles de este proceso puedes leer la seccin programador Boot Loader. El circuito en este caso queda como se ve abajo. Valen las mismas sugerencias indicadas para el circuito anterior sobre la fuente de alimentacin y la conexin de los pines relacionados a ella. Aqu el AVR siempre trabaja con un XTAL de 16MHz.Esquema para programar un AVR con un Mdulo FTDI usando el Boot Loader del Arduino. El Boot Loader le permite al AVR auto grabar en su memoria FLASH el programa que recibe por elmdulo FTDI (auto-programacin). Pero para que esto sea posible primero el AVR debe tener grabado el programa del Boot Loader. Esto ser sencillo si usamos el mdulo FTDI como programador de interface SPI, estudiado antes. Luego el trabajo ser ms que sencillo. El circuito mostrado arriba es un "Arduino desnudo". Parecer precario pero con el Boot Loader debidamente cargado ser completamente funcional. Podremos usarlo desde su entorno natural (mostrado abajo) o desde un programa alternativo como XLoader. 34. Entorno de Desarrollo Integrado del Arduino. El programa XLoader es particularmente til para quienes programamos el AVR desde otras plataformas como de los compiladores IAR AVR C, CodeVisionAVR o AVR GCC alojado en Atmel Studio 6. De esa forma trabajaremos en todas las prcticas de cursomicros.com. 35. Entorno del programa Xloader.Programador SI-Prog o PonySer Los programadores de puerto serie o paralelo se estn convirtiendo en herramientas obsoletas por la casi extincin de esos puertos en las computadoras. Si necesitamos armar un programador similar aunque sea provisionalmente (en un breadboard) ser para grabar el AVR que servir de cerebro de un programador USB. Estamos hablando de programadores que no llevan un AVR en su circuito. De esos tenemos varios otros y los veremos luego. Ahora examinaremos los programadores conocidos como de bit bang por la manipulacin bit a bit de los datos desde la computadora. No sern los ms veloces pero s los ms fciles de armar. Para muchos que reconocen, a veces hasta con cierto bochorno, haber empezado con los PIC antes que otro microcontrolador, es casi inevitable preguntar si habr algn programador de AVR parecido al entraable JDM. Un sencillo pero fiable y cmodamente portable programador de puerto serie que no necesitaba de alimentacin externa. El programador ms cercano es el tambin conocido en la comunidad PIC. Estamos hablando del viejo superviviente SI-Prog, de Claudio Lanconelli, quiz ms conocido por su softwarePonyProg. Este programador usa la interface SPI para grabar todos los megaAVR y tinyAVR que la soportan. El circuito del SI-Prog lo podemos dividir en dos etapas: la que controla las lneas de programacin (parte inferior) y la que conforma la fuente de alimentacin (parte superior). He puesto un conector ISP de 6 pines estndar en vez del conector SIL que figura en el circuito original y he ignorado la etapa de los zcalos para los AVR que all se incluan. Puedes encontrar los circuitos originales y el software PonyProg que los controla en la web del autor lancos.com. 36. Circuito del programador SI-Prog. La etapa de alimentacin del SI-Prog parte de los 3 diodos 1N4148 que toman corriente de las lneas del puerto serie y recargan el capacitor C3. Si el jumper est cerrado como se ve en la figura tambin participa el capacitor C4 para acumular en la entrada del LM2936Z-5 hasta 12V tensin. El chip LM2936Z-5 es un regulador parecido al 7805 que a su salida entrega una tensin de 5V, aunque no deberamos reemplazarlo pues el 7805 no es LDO. De este modo el circuito obtiene su alimentacin del puerto serie. Pero si vamos a usar una fuente de alimentacin externa debemos mover el jumper a la otra posicin. En este caso s podemos pensar en un 7805 como alternativa. Si quitamos toda la etapa de alimentacin y nos quedamos con las lneas bsicas de programacin, el circuito se reduce a su forma ms difundida. Ahora el programador SI-Prog es netamente ISP porque su fuente de alimentacin VCC la obtendr del circuito del AVR programado. 37. Circuito reducido del programador SI-Prog.Programador SI-Prog reducido comercializado por deccanrobots. El circuito resultante sigue siendo igual de fiable que el original. Es bastante bueno aunque no podemos decir lo mismo de PonyProg. Como la mayora de los programas con entorno grfico para Windows, este software ha quedado desactualizado. Soporta pocos dispositivos, la mayora antiguos modelos, y difcilmente funcionar en los sistemas operativos actuales. 38. Entorno de trabajo del programador PonyProg. Dada la popularidad del programador SI-Prog, se pueden encontrar en Internet algunos otros softwares con entorno grfico que lo soportan. Podra citar una lista de ellos, con caractersticas tan diversas como sus limitaciones, pero sera en vano, un desperdicio de tiempo tratando de explicar a quines les puede convenir tal o cual programa. Mejor es usar sugerir un programa que a todos nos servir sin importar el hardware ni sistema operativo de nuestra computadora. Este programa universal es AVRDUDE: el mejor software programador que existe, a pesar de no tener entorno grfico GUI completo. En la siguiente captura, obtenida al escribir avrdude c x, AVRDUDE nos muestra la lista de todos los programadores que soporta. Los 5 primeros son programadores bit bang de puerto serie. ElSI-Prog aparece identificado como siprog, pero tambin es reconocido por su alias ponyser. Por eso tambin se le conoce as. 39. Programadores seriales bit bang soportados por AVRDUDE. De hecho, y como podremos comprobar despus, todos los programadores bit bang de puerto serie tienen la misma estructura de circuito. Esto a veces puede hacer confusa su identificacin. Por ejemplo, es frecuente encontrar pequeas variaciones en un programador SI-Prog que hacen que se vea como un programador DASA3, y viceversa. Sucede mucho en las versiones comerciales porque no suelen identificarse con los nombres aqu presentados. Pero si vamos a trabajar con AVRDUDE, poco interesa la procedencia de nuestro programador serial y tampoco es imprescindible saber cmo se llama. Todo lo que necesitamos es conocer la relacin de las seales MISO, MOSI, SCK y RST con los pines del conector DB9. Con estas correspondencias podemos identificarlo fcilmente. Por ejemplo, la imagen que tenemos abajo confirma que en el programador SIProg o PonySer la interface es MISO-CTS, MOSI-DTR, SCK-RTSy RST-TXD. 40. Pines de interface del programador SI-Prog o PonySer. A modo de ejemplo, si queremos grabar un archivo main.hex en la memoria FLASH de un ATmega128P con AVRDUDE estando nuestro programador conectado al puerto serie COM1, podramos escribir: >avrdude c siprog P com1 p atmega128p U flash:w:main.hex:i O de la siguiente forma, puesto que ponyser es alias de siprog. >avrdude c ponyser P com1 p atmega128p U flash:w:main.hex:i A falta de un puerto serie en las computadoras actuales se han difundido bastante losconversores USB a Puerto Serie, casi todos basados en la familia del transceiver FT232RL, pero sobre su uso el manual del AVRDUDE no garantiza nada y hasta recomienda no usarlo como puerto serie virtual. Si tienes un mdulo de este tipo es recomendable que leas la pgina delprogramador FTDI.Programadores DASA Existen 3 programadores de esta serie: DASA,DASA2 y DASA3. Son programadores que no tienen alimentacin propia ni derivada del puerto serie y tampoco una seal de reloj para el AVR en caso de que ste trabajara con oscilador externo. Empezaremos por describir el ltimo. No, no ha habido un error al poner la imagen. El circuito que ves abajo corresponde al programador DASA3. Es muy parecido al circuito reducido del programador SI-Prog. 41. Seran idnticos de no ser por el diodo 1N4148, que en muchas ocasiones tambin suele aparecer en elSI-Prog, y porque la conexin de los pines TXD yDTR en el conector DB9 est permutada.Circuito del programador DASA3. El circuito del programador DASA2 es ms parecido aun. De hecho podramos decir que es el mismo SI-Prog reducido. Supongo que por eso no es considerado por el programa AVRDUDE. Poner su circuito por tanto sera desperdiciar espacio. La primera versin de esta familia era el programador DASA. Es el programador serial ms simple de todos. Yo creo en el adagio kiss pero este circuito no me da mucha confianza. Me atrevera a armarlo solo como programador provisional. Observa que nuevamente ha cambiado la conexin de las lneas en el conector DB9.Circuito del programador DASA. 42. El programador DASA (fuente: make.larsi.org). Podramos seguir mostrando otros programadores de puerto serie pero solo descubriramos que son derivados o variaciones de los programadores SIProg y DASA3. Podemos incluso hacer nuestras propias adaptaciones que puedan ser controladas por AVRDUDE. Tanto su nombre como la conexin de seales en el conector DB9 deben ser aadidas en el archivo avrdude.conf, que utiliza AVRDUDE. Ms adelante veremos cmo hacer esto pero para un programador que utiliza un conversor USB-UART. Debido a su parecido, son muy recurrentes las metidas de pata al confundir los programadoresDASA entre ellos y con el SI-Prog. Antes de usar un programador de estos debemos cerciorarnos en su identificacin viendo los pines de interface que usa. La siguiente imagen por ejemplo nos resalta las interfaces de los programadores DASA y DASA3. Observa que no aparece DASA2. Si tuviramos uno, podemos invocarlo como siprog o ponyser. 43. Programadores DASA soportados por AVRDUDE. A modo de ejemplo, si queremos grabar con un DASA3 un archivo main.hex en la memoria FLASH de un ATmega128P con AVRDUDE estando nuestro programador conectado al puerto serie COM1, podramos escribir: >avrdude c dasa3 P com1 p atmega128p U flash:w:main.hex:i O, si usamos un DASA. >avrdude c dasa P com1 p atmega128p U flash:w:main.hex:i O, si usamos un DASA2. >avrdude c siprog P com1 p atmega128p U flash:w:main.hex:i A falta de un puerto serie en las computadoras actuales se han difundido bastante losconversores USB a Puerto Serie, casi todos basados en la familia del transceiver FT232RL, pero sobre su uso el manual del AVRDUDE no garantiza nada y hasta recomienda no usarlo como puerto serie virtual. Si tienes un mdulo de este tipo es recomendable que leas la pgina delprogramador FTDI.Programador USBasp USBasp deber por mucho el programador USB para AVR ms vendido y tambin el ms construido en casa debido a la libre disponibilidad de su hardware, firmware y la amplia gama de software de computadora que lo soporta. Su popularidad se ha 44. acrecentado adems por la flexibilidad de su circuito que permite usarlo con el firmware de otros programadores USB comoAVR Doper, AVRminiProg o USBtinyISP. Todo esto lo explicaremos de a poco. As que empecemos por mostrar sus principales caractersticas entres pros y contras. Programador usbaspProgramadores USBasp. Soporta las interfaces de programacin SPI y TPI. Con SPI podemos programar todos losmegaAVR y la gran mayora de los tinyAVR. Con TPI cubrimos el pequeo restante de los tinyAVR. Recordemos que la programacin TPI tambin puede realizarse en alto voltaje, pero ese modo no es manejado por USBasp. Fue diseado por Thomas Fischl utilizando la librera V-USB de Christian Starkjohann que administra todo el protocolo de comunicacin USB a nivel software, de modo que no es preciso disponer de un microcontrolador con USB incorporado. Inicialmente el firmware est escrito y compilado para el ATmega8 y ATmega88 pero puede adaptarse para funcionar en cualquier AVR siempre que tenga la memoria y los pines suficientes. Puesto que la librera V-USB trabaja en bit banging (bit a bit), las transferencias de datos se dan a la mnima velocidad del protocolo USB, esto es, 1.5 Mb/s (modo Low Speed). A pesar de ello la velocidad de programacin alcanza los 5 kB/s. Es bastante rpido. Usa un jumper para activar la alimentacin Vcc al AVR target y otro para frenar cuando sea necesario la velocidad de programacin. Mover jumpers cada vez que vamos a programar un AVR podra resultar hasta frustrante en especial si tenemos planeado usar el programador activamente. No tiene un software de computadora con entorno a lo Windows que lo maneje a plenitud. AVRDUDE lo controla estupendamente pero su uso desde la lnea de comandos con frecuencia termina por ahuyentar a los principiantes. Muchos han intentado darle a AVRDUDE un entorno grafico que permita programar el AVR con un 45. par de clics: avrdude-gui, SinaProg, AVR Burn-O-Mat, son algunos ejemplos. Para m todos estn incompletos en especial por las ventanas de configuracin de los fuses. Inicialmente eso me disgustaba pero luego vi que los fuses no los programaba ms que una vez. El resto del tiempo solo programaba la memoria flash, para lo cual efectivamente bastan con un par de clics. AVRDUDE corre sin ningn inconveniente en Mac OS X y Linux. En Windows requiere la instalacin del driver open source para USB libusb. No tendra que resaltar esto de no ser porque libusb se lleva mal con los drivers USB de Jungo que emplea Atmel Studio 6 para sus programadores y depuradores hardware, como AVRISP mkII, AVR Dragon, etc. En estos casos se recomienda emplear la librera libusb en modo filtro, el cual lamentablemente no est del todo acabado. Parece que al final la balanza no favorece mucho que digamos el lado de los pros. Siendo el programador USBasp de hardware y software open source, tal vez pienses que en vez de criticar debera hacer mi aporte para remediar sus supuestas deficiencias. De hecho lo pens al principio pero luego comprend por qu otros no lo haban hecho antes. Por qu? Si echamos un vistazo al sitio web oficial de USBasp, quiz nos sorprenda encontrar adems del diseo original las distintas adaptaciones que hicieron muchos usuarios. Por qu tantas versiones?, Sern igualmente fiables?, Cul me conviene construir? No es fcil responder a estas preguntas para alguien que pretende ser imparcial. As que en vez de dar un s, no, ste o aqul, vamos a hacer un pequeo viaje para conocer las caractersticas del circuito de este programador y comprender por qu le hicieron algunas variaciones. Empecemos por el circuito original del USBasp.Programador USBasp original. 46. Circuito del programador USBasp original.La interface USB El AVR es un dispositivo esclavo en la red USB que debe estar atento a todos los datos que le enva la computadora. Esto se consigue usando la interrupcin INT0 para detectar los cambios de nivel en la lnea D+. Se puede editar fcilmente el firmware del AVR para conectar las lneasD+ y D- a otros pines del AVR (siempre que 47. pertenezcan al mismo puerto), pero la conexin deD+ al pin INT0 debe permanecer. En realidad, segn la librera de USB Virtual V-USB que usa el firmware y las interrupciones de cambio de pin del ATmega88, es posible incluso pasar por alto esta conexin pero con una edicin un poco ms avanzada. La resistencia de 2.2k presenta el programador a la computadora como dispositivo Low Speed(1.5MHz). Si estuviera atada al pin D+ la computadora tratara de reconocerlo como dispositivoFull Speed (12 MHz). Es regla general que las transferencias de datos a altas velocidades no se pueden realizar a niveles de tensin muy altos. Por eso el USB fue diseado para que sus lneas de datos D+ y D-manejen seales diferenciales de 0 y 3.3V, no los niveles TTL de 0 y 5V. Si en D+ hay 3.3V en D- debe haber 0V y viceversa. Los microcontroladores con USB hardware tienen pines preparados para entender estos niveles incluso si estn alimentados por Vcc = 5V. Pero como el USBasp no lleva uno de esos, tiene que usar diodos zner. Nota que si fueran de 3.3V, estaramos en el borde del rango que puede entender el AVR. 3.6 V est bien. Eso junto con las resistencias de 68 dan los niveles de tensin e impedancias que el estndar USB puede aceptar.Interface USB del programador USBasp. Uno de los diseos que me llam la atencin rpidamente por su PCB compacto (solo tiene 3 discretos puentes) era el de J.A. de Groot. Pero me desilusion al percatarme de que le haba quitado los diodos zner. Yo no habra hecho eso, pues la especificacin del USB es bastante estricta. Si bien es cierto que era as en las primeras del programador, no he visto otros proyectos con USB emulado que omitan los diodos zner. 48. Programador USBasp modificado por J.A. de Groot.La interface SPI En el circuito del USBasp original las lneas de la interface SPI van directamente al conector. Puesto que el AVR programador siempre trabaja a 5 V, es necesario que el AVR target (a programar) tambin lo haga o, de lo contrario, no se podrn entender. Hasta all no parece haber nada novedoso, verdad?Interface SPI del programador USBasp. 49. Sin embargo, varias personas decidieron interponer elementos en las lneas del bus SPI pensando en los AVR alimentados por 3.3 V o, en general, por voltajes inferiores a 5 V. No estamos hablando de los XMEGA ni de los AVR32 que son los que trabajan a 3.3 V de forma exclusiva. Adems ellos no se programan por la interface SPI. Nos referimos a los tinyAVR ymegaAVR que como sabemos pueden trabajar entre 1.8V y 5.5 (esos son valores crticos, no significa que tengamos que llegar a esos extremos). En algunos rediseos como el de Fisch und Fischl GmbH y Thomas Pfeifer se han puesto resistencias con el propsito adicional de prevenir cortocircuitos. En otros diseos como Pawel Szramowski o yuki-lab.jp han ido ms lejos y le han colocado un buffer como el 74HC125 o el 74HC541. En cualquiera de esos casos el jumperSupply Target debe permanecer abierto durante la programacin dejando que AVR target trabaje con su propia alimentacin (inferior a 5V). Programador usbaspInterface SPI del programador USBasp.Los jumpers Hay tres jumpers en el programador USBasp: 50. Jumpers del programador USBasp. Slow SCK. Sirve para reducir velocidad de programacin del USBasp. Por defecto, cuando este jumper est abierto, la velocidad del bus SPI se establece a Fsck = 375kHz (frecuencia de la seal SCK). En la gran mayora de los casos se cumplir con el requisito de ser menor a la cuarta parte de la frecuencia del procesador, es decir, Fsck < F_CPU/4, y no habr problemas pues en general nuestro F_CPU vale la frecuencia del XTAL usado. Una de las excepciones se da cuando el AVR es nuevo, donde los fuses de reloj configuran la frecuencia F_CPU = 1MHz, esto es, la octava parte de la frecuencia del oscilador RC interno del AVR. En ese caso la condicin 375kHz < 1MHz/4 no es cierta y por tanto ser necesario disminuir el valor de Fsck. El programador USBasp ofrece dos formas de reducir el valor de Fsck: por la va hardware, cerrando el jumper Slow SCK, y por la va software, desde el programa como AVRDUDE. Si el jumper est cerrado, el bus SPI se configura con Fsck = 8kHz. Esta frecuencia no solo cumplir la exigencia de Fsck < F_CPU/4, sino que puede reducir demasiado la velocidad de programacin del AVR. La buena noticia es que si programamos los fuses de reloj para que la frecuencia F_CPU sea superior a 1.5MHz, en las siguientes ocasiones ya no habr necesidad de reducir el valor de Fsck. Self Programming es el jumper de auto-programacin. Los programadores USB suelen tener un jumper similar para permitir la actualizacin automtica de su firmware, pero este no es el caso. En el USBasp la actualizacin o la primera grabacin del firmware 51. es manual. Si queremos hacerlo, debemos grabar el AVR del USBasp con otro programador. Solo en esa ocasin se debe cerrar el jumper Self Programming. El resto del tiempo debe estar abierto. Supply Target. Este jumper s lo usaremos con frecuencia. Si est cerrado se conectan las lneas Vcc del programador USBasp y del circuito de aplicacin (target). Aunque eso te parezca obvio, debes notar que si el circuito target tiene su propia alimentacin activada, el jumper cerrado podra dejar el puerto USB daado. El USB en este caso est configurado para brindar alimentacin [al USBasp y al circuito target inclusive]; no para recibirla. As que antes de cerrar el jumper, es recomendable apagar la alimentacin del circuito target. En ese caso podemos incluso mantener el jumper cerrado todo el tiempo; as funcionaba el USBasp en sus primeras versiones. Dejar el jumper abierto y permitir que el circuito target trabaje con su propia alimentacin es til cuando sta tiene un valor inferior a 5 V. Recordemos que esto requiere la adaptacin de las lneas del bus SPI con buffers o al menos con resistencias en serie. Para ms informacin ver la interface SPI.Los diodos LED Son elementos bsicamente decorativos. El LED verde se enciende cuando apenas se conecta el programador al puerto USB de la computadora. El LED rojo se enciende durante el proceso de grabacin del AVR. Desde el firmware es posible reubicarlos as como editar su funcin. Yo por ejemplo modifiqu el cdigo para que el LED verde se encienda tras la correcta enumeracin del programador, o sea cuando la computadora lo haya reconocido correctamente. Tambin Limor Fried hizo lo mismo con su programador USBtinyISP. En el circuito original las resistencias de cada LED son de 1k. Eso por supuesto depende del tipo de LED. Para mis diodos LED yo tom resistencias de 330 . 52. Diodos LED del programador USBasp.Los conectores Si por su tamao el programador necesitar un cable para conectarse a la computadora, se usar un conector de recepcin de tipo B estndar (ese que tiene forma de cajita y es el ms usado) o micro (demasiado pequeo). Aunque los conectores mini ya no estn contemplados en especificacin 3.0 del USB, todava se encuentran en el mercado y son muy populares en dispositivos porttiles. Pero si el programador es muy pequeo se puede conectar directamente a la computadora usando un conector de tipo A macho. Es el conector que usaron por ejemplo Fabio Baltieri y Sven Hedin en sus adaptaciones. Programador usbaspAdaptaciones del USBasp de Fabio Baltieri (izquierda) y Sven Hedin (derecha). Los dos diseos se ven muy parecidos, uno ms presentable que el otro, pero la principal diferencia est en el conector ISP. Por qu un conector tiene 6 pines y el otro 10? 53. En el USBasp original el conector es un ISP10PIN, de 10 pines. Adems de las lneas de programacin propias de la interface SPI (MISO, MOSI, SCK, RST) y de alimentacin (VCC y GND), estn conectadas las lneas de transmisin TXD y recepcin RXD del USART. El USART sirve para comunicarse con la computadora por el puerto serie. El autor, Thomas Fischl, la puso para la depuracin del programador, es decir, para quienes deseen contribuir al desarrollo y mejora de su firmware. Para los usuarios finales esta interface est por defecto desactivada y TXD y RXDson lneas muertas, de modo que pueden prescindir de ellas. Sin las lneas del USART basta con un conector de 6 pines para el programador.Lneas del USART en el conector ISP10PIN pines del USBasp. El conector de 10 pines del USBasp original es compatible con el hardware antiguo de los AVR. Atmel todava lo incluye en algunos de sus productos como sus placas STK500 y STK600 pero solo con fines de compatibilidad. Al final siempre nos insta a usar el conector de 6 pines. As lo han entendido los diseadores de programadores similares como AVR Doper o USBtinyISP. Parece que somos muy pocos los que seguimos el mismo camino con el USBasp hecho ntegramente en versin through hole. Recuerdo haber visto tambin el programador de yuki-lab.jp con un conector ISP6PIN.Los zcalos Para ser sincero, yo era de los que venan del mundo de los PIC y tena la casi viciosa costumbre de utilizar un programador con zcalo donde colocar el PIC para despus 54. retirarlo y llevarlo al circuito de aplicacin. Con los AVR me deshice definitivamente de esa prctica. Luego entenders por qu. Programador usbaspProgramadores USBasp con zcalos. Un turco de nickname gevv arm un USBasp con zcalo ZIF para los AVR de 8, 20, 28 y 40 pines. Adicionalmente cuenta con un conector ISP de 10 pines para programar AVRs fuera del zcalo; es el de la imagen derecha. Es uno de mis anhelos llegar algn da a Turqua, pero no imaginaba que el idioma me resultara tan complicado. No entend nada de su web. Ni siquiera s si acepta los AVR de 20 pines antiguos o de los nuevos. Har un mayor esfuerzo en otra oportunidad. Por ahora no tengo inters en su programador. El programador de la imagen izquierda es la adaptacin de Matthias Grner utilizando zcalos ordinarios de 28 y 40 pines. No tiene conector ISP para programar los AVR que no quepan en sus zcalos. Si al igual que a m, no te gusta ninguno de los dos programadores mostrados, puedes rehacer el tuyo propio segn tus preferencias. Con el firmware y el circuito a tu disposicin solo necesitas conocer dos cosas: Las seales del programador MOSI, MISO, SCK y RST deben ir a los pines del AVR con el mismo nombre. Se da por hecho la conexin de todos los pines de alimentacin GND, VCC y, si existe, tambin AVCC. Puedes encontrar informacin adicional en la seccin interface de programacinSPI. El modo de programacin es una de las formas de trabajo del AVR, y para que trabaje el AVR necesita de una seal de reloj que puede ser interno o venir del exterior. Cuando el AVR es nuevo su reloj es el circuito RC interno. Despus lo programamos para que su reloj sea externo, normalmente de un XTAL. Los dos programadores descritos antes utilizan un XTAL para el AVR target. Otra forma sera generar una onda cuadrada peridica en el AVR del programador y aplicarla al 55. pinXTAL1 del AVR target. Esta seal es compatible con cualquiera de las fuentes de reloj externas del AVR. Cuando programamos los fuses de reloj en realidad estamos optimizando el circuito de reloj interno del AVR para alguno de los elementos externos entre XTAL, resonador cermico, circuito RC o simplemente una seal cuadrada en el pin XTAL1; no significa que una configuracin de reloj impedir el funcionamiento del AVR con la otra fuente de reloj externa, solo que quiz no ser la mejor opcin. Un programador con zcalos puede ser realmente til cuando nos dedicamos a la programacin en serie de microcontroladores. Las pocas veces que tuve que hacerlo fue utilizando microcontroladores de 28 o 40 pines (comprndolos en cantidades, los microcontroladores pequeos cuestan casi lo mismo que los medianos). As que al empezar a trabajar con los AVR supuse que si quiz, tal vez, alguna vez, necesitaba de un programador con zcalo, sera con un ZIF para los AVR de 28 y 40 pines. En el hardware puse un ATmega88 SMD para reducir el tamao de la PCB y en el firmware configur el Timer2 para generar una onda cuadrada de 2MHz como reloj del AVR target. Programador usbaspProgramador USBasp con zcalo ZIF. El resultado es como lo que ves arriba. Para m qued muy bonito pero te confieso que de todos mis programadores es el que menos uso. Me cost casi lo mismo que un Arduino. As que antes que cometas el posible mismo error, te recomiendo que te compres eso: un Arduino. Con ello tendrs un microcontrolador, un programador, un conversor USB-UART (puerto serie para tu laptop) y hasta una fuente de alimentacin de 5V y 500mA.Programador USBtinyISP El programador USBtinyISP fue desarrollado porLimor Fried a partir del programador USBtiny deDick Streefland. Como su nombre deja suponer, est basado en un microcontrolador tinyAVR, el ATtiny2313, y solo ofrece la interface de programacin SPI (ISP por antonomasia). Describamos algunas de sus caractersticas: Puede programar todos los megaAVR ytinyAVR con interface SPI, excepto los que cuentan con memoria superior a 64K, que son los familiares del ATmega128 y ATmega256. Utiliza buffers para grabar microcontroladores AVR que operan a Vcc < 5V. 56. Su alimentacin proviene del puerto USB. Tambin puede suministrar alimentacin de 5V al circuito target, siempre que no exceda de los 100mA. Este tope se puede extender editando el firmware. Tiene una aceptable velocidad de programacin de 1kB/s. Para tener una referencia prctica, los programas de cursomicros son de 2kB en promedio, as que grabarlos en el AVR tomara cerca de 2 segundos cada uno. Se puede usar desde AVRDUDE o desde Atmel Studio 6. En resumen es bastante parecido al USBasp, salvo por la primera limitacin y por el costo. Este programador no est disponible comercialmente en versin ensamblada. Lo podemos comprar desde adafruit.com solo como un kit. La ventaja de este kit es que el microcontrolador ATtiny2313 ya viene pre-programado. Eso te puede ahorrar bastante tiempo y esfuerzo. Programador usbaspVistas exterior e interior del programador USBtinyISP (fuente: ladyada.net). Las lneas de la interface de programacin SPI del USBtinyISP se renen en los dos conectores estndar: el cada vez menos usado de 10 pines y el recomendado por Atmel de 6 pines. El jumper OUTPWR tiene las mismas funciones que en el programador USBasp: Brindar alimentacin (con el jumper cerrado) de 5V al circuito target si ste no la tiene, o Permitir (con el jumper abierto) que el circuito target trabaje con su propia alimentacin, lo cual es deseable cuando su nivel es diferente de 5 V. Actualmente el USBtinyISP se encuentra en su versin 2.0. La diferencia notoria respecto de la versin 1.0, aparte de algunos pequeos ajustes en el firmware, est en el buffer 74AHC125Ncolocado en las lneas de programacin MISO, MOSI, SCK y RST, del hardware. Adems de aislante, este CI sirve de puente entre las seales TTL del 57. AVR programador y los niveles del AVR programado, que pueden ser de 0-5 V o bajar hasta 0-2 V. El buffer 74AHC125N se alimenta del pin Vcc del circuito target. En el circuito de la versin 1.0 en lugar de los buffers las lneas de programacin se aislaban con resistencias de 1.5k. En teora, tambin permiten la comunicacin entre dos microcontroladores que operan a diferente nivel de Vcc, pero algunos dicen que en la prctica no es una interface muy fiable.Circuito del programador USBtinyISP, versin 2.0. 58. Circuito del programador USBtinyISP, versin 1.0.Construccin de un USBtinyISP El programador USBtinyISP es open source. Todos los archivos estn disponibles en la web de su autora, www.ladyada.net. Como no pasa por muchas actualizaciones aqu estn algunas rplicas, actualizadas a noviembre de 2012. Circuito y PCB en Eagle. (Versin 2.0) Firmware del microcontrolador ATtiny2313. (Versin 2.0) Circuito y PCB en Eagle. (Versin 1.0) Firmware del microcontrolador ATtiny2313. (Versin 1.0) El firmware compilado es main.hex y se encuentra en la carpeta spi. Para construir cualquier programador de AVR con interface USB se sigue el mismo procedimiento, el cual se divide en dos etapas: 59. Elaborar la placa de circuito impreso, PCB, y soldar todos los componentes. En lo posible usamos un zcalo en vez del AVR del programador. Aqu terminaramos si el programador no se basara en un microcontrolador. De hecho, si compraste el kit de ensamblaje deadafruit, coloca el ATtiny2313 en el zcalo y ya puedes empezar a usar tu programadorUSBtinyISP. Quienes estn armando su programador con componentes propios, debern enfrentarse a la siguiente parte. Programar el AVR del programador usando otro programador. Esta fase puede ser la ms tediosa. Si al inicio nos cuesta conseguir ese otro programador, despus nos quebrar la paciencia usarlo con AVRDUDE. Si ya ests acostumbrado a usar otros programadores como el USBasp, entonces esto ser pan comido. Puedes seguir el procedimiento totalmente ilustrado por la misma Limor Fried en la pginawww.ladyada.net/make/usbtinyisp/make.html de su web. Desafortunadamente Limor solo gua durante la primera etapa. Y lo que para muchos puede caer como baldazo de agua fra, nos pide que no busquemos ayuda sobre la grabacin del firmware en su foro. ? Debe ser porque la respuesta involucra mltiples formas o para animarnos a comprar el kit, donde el AVR ya viene pre-programado.Uso del USBtinyISP Al conectar el programador el LED verde se enciende si su enumeracin se llev a cabo con xito. El programador USBtinyISP puede ser controlado por AVRDUDE o desde Atmel Studio 6. Su nombre para ser invocado desde AVRDUDE es usbtiny. Por ejemplo, para programar la memoria FLASH de un ATmega324P con el archivo main.hex podramos ejecutar:>avrdude c usbtiny p atmega324p U flash:w:main.hex:i El LED rojo se enciende durante el proceso de grabacin. La instalacin de WinAVR trae consigo los drivers de libusb que usa AVRDUDE. Sin embargo, Limor sugiere usar los drivers modificados [por ella]. Hay dos versiones: el driver para Windows de 32 bits y el driver para Windows de 64 bits. Los programadores que pueden ser controlados por Atmel Studio 6 son los que utilizan los protocolos de programacin estndar de Atmel; el STK500, por ejemplo. Pero ese no es el caso del USBtinyISP. En vez de implementar el protocolo STK500 en el firmware del microcontrolador, cosa que no hubiera sido posible debido a su poca memoria, de Limor Fried decidi escribir una aplicacin que hace la conversin del protocolo en la computadora. Para decirlo burdamente, se trata de un parche que engaa a Atmel Studio 6 hacindole creer que el USBtinyISP es un programador de protocolo STK500v2. Funcionando como programador STK500 el USBtinyISP tiene dos restricciones destacables respecto del original: 60. No siempre puede programar el byte de calibracin. Este byte permite ajustar la frecuencia del oscilador RC interno del AVR cuando se usa como reloj del sistema. Creo que nos es relevante puesto que lo habitual es usar el AVR con XTAL. Adems la calibracin del circuito RC interno tambin se puede hacer en tiempo de ejecucin, es decir, podramos aadir un par de lneas en el programa del microcontrolador para solucionar el problema. Sin duda la principal diferencia entre un programador original de Atmel y cualquiera de sus clones que trabajan emulando un puerto USB es la velocidad de programacin. El USBtinyISPacepta los comandos para cambiar la velocidad de programacin pero no los obedece. ElUSBtinyISP sigue con su tope de 1kB/s. Para que nuestro USBtinyISP emule un STK500 debemos seguir dos pasos: Instalar la aplicacin com0com para generar dos puertos series virtuales en nuestra computadora. Este software es open source y lo puedes descargarla desdehttp://com0com.sourceforge.net. Luego debemos instalar el software puente USBtiny500 de Limor Fried.Programador AVR Doper La inexistencia de un perifrico USB en los microcontroladores AVR de empaque DIP junto con la arquitectura y compatibilidad en el set de instrucciones han alentado a algunas personas a desarrollar libreras de USB software. Son libreras optimizadas a nivel ensamblador que manejan las rutinas mnimamente necesarias del protocolo USB. Tenemos por ejemplo, la librera de Igor Cesko explicada en la nota de aplicacinAVR309 de Atmel. Otra librera, con mejor soporte y actualizacin, es VUSB (acrnimo de Virtual USB), de Christian Starkjohann. Es la misma librera que utiliz Thomas Fischl para su programador USBasp. IMAGINO que cuando Christian vio el trabajo de Thomas pens yo puedo hacerlo mejor y decidi crear el programador AVR Doper.Programador AVR Doper en su circuito original. 61. AVR Doper es un proyecto Open Source tanto en hardware y software. Muchas de sus caractersticas son tambin apreciables en otros programadores: se alimenta desde el puerto USB, posee buffers en las lneas de programacin para programar dispositivos que trabajan con voltajes inferiores a 5V y hasta cuenta con un jumper como forma alternativa de reducir la frecuencia del reloj SCK (velocidad de programacin) similar al USBasp. El firmware del programador AVR Doper est basado en el protocolo de programacin STK500v2de Atmel y como tal puede programar todos los megaAVR y la mayora de los tinyAVR. El protocolo original maneja las tres interfaces de programacin: SPI, HVSP y HVPP, de los cuales AVR Doper acepta los dos primeros. Utiliza un conector de 10 pines para la programacin SPI que, con algunas variaciones, todava es compatible con el estndar de Atmel. Para la programacin de alto voltaje dispone de dos zcalos para los [tiny] AVR de 8 y 14 pines. Est