Autor Tema: Famoso PIC 16F84A  (Leído 5937 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Famoso PIC 16F84A
« en: 06 de Mayo de 2008, 14:53:18 »
Hola amigos del foro!!

Estoy intentando realizar un proyecto con el PIC 16F84A y a su misma vez con un LCD 2x16, mis objetivos son varios hago un pequeño resumen

Inicio(mensaje0)-->A los 10 segundos desaparece(mensaje0)-->presiono un interruptor1 (aparece otro mensaje1)
                                                                                         -->presiono un interruptor2 (aparece otro mensaje2)

Por el momento he conseguido que en el display aparezcan los mensaje.

Alguien me sabria decir como podria hacer que el mensaje0 desaparezca a los 10 segundos...........y despues apareciera los otros mensajes cuando presiono el interruptor?????

Utilizo el codigo assembler...ya sabeis extension del archivo .asm y dspues todo su proceso...

Gracias a todos!! :) 

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Famoso PIC 16F84A
« Respuesta #1 en: 06 de Mayo de 2008, 15:18:20 »
Holaaaa:

Bienvenido al foro SR: vakjorsan.
Hay un sitio que se llama, almacén de asembler, date una vuelta por allí, a ver si encuentras algo parecido.

Aquí en todopic

Saludos...

Bye('_').
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Famoso PIC 16F84A
« Respuesta #2 en: 06 de Mayo de 2008, 15:23:43 »
Saludos vakjorsan, bienvenido al foro!  :mrgreen:

Bueno tendrías que primero contar los 10 segundos... lo puedes hacer usando la interrupción por timer0. Si lo configuras con pre-escala de 1:256 y usas cristal de 4MHz, entonces se desbordaría a 65.28ms... o sea, para contar 10 segundos necesitarías que eso ocurriera unas 153 veces, lo que daría 9.98 segundos (sirve como 10, no?  :mrgreen: )... luego para borrar el LCD, recuerda que hay un comando del display para eso: el 0x01... entonces mandas ese valor igual que mandas los datos, pero con el pin del LCD RS = 0 para que éste entienda que se trata de un comando y no de un dato. También puedes enviar el comando 0x02 que envia el cursor al home.

Luego debes habilitar la interrupción por cambio en puerto B (por supuesto, los interruptores deberán estar entre los pines RB4:RB7 del pic)... así, cada vez que actives el interruptor ocurrirá la interrupción... en la rutina de interrupción lees el puerto B para saber cuál interruptor fue presionado y de acuerdo con ello envias el mensaje que tú quieres...

Recuerda que el vector de interrupción es el 0x04... entonces deberás hacer un org 0x04 y allí evaluar qué interrupción ha ocurrido (si la del timer 0 o la de cambio en RB), y hacer los goto a las subrutinas correspondientes...

Y pues, no más eso... y listo! Espero haberme explicado bien...
Trata de teclear tú mismo algo de código guiándote siempre por la datasheet... y te seguimos ayudando....
Ok nos leemos!  :-)
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Re: Famoso PIC 16F84A
« Respuesta #3 en: 07 de Mayo de 2008, 18:53:33 »
Ante todo muchas Gracias por responder tan rapido!

La verdad es que el proyecto lo tengo que presentar en menos de un mes y esta rapidez no me la esperaba :)

En cuanto al comentario del amigo IAO, intente buscar, pero no encontre nada claro.

Y en cuanto al comentario del amigo firepic, comentarle que si, utilizo un cristal de 4 MHz, pero referente a los 9.98 segundo, pues la verdad me sobra y me basta ya que lo que intento es poner un texto "introductorio" y que despues desaparezca por completo y que no se vuelva a iniciar hasta que se vuelva a conectar de nuevo el aparato xD, pero no entendi esto "luego para borrar el LCD, recuerda que hay un comando del display para eso: el 0x01..." no seria del pic 16f84a??

y al pin del LCD RS = 0 referente a lectura de datos, sino no me equivoco, corriganme si eso.........aunque tambien la opcion de home la veo bien.

