Archivos para junio, 2014

Hace aproximadamente tres meses compartí con ustedes la primera versión de este TV-B-Gone utilizando como base de desarrollo la placa Arduino Pro Mini (5V/16MHz). Si bien es completamente funcional y el diseño es reducido, no alcanza a ser lo suficientemente discreto en ciertos lugares donde podemos ser continuamente observados por cierto público perspicaz. No debemos olvidar que, si bien el conjunto es pequeño, éste emplea una fuente de alimentación externa, en este caso se trata de un conjunto de cuatro baterías AAA (conectadas en serie) que reducen la discreción de nuestro TV-B-Gone.

El análisis realizado en el párrafo anterior, me llevó a revisar nuevamente la teoría y principio de funcionamiento de este dispositivo. La versión original utiliza como base de desarrollo el microcontrolador ATtiny85, el cual dispone de 8KB de memoria flash y, para este caso, se ha fijado su frecuencia de reloj en 8MHz con oscilador externo. Otra característica importante a tener en cuenta en la versión original, es su tensión de alimentación de 3V, lo cual nos llevaría a reducir drásticamente las dimensiones de nuestra fuente de alimentación y emplear una batería tipo “botón”, como la ampliamente conocida CR2032 utilizada en las motherboards.

Luego, para continuar reduciendo aún más el diseño en aras de la discreción, he reducido el número de LED’s infrarrojos a solamente uno. El siguiente punto de análisis fue el uso de un oscilador externo, ya que la presencia del mismo ocupa un pequeño espacio adicional en nuestra placa.

Ventajas de utilizar un oscilador externo:
• Es más preciso y presenta menos variaciones que el oscilador RC interno que posee el microcontrolador, lo cual puede marcar la diferencia en el correcto funcionamiento.

Desventajas de utilizar un oscilador externo:
• Pequeño costo adicional.
• Ocupa un pequeño espacio adicional.
• Agrega una pequeña complejidad a las conexiones.

En particular, recomiendo imperativamente el uso de un oscilador externo en la medida de lo posible, salvo ciertas situaciones extremas como las ocurridas durante el desarrollo de este proyecto, a saber:
• Inexistencia de resonador cerámico de 8MHz en las casas de electrónica de mi localidad y zonas aledañas.
• Cristal de cuarzo de 8MHz encapsulado HC49/U únicamente (grandes dimensiones para nuestra pequeña placa).

Los inconvenientes analizados en el párrafo anterior me llevaron a realizar pruebas de funcionamiento utilizando el oscilador RC interno de 8MHz que posee el microcontrolador y dichas pruebas resultaron exitosas bajo diferentes condiciones y, particularmente, me sorprendió la estabilidad del oscilador RC interno. No debemos olvidar que, por su naturaleza, un oscilador RC presenta variaciones de acuerdo al voltaje y temperatura de funcionamiento.

Con el análisis realizado anteriormente, el diagrama esquemático de nuestro pequeño TV-B-Gone se observa en la siguiente imagen:

 
Lista de Componentes
1 Microcontrolador ATtiny85-20PU
1 Pulsador tipo “push button” 6mm [4 terminales] o Interruptor SPST pequeño.
1 Transistor PN2222A
1 LED IR 5mm 940nm haz angosto [de apariencia blanco]
1 LED Rojo 3mm difuso [opcional ]
1 Resistencia 1KO 0.25W [opcional ]
1 Resistencia 150O 0.25W
1 Capacitor Electrolítico 100uF 16V
1 Capacitor Cerámico 100nf 50V
1 Portapilas para batería CR2032

Antes de comenzar con el montaje debemos realizar la carga del firmware correspondiente a nuestro microcontrolador. Utilizaremos el firmware provisto por Adafruit Industries para su kit TV-B-Gone de código abierto. Descargaremos el firmware correspondiente a la versión 1.1, ya que se adapta perfectamente a nuestro diseño.

Autor: Adafruit Industries
Web: www.adafruit.com
Tamaño: 18887
SHA1 Hash: 8EE3E4CE97DFA2151692DA9E392D565618161F8E
Descarga

