1/24/2015

MicroCode Studio & PBP: Uso del ADC con PIC16F887 – Encender LEDs

Siguiendo con las prácticas en Pic Basic Pro y utilizando el MicroCode Studio para nuestros Microcontroladores PIC, en esta ocasión utilizaremos el ADC del PIC16F887 para encender 8 LEDs dependiendo del voltaje en un potenciómetro.

Se tiene 8 LEDs con su debida resistencia conectados al puerto D del microcontrolador, un potenciómetro conectado al canal analógico 0 (RA0) y su cristal de cuarzo con sus capacitores conectado en sus respectivos pines, además se incluye un pulsador y una resistencia conectados al Master Clear (MCLR) para usarlo como Reset del circuito, aunque para nuestro ejemplo no es muy utilizado ya que solo necesitamos conocer el funcionamiento básico del ADC. El circuito utilizado se muestra a continuación:

1/17/2015

Matriz de LEDs 8x8


Saludos a todos!! Este no va a ser una publicación como las que se han venido publicando con la información detallada de lo que hace paso a paso el circuito o el firmware, ya que es un trabajo que se hizo en conjunto con un buen amigo y administrador de nuestro grupo Electrónica&Robótica (Julio Aguilar, si deseas saber mas sobre su trabajo visita su blog ALL IS ElectroNics!!), esta publicación sera como para dar algunas ideas o tips sobre como el circuito, como armarla y programarla.

Circuito:
Hace un tiempo atrás que realice una matriz de LEDs de 8x8 basado en el circuito que publicaron en uControl, de ahí partí y utilice lo que creía conveniente para poder experimentar con ella. Así que sin mas por el momento dejo el circuito utilizado:

Como vemos no es muy complejo el circuito uta etapa de regulación de voltaje con un 7805 para mantener un voltaje fijo en la salida de 5 volts, así que puedes alimentar a 9 o 12 volts sin problema, por el momento se utiliza un PIC16F627 (sabemos que por sus características de este micro no podemos exigir mucho pero para iniciar a experimentar considero que es suficiente), un registro de corrimiento 74LS164, sus 64 LEDs con sus debidas resistencias, ocho transistores NPN en este caso los PN2222 (Se puede utilizar otro) con sus debidas resistencias (Por cierto use este material por que era lo que tenia en casa).

Aquí unas imágenes del PCB saliendo del cloruro férrico y terminada de limpiar del toner:



Para hacer mas simple el ruteado y por cuestiones de tamaño decidí no hacer las pistas de una terminal de LED así que eso lo solucionaremos al momento de estar soldando, lo único que tenemos que hacer sera aprovechar la terminal del LED para hacer un puente con el otro, a continuación la foto de como hacerlo:


Una vez hecho todo esto nos quedara de la siguiente forma, recuerden soldar 64 LEDs es un trabajo laborioso, ahora añadan el hecho de hacer sus puentes pues si se van a llevar un buen tiempo así que si tienen pensado hacer una les recomiendo poner buena música antes de iniciar y mucha paciencia jejejeje.


Una ves que hayamos terminado de soldar todos los componentes pues ya tendríamos listo nuestra matriz como se muestra a continuación:


Código:
Bueno les cuento una vez que termine mi matriz la guarde por un tiempo ya que no tenia mucho tiempo para trabajar en el firmware, que por cierto publique los archivos de la matriz en el grupo, no se preocupen dejare el enlace de descarga al final del texto y en futura publicaciones abordare el tema mas detalladamente, un día el buen amigo Julio decidió en un rato libre trabajar en un pequeño código para darle vida a la matriz y me mando el archivo HEX para que pudiera probar como funcionaba. El código se trabajo usando el IDE de Microhip "MPLAB X" y el compilador XC8, el código completo de las primeras pruebas esta disponible en su cuenta de GitHub para los que trabajan en C o ya se tiene conocimientos podrán entender y migrar o tomar ideas de este pequeño código para sus proyectos, aquí les muestro lo que realizo:

Vídeos:
Una vez visto esto dejare los vídeos de prueba que realice con la información que me mando.

Simulación y breve introducción del código, hecho por Julio:


Primer demo donde se aprecia el desplazamiento de una figura (Esta es la versión que se tiene disponible el código):


Segundo demo donde se aprecia el desplazamiento de unas figuras y se invierte el sentido (Versión de código ya no disponible por cuestiones del autor):



Tercer demo donde se aprecia el desplazamiento de unas figuras y se invierte el sentido (Versión de código ya no disponible por cuestiones del autor) y es una corrección de la anterior versión ya que se notaba un ligero parpadeo en los LEDs:



Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.

Como dije anteriormente este fue un trabajo en conjunto así que disculpen si la información no esta disponible al 100% pero empezare a trabajar en las próximas publicaciones donde se ilustre a detalle todo lo que se necesita para una matriz incluso iremos trabajando en un nuevo firmware que estará disponible conforme se avance en el blog.

Agradecimientos a Julio Aguilar por su excelente trabajo.

Actualizaciones:
  • 05/07/2018: Se corrigió el enlace de descarga.

1/10/2015

MPLAB X & C18: Uso del TIMER 0 como temporizador

Una parte muy importante en los microcontroladores son los TIMERs y que serán temas que abordaremos en el blog tal vez un poco lentos pero lo haremos, para comenzar pues lo haremos con el TIMER cero, ahora bien cuando al TMR0 se controla por un evento externo se dice que se está usando como contador, por el contrario si se controla con un evento interno se está usando como temporizador que será el tema que veremos en esta ocasión, existen mas TIMERs pero eso se explicara cuando llegue su turno.

El TMR0 cuenta con las siguientes características:
  • Modo de operación como temporizador o contador, ambos casos con resolución de 8 y 16 bits.
  • Registros de lectura y escritura, ósea que podemos inicializarlo en un algún valor deseado.
  • Prescaler programable de 8 bits.
  • Permite usar una fuente de reloj externa o interna.
  • Para el modo de contador permite seleccionar con que flanco se activa al momento de conectarle el reloj externo.
  • Interrupción por desborde (overflow), ósea que cuando este llegue a una cuenta deseada podemos atenderla con alguna interrupción, cuando esto pase el programa abandona temporalmente lo que estaba haciendo para atender la subrutina de interrupción, pero antes guarda en una región especial de la memoria llamada pila la dirección de la siguiente instrucción de programa, para que cuando acabe la subrutina de interrupción pueda seguir ejecutando el programa por donde se había quedado.
En todo caso se recomienda revisar el datasheet del microcontrolador que se está usando para comprender mejor el tema. Nosotros utilizaremos el PIC18F4620 para realizar nuestros ejemplos.

Para configurar el TMR0 se utiliza el registro T0CON que se muestra a continuación: