PIC 16F628A + Matriz led 7×5 = dado electronico

[singlepic id=5 w=420 h=340 float=center]

Es un dado electronico, controlado con un uControlador PIC 16F628A y una matriz de leds de 7×5 como display. fue un proyecto improvisado para la materia de arquitectura de dispositivos programables.

Dejo un video del funcionamiento, simulacion en proteus y archivo hex listo para cargarlo al pic.

[drain file 174 url]
[drain file 175 url]

[code language=vb]
Define CONF_WORD = 0x3f50

AllDigital

TRISA = %00000100
TRISB = %00000000

Dim numero As Byte
Dim fila As Byte
Dim datos As Byte
Dim x As Byte
Dim velocidad As Byte

velocidad = 40
datos = 0
numero = 0

Symbol boton = RA2

Symbol col1 = RA1
Symbol col2 = RA0
Symbol col3 = RA7
Symbol col4 = RA6
Symbol col5 = RA3

Symbol fila1 = RB1
Symbol fila2 = RB2
Symbol fila3 = RB3
Symbol fila4 = RB4
Symbol fila5 = RB5
Symbol fila6 = RB6
Symbol fila7 = RB7

inicio:

If boton = 1 Then

Gosub lanzar_dado

Endif

Gosub mostrar_numero

Goto inicio

End

lanzar_dado:

While boton = 1

datos = %00001

‘————————-animacion hacia la izkierda
While datos %00000 And boton = 1
Gosub escribir_dato
Gosub sumar
For x = 1 To velocidad
fila = 7
Gosub encender_fila
Next x
datos = ShiftRight(datos, 1)
Wend

‘————————-animacion hacia arriba
For fila = 7 To 1 Step -1
datos = %00001
If datos = %00001 And boton = 1 Then
Gosub escribir_dato
For x = 1 To velocidad
Gosub encender_fila
Next x
Gosub sumar
Endif
Next fila

Wend

Return

sumar:

numero = numero + 1
If numero > 6 Then
numero = 1
Endif

Return

mostrar_numero:

Select Case numero

Case 0

datos = %00000000
Gosub escribir_dato
fila = 1
Gosub encender_fila
datos = %00000000
Gosub escribir_dato
fila = 2
Gosub encender_fila
datos = %00000000
Gosub escribir_dato
fila = 3
Gosub encender_fila
datos = %00000000
Gosub escribir_dato
fila = 4
Gosub encender_fila
datos = %00000000
Gosub escribir_dato
fila = 5
Gosub encender_fila
datos = %00000000
Gosub escribir_dato
fila = 6
Gosub encender_fila
datos = %00000000
Gosub escribir_dato
fila = 7
Gosub encender_fila

Case 1

datos = %00100
Gosub escribir_dato
fila = 1
Gosub encender_fila
datos = %01100
Gosub escribir_dato
fila = 2
Gosub encender_fila
datos = %10100
Gosub escribir_dato
fila = 3
Gosub encender_fila
datos = %00100
Gosub escribir_dato
fila = 4
Gosub encender_fila
datos = %00100
Gosub escribir_dato
fila = 5
Gosub encender_fila
datos = %00100
Gosub escribir_dato
fila = 6
Gosub encender_fila
datos = %11111
Gosub escribir_dato
fila = 7
Gosub encender_fila

Case 2

datos = %01110
Gosub escribir_dato
fila = 1
Gosub encender_fila
datos = %10001
Gosub escribir_dato
fila = 2
Gosub encender_fila
datos = %10001
Gosub escribir_dato
fila = 3
Gosub encender_fila
datos = %00010
Gosub escribir_dato
fila = 4
Gosub encender_fila
datos = %00100
Gosub escribir_dato
fila = 5
Gosub encender_fila
datos = %01000
Gosub escribir_dato
fila = 6
Gosub encender_fila
datos = %11111
Gosub escribir_dato
fila = 7
Gosub encender_fila

Case 3