Del archivo “tvbgone11.zip” descargado anteriormente, debemos extraer el archivo “tvbgone.hex”.

A continuación, debemos descargar e instalar el software WinAVR, el cual nos permitirá cargar en nuestro microcontrolador firmware descargado anteriormente.

El lector perspicaz, ya inferirá que utilizaremos nuestra placa Arduino como programador para cargar el firmware en nuestro microcontrolador ATtny85. Para ello, debemos lanzar el IDE de Arduino y, en la barra de menú seleccionamos “Archivo” –> “Ejemplos” –> “ArduinoISP”. A continuación, desplegamos el menú “Herramientas” –> “Tarjeta” –> “Arduino UNO” (o la placa que corresponda). Luego, desplegamos nuevamente el menú “Herramientas” –> “Puerto Serial” –> “COM9” (o el puerto serie que corresponda). Finalmente, hacemos click en el botón “Cargar”. Con lo realizado anteriormente, ya programamos nuestra placa Arduino UNO como programador AVRISP.

En la siguiente imagen se observa cómo debemos realizar la interconexión entre nuestra placa Arduino UNO y el microcontrolador ATtiny85.

 
ATtiny85 –> Arduino UNO
RESET (Pin 1) –> Arduino UNO (Pin 10)
MOSI (Pin 5) –> Arduino UNO (Pin 11)
MISO (Pin 6) –> Arduino UNO (Pin 12)
SCK (Pin 7) –> Arduino UNO (Pin 13)

Capacitor electrolítico 10uF en placa Arduino UNO, terminal positivo a pin “RESET” y terminal negativo a pin “GND”.

Llegados a este punto, y habiendo realizado exitosamente los pasos anteriores, ya estamos en condiciones de cargar el firmware TV-B-Gone v1.1 en nuestro microcontrolador ATtiny85. A continuación se encuentra el comando que debemos ejecutar y los resultados de la ejecución del mismo en caso de ser exitoso.

C:\>avrdude -P com9 -b 19200 -c avrisp -p attiny85 -v -e -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m -U flash:w:tvbgone.hex:i

avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:WinAVR-20100110binavrdude.conf"

         Using Port                    : com9
         Using Programmer              : avrisp
         Overriding Baud Rate          : 19200
         AVR Part                      : ATtiny85
         Chip Erase delay              : 4500 us
         PAGEL                         : P00
         BS2                           : P00
         RESET disposition             : possible i/o
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65     6     4    0 no        512    4      0  4000  4500 0xff 0xff
           flash         65     6    32    0 yes      8192   64    128  4500  4500 0xff 0xff
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
           calibration    0     0     0    0 no          2    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel AVR ISP
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.11s

avrdude: Device signature = 0x1e930b
avrdude: safemode: lfuse reads as FE
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: erasing chip
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: reading input file "0xe2"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.07s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe2:
avrdude: load data lfuse data from input file 0xe2:
avrdude: input file 0xe2 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.03s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xdf"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.04s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xdf:
avrdude: load data hfuse data from input file 0xdf:
avrdude: input file 0xdf contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.02s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xff"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.03s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xff:
avrdude: load data efuse data from input file 0xff:
avrdude: input file 0xff contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.03s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "tvbgone.hex"
avrdude: writing flash (8132 bytes):

Writing | ################################################## | 100% 15.85s

avrdude: 8132 bytes of flash written
avrdude: verifying flash memory against tvbgone.hex:
avrdude: load data flash data from input file tvbgone.hex:
avrdude: input file tvbgone.hex contains 8132 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 11.20s

avrdude: verifying ...
avrdude: 8132 bytes of flash verified

avrdude: safemode: lfuse reads as E2
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Habiendo resultado exitosa la carga del firmware en nuestro microcontrolador, podemos proceder sin mayor demora a construir el circuito de acuerdo al diagrama esquemático mostrado anteriormente.

La placa terminada se observa en la siguiente imagen:

 
Como medida de protección adicional, podemos proteger nuestra pequeña placa con tubo termocontraíble de 1 pulgada.

 

Anuncios