En cuanto a "Luego debes habilitar la interrupción por cambio en puerto B (por supuesto, los interruptores deberán estar entre los pines RB4:RB7 del pic)... así, cada vez que actives el interruptor ocurrirá la interrupción... en la rutina de interrupción lees el puerto B para saber cuál interruptor fue presionado y de acuerdo con ello envias el mensaje que tú quieres..."

Habia pensado en utilizar para uno el puerto A y para otro el puerto B

Adjunto codigo que intente modificar (con muchas funciones que se que no hacen falta) y circuito que me gustaria realizar, mejor dicho lo que tengo comprobado que me funciona hasta el momento :?

Siento el dibujo tan cutre :|

PS: La verdad es que dia a dia intento pelearme 100% para sacar el proyecto adelante, pero me encuentro con muchisimas dudas.

Gracias y saludos



Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Famoso PIC 16F84A
« Respuesta #4 en: 07 de Mayo de 2008, 19:28:54 »
Amigo Vakjorsan, saludos!  :-)


pero no entendi esto "luego para borrar el LCD, recuerda que hay un comando del display para eso: el 0x01..." no seria del pic 16f84a??

y al pin del LCD RS = 0 referente a lectura de datos, sino no me equivoco, corriganme si eso.........aunque tambien la opcion de home la veo bien.

En cuanto a "Luego debes habilitar la interrupción por cambio en puerto B (por supuesto, los interruptores deberán estar entre los pines RB4:RB7 del pic)... así, cada vez que actives el interruptor ocurrirá la interrupción... en la rutina de interrupción lees el puerto B para saber cuál interruptor fue presionado y de acuerdo con ello envias el mensaje que tú quieres..."

Habia pensado en utilizar para uno el puerto A y para otro el puerto B


Hay ciertos comandos que son comunes para cualquier LCD, y que sirven para configurarlo y otras cosas más, como por ejemplo borrarlo, cursor a home, etc...
Puedes ver una lista de los comandos Aqui

Como podrás observar, RS=0 para todos los comandos, mientras que RS=1 para lectura y escritura de datos, tanto en la DDRAM (memoria del display que contiene lo que se imprimirá) como en la CGRAM (memoria del display para crear caracteres personalizados)...

Para lectura de datos, debes hacer RW=1... por eso es que generalmente se conecta este pin a tierra (RW=0), pues lo que hacemos casi siempre es escribir en el lcd, no leer.

Lo que te decía de colocar los interruptores entre RB4 y RB7 es porque así puedes usar la herramienta de interrupción por cambio en PORTB, así es más fácil y más eficiente detectar si se ha presionado o no un interruptor...

Ahora bien, en tu dibujo tienes los 8 pines del LCD D0-D7 conectados al pic... no sé si sabes que eso no es necesario, pues el LCD puede configurarse a 4 bits, así sólo usarías los pines D4-D7 que conectarías por ejemplo a los pines RB0-RB3, luego te queda E y RS que los puedes conectar en el puerto A y te quedan libres RB4 - RB7 para los pulsadores... que por cierto, no los ví contemplados en tu dibujo...

Una observación más es sobre el potenciómetro que va conectado a Vo, es de tres pines, los pines de los laterales van conectados a GND y Vcc y el del medio va a Vo, para ajustar el contraste del display (bueno me imagino que ya lo sabías pero no lo contemplaste en el dibujo)...

Ok luego leo el código con más calma a ver en qué te ayudo...
Bueno es todo por ahora, nos leemos pues!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Re: Famoso PIC 16F84A
« Respuesta #5 en: 11 de Mayo de 2008, 12:57:31 »
Hola Hola!!!!!

Estamos aqui de nuevo, cada dia intentando entender mas a mi dolor de cabeza "PIC 16F84A" ejejejeje :lol:

Estube navegando bastante para encontrar un pequeño tutorial que me ayudara a entender mas las instrucciones,
para realizar yo mismo los programitas, el que encontre es este:

http://perso.wanadoo.es/chyryes/tutoriales/pic0.htm


Aun asi despues de havermelo leeido, entendido y intentado asimilar para realizar un pequeño programa no me dio
resultados. No se si alguien sabria decirme donde encontrar algo asi mas relacionado con lo que intento realizar.