datos = %11111
Gosub escribir_dato
fila = 1
Gosub encender_fila
datos = %00001
Gosub escribir_dato
fila = 2
Gosub encender_fila
datos = %00010
Gosub escribir_dato
fila = 3
Gosub encender_fila
datos = %00110
Gosub escribir_dato
fila = 4
Gosub encender_fila
datos = %00001
Gosub escribir_dato
fila = 5
Gosub encender_fila
datos = %00001
Gosub escribir_dato
fila = 6
Gosub encender_fila
datos = %11110
Gosub escribir_dato
fila = 7
Gosub encender_fila

Case 4

datos = %00010
Gosub escribir_dato
fila = 1
Gosub encender_fila
datos = %00110
Gosub escribir_dato
fila = 2
Gosub encender_fila
datos = %01010
Gosub escribir_dato
fila = 3
Gosub encender_fila
datos = %11111
Gosub escribir_dato
fila = 4
Gosub encender_fila
datos = %00010
Gosub escribir_dato
fila = 5
Gosub encender_fila
datos = %00010
Gosub escribir_dato
fila = 6
Gosub encender_fila
datos = %00010
Gosub escribir_dato
fila = 7
Gosub encender_fila

Case 5

datos = %11111
Gosub escribir_dato
fila = 1
Gosub encender_fila
datos = %10000
Gosub escribir_dato
fila = 2
Gosub encender_fila
datos = %10000
Gosub escribir_dato
fila = 3
Gosub encender_fila
datos = %01110
Gosub escribir_dato
fila = 4
Gosub encender_fila
datos = %00001
Gosub escribir_dato
fila = 5
Gosub encender_fila
datos = %00001
Gosub escribir_dato
fila = 6
Gosub encender_fila
datos = %11110
Gosub escribir_dato
fila = 7
Gosub encender_fila

Case 6

datos = %01110
Gosub escribir_dato
fila = 1
Gosub encender_fila
datos = %10001
Gosub escribir_dato
fila = 2
Gosub encender_fila
datos = %10000
Gosub escribir_dato
fila = 3
Gosub encender_fila
datos = %11110
Gosub escribir_dato
fila = 4
Gosub encender_fila
datos = %10001
Gosub escribir_dato
fila = 5
Gosub encender_fila
datos = %10001
Gosub escribir_dato
fila = 6
Gosub encender_fila
datos = %01110
Gosub escribir_dato
fila = 7
Gosub encender_fila

EndSelect

Return

escribir_dato:

col1 = datos.4
col2 = datos.3
col3 = datos.2
col4 = datos.1
col5 = datos.0

Return

encender_fila:

Select Case fila

Case 1
fila1 = 0
WaitUs 500
fila1 = 1

Case 2
fila2 = 0
WaitUs 500
fila2 = 1

Case 3
fila3 = 0
WaitUs 500
fila3 = 1

Case 4
fila4 = 0
WaitUs 500
fila4 = 1

Case 5
fila5 = 0
WaitUs 500
fila5 = 1

Case 6
fila6 = 0
WaitUs 500
fila6 = 1

Case 7
fila7 = 0
WaitUs 500
fila7 = 1

EndSelect

Return
[/code]

Adrian MB

Me gusta la electrónica, programación y todo lo relacionado. Ing. en Mecatronica de la UPIITA del IPN y estudiante de Diseño Industrial en la UAM. @adrianmtzb http://adrianmb.mx

