• Domingo 22 de Diciembre de 2024, 20:50

Autor Tema:  Problemas Con El 16f87  (Leído 5182 veces)

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Problemas Con El 16f87
« en: Viernes 13 de Enero de 2006, 04:18 »
0
:hitcomp: Estoy desesperada, no puedo hacer que el PIC 16F87 reciba y transmita datos, inicialmente estoy probando con el siguiente programa de envio:

Código: Text
  1.   LIST  p=16F87    &#59;indica el modelo del pic
  2.    
  3.     #include "P16F87.INC" &#59;se incluye la definicion de los registros internos
  4.  
  5.  
  6.  
  7. AUXI   EQU 0x68&#59;variable auxiliar
  8.  
  9.  
  10.  
  11.   ORG 0
  12.  
  13.   goto INITVAR
  14.  
  15.  
  16.  
  17.    ORG 5
  18. ;--------------------------------------------------------------------------------------
  19. ;Esta rutina inicializa las variables a utilizar
  20. ;---------------------------------------------------------------------------------------
  21.  
  22. INITVAR
  23.  
  24.  
  25.     clrf PORTA&#59;Limpia la salida
  26.         bsf RCSTA,SPEN&#59;configura la USART para recepcion continua
  27.     bsf STATUS,RP0&#59;cambia al banco 1
  28.     clrf TRISA&#59;Puerta A como salida
  29.         movlw b'11011111'
  30.         movwf TRISB
  31.     movlw b'00100100'
  32.         movwf TXSTA
  33.         movlw .25 &#59;Baud Rate = Fosc/(16(X+1))= 9600 baudios, X=(Fosc/((Baud rate)x16))-1
  34.     movwf SPBRG&#59; X=(4MHz/(9600x16))-1 = 25
  35.     bcf STATUS,RP0;cambia al banco 0
  36.         bsf RCSTA,SPEN&#59;configura la USART para recepcion continua
  37. ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  38.         bsf STATUS,RP0&#59;cambia al banco 1
  39.       bcf STATUS,RP1&#59;cambia al banco 1
  40.     bsf TXSTA,TXEN
  41.         bcf STATUS,RP0;cambia al banco 0
  42.       movlw 0x42 &#59;UNA B
  43.         movwf AUXI
  44.         call ENVIAR
  45.        
  46. ESPERA  clrwdt
  47.         goto ESPERA
  48.  
  49. ENVIAR  
  50.         movf AUXI,W
  51.     movwf TXREG
  52.         bsf STATUS,RP0&#59;cambia al banco 1
  53. COMPTX   btfss TXSTA,TRMT&#59;comprueba si acabo de transmitir
  54.     goto COMPTX
  55.         bcf STATUS,RP0&#59;cambia al banco 0
  56.     movlw 0x02
  57.         movwf PORTA
  58.         return
  59.   END
  60.  
  61.  

el problema que tengo es que supuestamente si no leo el dato, no tendria que sacar ese dos por el puerto A ¿verdad?, pero solo enciendo el pic y me muestra ese dos ¿en que me he equivocado?, me he basado en programas del pic 16f873 que esta aqui en este foro, y para comunicarme estoy usando un circuito alterno al del MAX232 que esta en la pagina http://www.pablin.com.ar/electron/circuito/mc/ttl232/
¿sera que no funciona? o ¿se me habra arruinado la parte rs232 del pic? porque lo he probado con programas que no la usan y si funcionan.

 :ayuda:  porfavor


cualquier ayuda sera bienvenida
No basta tener buen ingenio; lo principal es aplicarlo bien.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #1 en: Viernes 13 de Enero de 2006, 13:54 »
0
Citar
ENVIAR 
       movf AUXI,W
    movwf TXREG
       bsf STATUS,RP0;cambia al banco 1
COMPTX   btfss TXSTA,TRMT;comprueba si acabo de transmitir
    goto COMPTX
       bcf STATUS,RP0;cambia al banco 0
    movlw 0x02
       movwf PORTA
       return

Pero si transmites ,espera fin de transmicion y luego le ordenas escribir el 2.¿Cual es el problema? explicanos el contexto para poder ayudarte mejor por que hasta ahora no veo el problema.

Otra cosa:
Citar
ESPERA  clrwdt
       goto ESPERA
Si tienes encendido el WatchDog mejor apagalo en el inicio de tu programa por que  si no tienes bien calculado el tiempo que tardan de las instruciones que usas sera facil que te resete
el micro en medio de cualquier parte en tu programa.

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #2 en: Viernes 13 de Enero de 2006, 23:38 »
0
el problema es que no funciona  ;), no se si el programa tiene un error o que? , y le puse lo del watchdog por que se me reseteaba, pero eso es lo de menos, se lo quito y ya pero  ya  lo hice y nada.