Tambien comentar que buscando buscando encontre este codigo, que no se si sera correcto, para el retardo de los
aproximadamente 10 segundos que me gustaria, lo dejo aqui para que me comenten algo

#DEFINE  Salida                     PORTB,1         
#DEFINE  Entrada                   PORTA,4

   ORG    0
Inicio
   bsf      STATUS,RP0            ; Hacia al banco 1.
   bsf      Entrada                 
   bcf      Salida         
   bcf      STATUS,RP0            ; Banco 0.
   bcf      Salida                     ; Salida desactivada.
Principal
   btfss   Entrada                   ; ¿La Entrada es igual a 1?
   goto   DesactivaSalida        ; No, Entrada activada. DEsactiva la Salida.
ActivaSalida
;   call   Retardo_10s             ; Esperar 10 segundos.
   btfss   LDR                         ; ¿Entrada=1?
   goto   Fin                           ; No, sale fuera.
   bsf      Salida                     ; Sí, se activa la Salida.
   goto   Fin   
DesactivaSalida
;   call   Retardo_10s           
    btfsc   LDR                       ; ¿Entrada=0?, ¿Entrada  activa?
    goto   Fin                         ; No.
    bcf      Lampara               ; Sí, desactiva la Salida.
Fin
   goto   Principal
   
   END

Sigo dia a dia aqui comentando cosas que me pasen

Muchas Gracias

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Famoso PIC 16F84A
« Respuesta #6 en: 11 de Mayo de 2008, 13:38:15 »
Que tal amigo!
Mira yo te voy a recomendar un libro para que aprendas full con ese micro y los demas lo puedes ver aqui

Con ejemplos y demas!

Saludos

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Re: Famoso PIC 16F84A
« Respuesta #7 en: 11 de Mayo de 2008, 14:57:42 »
ola RALF2, sisisi lo se a full

pero no dispongo de plata.............y e ido a diferentes bibliotecas cercanas y o no lo tenian o estaba alquilado ya se sabe al final de curso
no se encuentran las cosas

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Re: Famoso PIC 16F84A
« Respuesta #8 en: 12 de Mayo de 2008, 17:37:21 »
Olaaaa???

Alguien por hay para hablar de mi tema???

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Famoso PIC 16F84A
« Respuesta #9 en: 12 de Mayo de 2008, 18:29:25 »
Saludos vakjorsan!

Tambien comentar que buscando buscando encontre este codigo, que no se si sera correcto, para el retardo de los
aproximadamente 10 segundos que me gustaria, lo dejo aqui para que me comenten algo

#DEFINE  Salida                     PORTB,1         
#DEFINE  Entrada                   PORTA,4

   ORG    0
Inicio
   bsf      STATUS,RP0            ; Hacia al banco 1.
   bsf      Entrada                 
   bcf      Salida         
   bcf      STATUS,RP0            ; Banco 0.
   bcf      Salida                     ; Salida desactivada.
Principal
   btfss   Entrada                   ; ¿La Entrada es igual a 1?
   goto   DesactivaSalida        ; No, Entrada activada. DEsactiva la Salida.
ActivaSalida
;   call   Retardo_10s             ; Esperar 10 segundos.
   btfss   LDR                         ; ¿Entrada=1?
   goto   Fin                           ; No, sale fuera.
   bsf      Salida                     ; Sí, se activa la Salida.
   goto   Fin   
DesactivaSalida
;   call   Retardo_10s           
    btfsc   LDR                       ; ¿Entrada=0?, ¿Entrada  activa?
    goto   Fin                         ; No.
    bcf      Lampara               ; Sí, desactiva la Salida.
Fin
   goto   Principal
   
   END

Bueno en ese trozo de código hay un "call retardo_10s"... pero en ninguna parte está esa rutina... de hecho esa parte de  código la han puesto comentada... el que hizo eso tuvo la intención de insertar el retardo, pero luego lo dejó así  :D
Así que tendrás que trabajar todavía en generar tu retardo... eso lo puedes hacer de dos formas:
1- La forma rudimentaria: asignándole un valor apropiado a una variable y decrementándola hasta que pase el tiempo deseado (como son 10segundos tendrás que volver a cargar el valor varias veces, o usar otra variable).
2- La forma elegante: usar el timer del pic.