También te podría gustar...

  • jose Bejarano

    compañero gracias por su respuesta.
    sera posible que me puedas enviar el archivo de compilación en basic si no es mucha molestia.
    agradezco de antemano su atencion.
    jebm1289@hotmail.com

  • Jose bejarano

    hola amigo feliz día, te escribo ya que estoy realizando el proyecto del dado, pero lo necesito en lenguaje de assembler por favor si lo tienes me lo puedes enviar ya que seria de gran utilidad.
    agradezco de antemano tu colaboración.
    Mi correo es jebm1289@gmail.com o al jebm1289@hotmail.com

    • Hola que tal, este proyecto se realizo solamente en lenguaje basic, pero ya que se usan rutinas lo podrás portar fácilmente a assembler. saludos.

  • victor

    hola adrian podrias indicarme la lista de materiales me harias un gran favor

  • El basic pro es mas legible mas facil de aprender y de dominar existe un libro de basic pro de carlos reyes tercera edicion viene con circuitos y programacion muy completo muy didactico

  • Hola,

    Este modelo de pic cuenta con un oscilador interno, por lo que no es necesario utilizar un cristal, en cuanto a la matriz de leds algunas un par de pines son comunes, por eso se conectan solo 5, para que puedas conectarla correctamente debes buscar el diagrama en la hoja de datos correspondiente a tu matriz, en mi caso use una modelo MUR30A, puedes encontrar su datasheet en la seccion de utilidades mas arriba.

  • marvin

    hola que tal,
    me gusta mucho el dado, ya lo estoy empezando a montar, pero apenas soy muy muy novato en esto de los pics, mi rpegunta es al montarlo en una proto necesito un cristal de cuarzo para que funcione o este pic ya tiene incorporado un oscilador o algo asi que me permita realizar la funcion, otra cosa compre una matriz de leds 5x7
    y tiene 7 patitas en la parte de arriba y 7 en la parte de abajo , y en tu diagrama que esta en proteus veo que abajo tienes conectadas las 7 pero arriba solo 5, que pasa con las otras dos restantes
    espero tu respuesta gracias

  • Bruno

    Hola! mira me interesa mucho, que compilador utilizaste? yo un principiante en microbasick y estoy realizando un proyecto de este tipo, mira como para guiarte hice la matriz de led que aparece en la revista de u-control http://www.ucontrol.com.ar/wiki/index.php?title=Matriz_de_LEDS_de_8x8 pero tengo bastantes dudas, me servira este circuito que hice para tu programacion? necesito saber si mi plaqueta funciona, estoy usando un 16f628a como el tuyo, el problema que tengo es como cambia de columna sino me equivoco trabaja con un 74hc164, desde ya muchas gracias! saludos!ª

    • Hola que tal, use el compilador “pic simulator ide” , la programacion aqui presentada no es compatible con la matriz de uControl por que esa usa registros de desplazamiento y en mi codigo se asignan las salidas del pic directo a los pines de la matriz

  • zhabino

    Oralee voy a ver que hago como te digo soy nuevo en programacion de pics y neta si tienes tutoriales para la creacion de pics en Pic Simulator Ide me los pasas.

  • zhabino

    Define CONF_WORD = 0x3f50

    de esto tendria ke cambiar xke en el ide ya lo cambie en esto quiero saber si lo borro o dime disculpa solo que tengo este proyecto para entregarlo a mas tardar dentro de 24 horas ya tngo todo los componentes pero a la hora que lo probe me corre pero no me lo representa bien y otro de que soy nuevo en esto pero neta si me llama la atencion y quiero crear un cubo 3x3x3 pero no tngo idea agradeceria mucho tu ayuda. de antemano gracias.

    • Debes de remplazarlo por el nuevo que te da el IDE.

      Define CONF_WORD = 0x3f50 solo es valido para el 16f628.

  • zhabino

    Gracias solo dime que valores cambiaria para un pic16f84a lo ke paza que por aca no venden ese pic16f84a si puedes me envias el codigo a mi correo si no es tanto pedir. sabinopazj13@hotmail.com.

    • Lo primero que debes cambiar dentro del IDE es el chip a usar, después cambiar la palabra de configuración ya que con este 16f628 se esta usando el oscilador interno, el cual el 16f84 no posee por lo que debes colocar un cristal oscilador, por lo de las entradas no hay problemas son 100% compatibles.

      Saludos

  • zhabino

    🙂 ztha bonit el proyecto pero quiero hazerlo con el pic16f84a el codigo. Trate de cambiar valores pero no funciona me da error en la linea 55 como una mala expresion..

    • Hola que tal, lo que sucede es que el plugin que utilizo para formatear el codigo cambio algunos signos, pero en cuanto pueda reparo el codigo

    • Listo ya arregle el codigo 😉

  • princess

    Auch no puedo descargar el .hex………… como lo descargo???

    • Ya que esta en formato .hex debes de darle clic derecho y escoger la opcion de guadar como, si no puedes en un rato libre lo subo mejor en archivo rar.

  • jhon

    nesesito hacer lo mismo pero con el pic16f877a. seera q me puedes ayudar? y la programacion

  • valentina

    tengo que armar un vehiculo inteligente utilizando el pic 16f628a y necesito que alguien me explique con que funcion lo puedo hacer para que detecte cuando se estrelle contra algo………grax

    • Para detectar la colisión puedes usar un limit switch y leerlo como una entrada digital en tu pic, dependiendo el lenguaje que estes usando es la funcion que debes usar para leer el sensor.

  • link08

    disculpen sera que alguien tenga el codigo de otra aplicacion para la matriz ..algo asi como que forme letras!!
    disculpen la ignorancia pero casi no se de programacion
    de antemano gracias

    • Por ahora no tengo otro código, pero es muy fácil modificar este, checa como están estructurados los datos de salida y tomalo como base para sacar letras

  • realmente el codigo funciona a mi me funciono simulando en proteus ya hace meses, lo modifique hice infinidad de aaplicaciones te lo recomiendo

  • gil

    me gustaria poder descargar el HEX y el DSN pero no sirven los links.. los puedes subir otravez por favor

  • edwin

    esta muy padre papi, voy a analizar tu codigo pq yo trabajo en assembler y kisiera hacer algo parecido.
    me gustaria poder descargar el HEX y el DSN pero no sirven los links.. 🙁 podrías ponerlos de nuevo?

  • jorge

    amigo podrias suir de nuevo el hex? en que compilador cargaste el programa? saludos

  • yoko

    QUERIA SABER SI TENDRAS ALGUNAS FOTOS O QUE ME PUEDAS MOSTRAR COMO ESTA CONECTADO DE TU PIC AL DISPLAY YA QUE EN EL VIDEO NO SE NOTA CON CLARIDAD.

    SAUDOS.

    • Fotografias no tengo, te puedes guiar con el esquemático al principio del post, aunque no todas las matrices son iguales, deberías buscar el datasheet correspondiente a tu matriz, de cualquier forma el modelo que use es MUR30A puedes encontrar mas info en la sección de Datasheet’s.

  • yoko

    Queria saber si tal y como esta en proteus, lo hiciste en la protoboard como en tu video utilizando, PIC 16F628A y una matriz de leds de 7×5 como display, y la resistencia de 10k.Ya que quiero utilizar tu diseño para un proyecto!

    • Si claro, en el proto esta tal cual que en proteus. Si haces el proyecto manda fotos o videos para subirlos al blog 😉

  • azpiazu

    voy a problar el codigo y el circuito … tal vez lo modifique

    muchas gracias por el gran aporte

    • De nada, gracias a ti por la visita, por cierto si quieres modificar el programa esta compilado con PIC SIMULATOR IDE, seria bueno que mandaras fotos o videos cuando lo armes 🙂

  • Tanto como experto no creo, de hecho aun me considero novato, este programa aunque es funcional se le pueden hacer muchas optimizaciones. Respecto a tus dudas seria mejor que las expongas aqui en el blog, asi todos los que nos visitan podrian enterarse tambien ya que quizas tengan las mismas dudas.

  • rene

    hola estoy incursionando con matricez de leds pero aun no logro hacer mucho quisiera por favor q me enviaras el codigo de tu dado sea en basic de preferencia assembler.

    te lo agradeceria de antemano

    saludos

  • thecrow

    podrian brindarme la codificacion en assembler

    • fijate que el codigo no lo realice en assembler, solo lo tengo en basic, si te sirve asi avisame.

      • azpiazu

        me gusta el proyecto.. pòr favor podrias enviarme la programacion a mi correo es rene_870@hotmail.com

        saludos

        • acabo de subir el codigo 🙂

          • azpiazu

            gracias adrian veo q eres experto en visual yo la verdad q no programo con visual mucho utilizo mas el lenguaje assembler me podrias enviar tu correo para poder hacerte mas preguntas por fa

            saludos

  • pues diagrama de flujo no realice para este proyecto, de hecho para ninguno hago df jeje. Lo unico que tengo aparte de lo del post, es el codigo en basic; si lo necesitas o quieres hecharle un ojo avisame y lo posteo.

  • Kim

    muy interesante algun diagrama de flujo?

  • Kim

    Muy interesante me gustaria saber mas al respecto.