¡Se contar!

      18 Comments on ¡Se contar!

Seguimos con las tribulaciones electrónicas de un chispas novatillo, después de que hace unos dias aprendiese a base de leches (calentitas, eso si) que no se debe descuidar la posición de un pic en un zocalo.
Si lo alimentas al revés, se ¡¡QUEMA!!.. con olorcillo a torrefacto y todo 😀

Hoy hablaré de los displays de 7 segmentos, una cosa de lo mas antigua pero que aún se usa bastante para aplicaciones sencillas y para que los principiantes hagamos ejercicios tan inútiles como estúpidos, pero que tienen su terenguendengue (R).

Todos los que hayais tenido un 286, un 386 (sx o normal), o un 486, recordareis el botón de ‘turbo’ que tenía el ordenador. Era como lo que se viene ahora a llamar un ‘overclocking’ pero que venia de serie. Simplemente le dabas al botón y el ordenador iba el doble de rápido, a 8 o 16 Mhz, a 16 o 33Mhz, a 33 o 66Mhz, la velocidad se representaba en la caja mediante el equivalente prehistórico al moderno LCD. Un display de 7 segmentos de 2 dígitos.
Como tengo varios de esos vestigios del pasado en mi chatarrería personal, he decidido hacer algo con ellos ahora que estoy aprendiendo a programar PICs.

Lo primero que he descubierto es, aparte de que su nombre es debido a que se componen de 7 leds y que cada uno de ellos se nombra con una letra, que los hay de dos tipos. Los de ánodo común y los de cátodo común.


Esquema display 7 segmentos

Se diferencian en que en los primeros, una sola línea de entrada alimenta a todos los leds que configuran el display y son los cátodos, la patilla negativa, los que salen en número de 7 (8 si contamos el punto decimal). En los segundos es justamente al revés, cada led es alimentado por separado mediante 7 u 8 líneas y es el cátodo el que junta a todos y sale uno solo.
Parece una diferencia tonta, pero a la hora de conectarlos al circuito hay que hacerlo todo al revés, por eso, como yo me estaba fijando en un circuito que usaba un display de cátodo común, lo primero que hice fué comprobar de que tipo era el mio.. en efecto, justo lo contrario de lo que necesitaba, era de ánodo común.

Me fabriqué un cable a partir de uno de disquetera de PC que conectaba mi minientrenador de PIC al display con las conexiones correctas. No solo activo las lineas del display, también le paso por ese cable la corriente necesaria para el ánodo común mediante la activación de RB7 (la patilla 8 del puerto B, el cable verde que se ve en la foto).

Minientrenador 16F84 (anverso) Contando
Minientrenador 16F84 (reverso)

Ahora, ya pasandome al C, que el ensamblador sigue dandome sarpullido, escribí lo siguiente:

// Miniprograma “Aprendiendo a contar”
// Usa un display de 7 segmentos anodo comun para contar del 0 al 9
// de manera indefinida
// El display está conectado al PORTB
//
#include <16F84.h>
#USE DELAY( CLOCK=4000000 ) /* Usamos un reloj a 4 Mhz */
#FUSES XT,NOWDT,NOPROTECT,NOPUT
/* Usamos XT mode, No Watch Dog, No Code Protect, No Power-up Timer */
#byte port_b=6 /* define la posicion del registro port_b */
#byte port_a=5 /* define la posicion del registro port_a */
// Mi display es de ánodo comun y recibe la alimentacion por el RB7 (1on 0off)
// Para activar un led el bit se debe poner a 0, con 1 se desactiva
// Así que este es el mapa de leds para cada dígito del 0 al 9
byte CONST LED_MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};
//byte CONST LED_MAP[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//
main()
{
byte cnt, right,num ;
set_tris_b(0); /* Pone el port_b de salida */
set_tris_a(0); /* Pone el port_a de salida */
port_b = 0xFF; /* FF port_b = alimento el LCD & port_b */
port_a = 0x00;
// Lo repito hasta que me aburra
while(1)
{
// Aprendamos a contar con coco
for (cnt=0;cnt<10;cnt++)
{
port_b = LED_MAP[cnt];
DELAY_MS(1000); /* Un segundo entre numeros */
}
}
}

Ale, a compilar, al programador y de ahí, el chip al entrenador.
¡Ya se contar en PIC!