cualquier ayuda sera bienvenida
No basta tener buen ingenio; lo principal es aplicarlo bien.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Problemas Con El 16f87
« Respuesta #3 en: Sábado 14 de Enero de 2006, 00:33 »
0
Hola Karen! No verifiqué que estén bien cada uno de los bits de configuración en tu programa, pero aparentemente estan en orden...
Bien, arrancas el PIC, configuras los registros, llamas a la rutina ENVIAR: escribes un byte en el registro TXREG (la transmisión se inicia automáticamente), verificas que se termine de transmitir (polling), escribes el 2, y return :)
Y entonces quedas en un lazo infinito.
Asi como está el programa, no recibes nada; o mejor dicho, no tienes una rutina para la recepción.
La transmisión la realizas una sola vez, y luega quedas en un lazo.
Bueno, espero ayudar un poquito...

Saludos :hola:

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #4 en: Sábado 14 de Enero de 2006, 02:12 »
0
Citar
el problema que tengo es que supuestamente si no leo el dato, no tendria que sacar ese dos por el puerto A

Insisto todo lo que haces es transmitir y colocar el dos.

Tirol tiene razon donde esta la rutina de recepcion.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #5 en: Sábado 14 de Enero de 2006, 02:14 »
0
Citar
el problema que tengo es que supuestamente si no leo el dato, no tendria que sacar ese dos por el puerto A

Insisto todo lo que haces es transmitir y colocar el dos.

Tirol tiene razon donde esta la rutina de recepcion.

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #6 en: Sábado 14 de Enero de 2006, 02:49 »
0
;) si no he puesto la rutina de recepcion del PIC porque ahorita estoy en la transmision, pero cuando digo:
Citar
el problema que tengo es que supuestamente si no leo el dato, no tendria que sacar ese dos por el puerto A
me refiero al leerlo desde la computadora cuando el pic me lo envia, ni siquiera he corrido ese programa cuando ya me ha mostrado el dos, a eso me refiero.
No basta tener buen ingenio; lo principal es aplicarlo bien.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #7 en: Sábado 14 de Enero de 2006, 04:00 »
0
Citar
ni siquiera he corrido ese programa cuando ya me ha mostrado el dos, a eso me refiero.

¿Te refieres a que todavia no ejecutas las rutina de transmision y te escribe el dos?

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Problemas Con El 16f87
« Respuesta #8 en: Sábado 14 de Enero de 2006, 08:52 »
0
Hola! Parece que entiendo cual es el problema... creo :rolleyes:
Tu programa hace exactamente como expliqué en un mensaje anterior, y luego ya no hace absolutamente nada. Prueba poner la rutina ENVIAR dentro del lazo ESPERA, agrega en este lazo una rutina de demora (p.e. 1 segundo); de esta manera estás enviando tu dato cada segundo.
Otro tip: cada vez que envíes tu dato por el puerto serie, incrementa la variable AUXI, es decir haz un contador, entonces tendrás un mejor feed-back de lo que sucede...
Saludos :hola:

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #9 en: Lunes 16 de Enero de 2006, 22:49 »
0
no, para nada, a lo que me refiero es que se supone que si yo corro el programa al llegar a esta rutina
Código: Text
  1. COMPTX   btfss TXSTA,TRMT;comprueba si acabo de transmitir
  2.              goto COMPTX
  3.  
el programa no tendria que salirse de ella hasta que la computadora lea el dato que se le esta enviando, (eso entiendo) pero la cosa es que solo enciendo el pic y ya me muestra el dos, ese dos indica que el dato ya se transmitio en la computadora, pero no es asi, porque el programa de la computadora ni siquiera lo he corrido.
No basta tener buen ingenio; lo principal es aplicarlo bien.

lalo_soft

  • Miembro MUY activo
  • ***
  • Mensajes: 469
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #10 en: Martes 17 de Enero de 2006, 00:37 »
0
No tiene nada que ver el hecho de que la computadora no este corriendo el programa que le el dato que envias, tienes un error de concepto. Al encender el micro y si la rutina de transmision esta en la secuencia inicial de trabajo de tu programa la ejecuta y transmite el dato.Para conserguir lo que creo que esperas ,es escribir y ejecutar primero una rutina que cheque la recepcion de un dato ,para despues transmitir hacia el PC.