En cuanto a lo de los pulsadores, como te mencioné antes me parece que deberías cambiar la interfaz del LCD a 4 bits para que tengas libres los pines RB4-RB7 del lcd... o por lo menos dos de ellos, para usar interrupciones y facilitar la parte el código que te permita enviar el mensaje correspondiente al pulsador activado.
Creo que deberías trabajar en eso por ahora... pues como dices ya esa rutina está funcionando, no creo que te sea difícil cambiar la configuración a cuatro bits... lo único que tienes que hacer es dividir los 8 bits en dos partes, y enviar una primero y otra después (primero los más significativos y después los menos significativos)...
En este archivo conseguirás una buena explicación de cómo hacerlo.

Bueno vete adelantando eso y en lo que tenga un chance te ayudo con los otros puntos faltantes...
Nos leemos!
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Re: Famoso PIC 16F84A
« Respuesta #10 en: 13 de Mayo de 2008, 05:34:18 »
Ola de nuevo referente al temporizador me gustaria realizarlo como comenta el sr. firepic, de forma elegante, jejeje, vamos con el TMR.

Estuve documentandome, para conocer mas esta instruccion y encontre un archivo bastante bueno y a mas referenciado como me comento el amigo RALF2.

Pase el codigo a MPASMWIN y no me dio ningun problema, como lo podria implementar a mi mensaje inicial???

PS:ya se que el programa no me da los 10 segundos necesarios, me da unos 0,005s mu poquita cosa, jejeje, ya que para los los 10 segundos que quiero necesitaria 10000000µs.

Gracias por tanta colaboracion :)

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Famoso PIC 16F84A
« Respuesta #11 en: 13 de Mayo de 2008, 16:14:26 »
Saludos vakjorsan!
Pues te felicito! Anímate y sigue buscando, por allí deben haber otros programas para generar retardos más largos...
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Re: Famoso PIC 16F84A
« Respuesta #12 en: 13 de Mayo de 2008, 17:19:22 »
Citar
Pues te felicito! Anímate y sigue buscando, por allí deben haber otros programas para generar retardos más largos...

Yaaaaaaaaa!! Pero alguna manera de implementarlo?? con los dos codigos que es lo que interesa??? ya que una vez vea que sale el mensaje
inicial y a los 500 desaparece me pelearia como un loco para que me diera los 10s.

Saludos!!

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Famoso PIC 16F84A
« Respuesta #13 en: 13 de Mayo de 2008, 18:19:45 »
Ok, no te desesperes...

Hoy tampoco he podido ver bien tu código, pero la cosa es que debe haber una parte en el código que llama una subrutina para enviar al lcd el primer mensaje...
Si la consiguieras, entonces luego de esa llamada colocarías el código que acabas de encontrar para hacer la pausa...
Y luego, inserta otra vez la subrutina para enviar caracteres al lcd pero poniendo RS=0 (es decir, si por ejemplo está conectado RS del lcd a el RA0, tendrías que colocar: "bcf porta,0")... y en vez de mandar un valor ascii correspondiente a una letra, vas a enviar el comando que te dije antes: 0x01... y luego 0x02...
En el último archivo que te coloqué explica cómo hacer para enviar comandos al display...

Cuando tenga un chancecito trato de ayudarte un poco más....
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado vakjorsan

  • PIC10
  • *
  • Mensajes: 10
Re: Famoso PIC 16F84A
« Respuesta #14 en: 19 de Mayo de 2008, 06:52:51 »
Buenas!!

Me parece que ya tengo el codigo para que me aparezca el mensaje inicial, este iria de la siguiente manera conectado el PIC16F48A a 5V y el display LCD tambien a 5V y entonces apareciria el mesaje y a los 10 segundos desapareceria, pero como lo conexiono para que me aparezca los otros? ya que iria con un doble conmutador! se recomiendo alguna patilla? y despues otros mensajes, adjunto jpeg para que se vea mejor si no me e explicado bien.


Saludossssssssssssssssss!!