18 thoughts on “¡Se contar!

  1. Fernando

    Enhorabuena! Todos estos experimentos tuyos me recuerdan mi época de estudiante de electrónica 😉
    Claro que yo lo hacia todo con puertas y esas cosas, hace diez años o más eso de los PIC no se estudiaba…
    El proximo paso… ¿marcador de porcentaje de uso de CPU?

  2. Mirabal....

    Hay que ver lo que se te ocurre ….

    supondo que sera mas facil para ti contar en binario, je je
    es decir un pgm que haga 0001 0010 0011 ….. y asi

    existen conversores de binario a 7 segmentos ….

  3. Makinolo

    Bueno, el siguiente paso a contar de 0 a 9 va a ser un poco mas gordo. O bien le conecto el LCD azul que tengo por aquí cogiendo polvo o me meto ya de lleno con usar el PIC como USART y recibir datos en serie desde el puerto serie del PC.
    Me va a explotar la cabeza de tanto leer!!!

    Por cierto, Mirabal.. no tendrás nada que ver con el colegio de Boadilla del mismo nombre, ¿no?

  4. Mirabal....

    joder si te conozco a ti a augusto, a pepe, a nieto, je je je incluso al machaca …..
    … si puedes ver el aorreo lo sabras ….

    ya que veo que se te ocurren cositas …..

    el manejo de los lcd desde un microcontrolador puede ser relativamente sencillo, (si sabes cual es el modelo de lcd, y conoces las patillas de este, documentacion en general) el manejo de un lcd es como escribir en una memoria, es pues dencillo usar un puerto. no te puedo ayudar mucho en el tema del pic ya que no lo he usado nunca, pero en otras
    cuestiones….
    por cierto busca en la web, ya que debe de haber algun emulador de pic para que pruebes el pgm antes….. y como puedes ver los registros puedes aprender a controlarlo de pm.

    de todas formas es bueno ir aprendiendo a utilizar las posibilidades de un micro poco a poco. por ejemplo por funcionalidades. si tienes alguna duda, de momento todabia me acuerdo de algunas cosas.

    Salu2

  5. Makinolo

    Hombre, ya he visto el email 😉
    Pues estoy intentando lo del LCD, que es un Hitachi de los estandar y tengo toda la documentación, pero lo jodido de los PIC no es programarlos ni emular los programas sino hacerte los circuitos y que no tengan problemas.
    De momento se enciende, pero aun no pone na en el LCD.. proximamente en sus pantallas 🙂

  6. ivang

    Pregunta de otro novato… de donde sale la definición del LED_MAP.
    He comprobado en binario y me da: 1100000 11111001 10100100 10110000 10011001 10010010 10000010 11111000 10000000 y 10011000
    No le veo la relación ni para anodo comun ni para catodo comun…

    Seguro que será una cosa obvia, pero no lo veo, me lo podrías explicar?

    Graciassss

  7. Makinolo

    Tienes que fijarte en el grafico de la definicion de los segmentos. Por ejemplo para poner un 1 necesitas encender los segmentos B y C. En el LED_MAP la posicion 1 indica 0xF9, es decir 11111001 como bien dices. La relacion entre los bits y los segmentos en el circuito que yo he construido es XGFEDCBA. Eso significa que estan activados todos los segmentos menos el C y el B, osea
    11111001
    XGFEDCBA
    pero como estamos en ánodo comun, la lógica es negativa, por lo que en realidad eso significa que estan activados el segmento B y C unicamente, osea, obtenemos un 1 en el display.
    Si estuviesemos en ánodo comun el valor 0x06 es 00000110, osea, directamente activados el segmento B y el C.
    No se si me he explicado muy bien, pero creo que queda mas o menos claro ¿no?

  8. Tartalo

    Aupa!Animaros y volvera a reflotar el mus. Si hace falta pa que se saque pasta se hace una plataforma como la que le han hecho a Nihat para que se quede en la real…Se recauda pasta con aportaciones…Jejeje.Un saludo y animaros!!!

  9. Makinolo

    No solo hace falta ánimo, hace falta tiempo 🙂 No te puedes imaginar la cantidad de veces que sale el tema recurrente de retomar el mus de Commm, bueno, que sería uno nuevo claro, el mus de Zinkia. A nuestro presi le encantaría… lo mismo algun dia 😀

  10. Tartalo

    Haber si con unpoco de suerte
    (Mejor pronto que tarde)vuelve a resucitar el Mus…De Zinkia…Jejeje!Estaria genial.Yo me ofrezco para hacer colecta para que se saque pasta. Animo…Y si al presi le encantaria…Que menos que tener al presi conmtento…jejeje.Aio y un saludo.Y ojala reaparezca el mus.

  11. Makinolo Post author

    La verdad es que no tenia ni idea de lo que era un Turbo Timer, pero ahora que lo he buscado no entiendo muy bien como alguien ha ido a preguntar en un post sobre microcontroladores acerca de un accesorio para tunear coches que se cuida de que se enfríe el turbo antes de finalizar un viaje. No se, me teneis loco.
    Yo de coches na de na, no me interesan mucho, y de tuning menos todavia. Lo siento.

Leave a Reply

Your email address will not be published. Required fields are marked *