Al encerder el pic este debe esperar y luego Transmitir.
El Pc es que debe transmitir primero,no el PIC.

ijfa

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #11 en: Miércoles 18 de Enero de 2006, 17:33 »
0
Hola ....te paso mi programa de prueba que tengo...ojala te sirva....esta en C...con el compilador CC5X....y funciona!!! 100% comprobado....aki va

Código: Text
  1. //------------------ Programa test RS232 -----------------------
  2. // El PIC envia un mensaje se saludo el cual se puede visualizar
  3. // a través del Hiperterminal de Windows
  4. //---------------------------------------------------------------
  5.  
  6. char data[20];
  7. void enviar_msg()
  8. {
  9.     char j;
  10.     data[0]=0x48; // H
  11.     data[1]=0x4f; // O
  12.     data[2]=0x4c; // L
  13.     data[3]=0x41; // A
  14.     data[4]=0x0d; // CR - control de carro
  15.     data[5]=0x0a; // LF - line feed
  16.     j=0;
  17.     while(1)
  18.     {
  19.         while(1) // Espera a que se vaya el dato
  20.         {
  21.             if(TXIF==1) break; // Cuando TXIF=1 se fue
  22.         }
  23.         TXREG=data[j]; // Envia el dato almacenado en data[j]
  24.         j++;
  25.         if(j==5) break; // Despues de enviar el ultimo parte de cero
  26.         TXIF=0;
  27.     }
  28. }
  29.  
  30. void main()
  31. {
  32. // Se programan los bit correspondientes, el de TX y RX
  33. // corresponden la PORTC.B7 y PORTC.B6 respectivamente
  34. // el primero como salida y el segundo como entrada.
  35.  
  36. TRISC=0x80; // 10 00 0000
  37. SPBRG=255; // 1200 8 N 1
  38. TXSTA=0x20;
  39. RCSTA=0x90;
  40. PIR1= 0x30; //HABILITA LA BANDERA QUE INFORMA QUE REGISTRO DE TX ESTA VACIO!!!
  41.  
  42. while(1)
  43.     {
  44.     enviar_msg();
  45.     }
  46. }
  47.  
  48.  

Espero te sirva...saludos :hola:

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #12 en: Miércoles 18 de Enero de 2006, 23:30 »
0
:) Gracias ijfa por tomarte el tiempo pero yo de C no se nada y menos de cc5x, y con respecto a lo anterior lo mismo me hace el pic a la hora de recibir se sale de la rutina de recepcion y ni siquiera le he mandado el dato por lo que deduzco que se me ha arruinado la parte rs232 del pic :(
No basta tener buen ingenio; lo principal es aplicarlo bien.

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Problemas Con El 16f87
« Respuesta #13 en: Miércoles 18 de Enero de 2006, 23:47 »
0
No Karen, no se ha arruinado nada! Prueba como te dije, enviar repetidamente desde el PIC al PC; tiene que funcionar :lightsabre:
La PC no tiene que enviar nada al PIC para que este envie un dato al PC, asi como tienes tu programa...
Prueba, que tiene que funcionar!!

Saludos :hola:

Ah! Como handas con VB y este tema de la comunicación serie? En una de esas puedes darme una mano ;)

Citar
yo de C no se nada

Error de sintaxis: "yo de C no C nada" :D  :lol:

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #14 en: Miércoles 1 de Marzo de 2006, 00:11 »
0
:lol: pues logre solucionar mi problema, el problema estaba a la hora de quemar el programa uso winpic800 y en la parte de config habia que seleccionar:
XT quitar los cheques de las otras opciones y solo dejar MCLRE que es la del reset, lo demas se deja como esta, asi ya me funciono bien. y por cierto el circuito que estaba usando le quite la resistencia de 4.7K.

Huguen_aus_Tirol con respecto a:
Citar
Ah! Como handas con VB y este tema de la comunicación serie? En una de esas puedes darme una mano

pues ya se mucho mas de esto asi que cualquier cosa por aqui andamos :)


Gracias por su ayuda  :hola:
No basta tener buen ingenio; lo principal es aplicarlo bien.

Kain589

  • Miembro activo
  • **
  • Mensajes: 53
    • Ver Perfil
Re: Problemas Con El 16f87
« Respuesta #15 en: Miércoles 1 de Marzo de 2006, 00:35 »
0
Hola Karen, en el apartado soluciones de hard y soft coloque unas rutinas que hice a partir de las notas de aplicacion de microchip, a lo mejor te sirven de base para hacer las modificaciones que quieras