Autor Tema: Problema con TX de Pic a PC  (Leído 4587 veces)

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

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
Problema con TX de Pic a PC
« en: 26 de Agosto de 2004, 06:29:00 »
Amigos:
Tengo un problema que me las trae y no se como resolverlo .
Al leer el puerto B del pic16F877 obtiene un dato binario de 3 (00000011) pero como lo envia es ascii me manda un corazon (el 3 en ascii es un caracter de corazon) que VB lo toma como basura.
Pregunta:¿Hay alguna forma de que el pic trabaje con numeros decimales (intente con d"3", .3, b"00000011", pero nada), para que el VB pueda leer algun dato razonable y no caritas riendose, rombos o corazones?

Otra pregunta:
Cuando hago reset, el micro se cae y no funciona mas . Tengo que cortar la alimentacion y volver a conectarla para que vuelva a funcionar. ¿Alguna idea de porque?

El pic es 16F877 a 20Mhz el micro esta programado en asm y elPC en VB6.

Saludos.


                                   

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Problema con TX de Pic a PC
« Respuesta #1 en: 26 de Agosto de 2004, 06:56:00 »
¿Puedes pegar aquí el código para ver si podemos ayudar?

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Problema con TX de Pic a PC
« Respuesta #2 en: 26 de Agosto de 2004, 06:59:00 »
hola gabotronic, supongo que lo que quieres es mandar caracteres por la UART, bueno eso lo puedes hacer así:

MOVLW   A"1"

y envías el dato del acumulador, en el Hyperterminal saltrá escrito el 1, esa es la manera de cargar directamente los caracteres ASCII, pero en realidad en el acumulador lo que hay es un decimal 49 o hexadecimal 0x31 ok ?  

Espero que te sirva, en cuanto al reset...  como tienes conectada la linia MCLR* ?   directa a Vcc? o con una Resisténcia bueno ya explicarás algún detalle
- T0ni0 -
30RCF112

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Problema con TX de Pic a PC
« Respuesta #3 en: 26 de Agosto de 2004, 07:32:00 »
Amigos:
Gracias por su pronta respuesta. Envio resumen del asm, porque todo seria una lata. A no ser que sea necesario y que tengan algo de tiempo para leerlo. Si es asi me dicen y lo envio.

Como se ve lo que quiero hacer es enviar un dato por la usart en decimal. O sea ingresar un 3 decimal y que en el PC (Visual basic) me reciba y lea un 3 decimal.
Lo que pasa es que estoy leyendo la puerta B del pic y esa informacion debo enviarla al PC, pero me envia corazones, caritas riendose, etc.

Con respecto al reset esta conectado Vcc R10K - R120 Pin1. En el signo - lo llevo a tierra para resetearlo. ¿Esta bien, no?



   List    p=16F877A      ;Tipo de procesador
      
      include   "P16F877A.INC"   ;Definiciones de registros internos
      radix   dec

PDel0    equ 20H
PDel1   equ 21H
PDel2    equ 22H

      org   0x00            ;Vector de Reset
      goto   Inicio

      org   0x04            ;Vector de interrupción
      goto   Inter

;********************************************************************************************
;Tx_Dato: Transmite vía serie el dato presente en el reg. W

Tx_Dato      
      bcf      PIR1,TXIF   ;Restaura el flag del transmisor
      movwf   TXREG      ;Almacena el byte a transmitir
      bsf      STATUS,RP0   ;Banco 1
Tx_Dato_Wait   
      btfss   TXSTA,TRMT   ;Byte transmitido ??
      goto   Tx_Dato_Wait;No, esperar
      bcf      STATUS,RP0   ;Banco 0
      return            ;Si

;******************************************************************************************
;Tratamiento de la interrupción

Inter   
      radix   dec
      btfss   PIR1,RCIF   ;Ha sido interrupción en la recepción ??
      retfie            ;No, falsa interrupción
      bcf      PIR1,RCIF   ;Si, restaurar el flag de interrupción
      movf   RCREG,W      ;Lee el dato recibido
      call   Tx_Dato      ;Lo retransmite a modo de eco
                 MOVWF   PORTB      ;Mueve inf. puerto B a W
      call           Tx_Dato
      movlw   3
      call    Tx_Dato
      movlw   .3
      call    Tx_Dato
      movlw   b"00000011"
      call    Tx_Dato
      movlw   D"3"
      call    Tx_Dato
      movlw   0x03
      call    Tx_Dato
      movlw   H"3"
      call    Tx_Dato
      
   ;   movlw   ."3"
   ;   call    Tx_Dato

      retfie

;*******************************************************************************************
;Programa principal

Inicio       
      clrwdt
      clrf   PORTC      
      clrf   PORTB
      bsf      STATUS,RP0   ;Selecciona banco 1
      movlw   b"10111111"
      movwf   TRISC      ;RC7/Rx entrada, RC6/Tx salida
                 movlw   b"11111111"   
      movwf   TRISB      ;Configura puerto B como entrada
      movlw   b"11001111"
      movwf   OPTION_REG   ;Preescaler de 128 asociado al WDT

      movlw   b"00100100"   
      movwf   TXSTA      ;TX en On, modo asíncrono con 8 bits y alta velocidad
      movlw   .130
      movwf   SPBRG      ;9600 baudios con Fosc=20MHz
      bsf      PIE1,RCIE   ;Habilita interrupción en la recepción
      bcf      STATUS,RP0   ;Selecciona banco 0

      movlw   b"10010000"
      movwf   RCSTA      ;USART en On, recepción contínua
      bsf      INTCON,PEIE   ;Activa interrupción de periféricos
      bsf      INTCON,GIE   ;Activa interrupciones

Loop      clrwdt
      goto   Loop

end


Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Problema con TX de Pic a PC
« Respuesta #4 en: 26 de Agosto de 2004, 08:02:00 »
Ponle también un condensador electrolítico de 1 microfaradio entre MCLR y masa y prueba a ver

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Problema con TX de Pic a PC
« Respuesta #5 en: 26 de Agosto de 2004, 08:19:00 »
Hice la prueba con el condensador, y lo mismo. El Pic no anda. A mi me parece que fuera algo del programa.
¿A que direccion se va cuando se resetea?



Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Problema con TX de Pic a PC
« Respuesta #6 en: 26 de Agosto de 2004, 08:28:00 »
A la dirección 0.
En tu programa deberías tener algo asi:

org      0x00           ;Vector de reset
goto    INICIO
org      0x04           ;Salva el vector de interrupción
goto    INICIO

INICIO
Código....

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Problema con TX de Pic a PC
« Respuesta #7 en: 26 de Agosto de 2004, 08:48:00 »
   org   0x00            ;Vector de Reset
      goto   Inicio

      org   0x04            ;Vector de interrupción
      goto   serv_int
;********************************************************************************************
;Tx_Dato: Transmite vía serie el dato presente en el reg. W

Tx_Dato      
      bcf      PIR1,TXIF   ;Restaura el flag del transmisor
      movwf   TXREG      ;Almacena el byte a transmitir
bla, bla, bla

Asi esta, bueno antes del org 0x00 estan las definiciones.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Problema con TX de Pic a PC
« Respuesta #8 en: 26 de Agosto de 2004, 09:01:00 »
Parece estar bien.
Comprueba bien el conexionado a ver si encuentras algo

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Problema con TX de Pic a PC
« Respuesta #9 en: 26 de Agosto de 2004, 10:15:00 »
Haber, sobre la manera de enviar, como te comenté antes prueba con:
 movlw A"3"
call Tx_Dato

haber si te llega un 3 ok?

si lo que quieres es enviar el numero que vale el portb :

movvf potb,0
addlw d"48"
call Tx_Dato

con esto si el portb es b"00000011" enviará un 3 que podrás leer.

Por otra parte no he visto la rutina Tx_Dato pero supongo que no envias por interrupción si no por escaneo, bien pues antaño yo me encontre con el problema de enviar y recibir al mismo tiempo y de vez encuando se quedaba clabado, podría ser tu problema, pruba una cosa desabilita las interrupciones cuando envias quizás también dentro de la rutina de interrupción sería bueno, venga compañero haber si lo sacamos
- T0ni0 -
30RCF112

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: Problema con TX de Pic a PC
« Respuesta #10 en: 26 de Agosto de 2004, 11:30:00 »
nmnmn.
Q pasa por el lado del pc??
Supongo q estaras usando el mscomm
recorda q hay una propiedad llamada "InputMode" q te permite seleccionar si vas a estar leyendo texto o binarios al usar "input" para leer el buffer de entrada.

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Problema con TX de Pic a PC
« Respuesta #11 en: 26 de Agosto de 2004, 11:38:00 »
Golden:
Si, estoy usando Mscomm y me recibe los datos en caracteres ascii y yo lo quiero en decimal o en binario, lo que sea menos ascii!!!
Input mode? parece que por ahi va el cuento. No he configurado ningún input mode. Como se hace?

Tonio:
Para enviar utilizo una rutina TX_Dato (la primera rutina del programa). La verdad es que nose si es por interrupcion o por escaneo, al parecer seria por escaneo, nose.
Si me envia el numero 3 de las dos formas, pero si el puerto B cambia de estado lo enviado ya no sirve. En el puerto B entraran datos variables de 0 a 50.

Saludos y gracias

Desconectado Golden_Eagle

  • PIC16
  • ***
  • Mensajes: 135
RE: Problema con TX de Pic a PC
« Respuesta #12 en: 26 de Agosto de 2004, 11:47:00 »
agrega esta linea en tu codigo... podria ser cuando cargas el formulario....
MSComm1.InputMode = 1   " (0):texto, (1):binario

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Problema con TX de Pic a PC
« Respuesta #13 en: 26 de Agosto de 2004, 12:09:00 »
Bueno pues, cuando hayas probado la comunicación por el PC , cambias la rutina de envio por la siguiente:


;********************************************************************************************
;Tx_Dato: Transmite vía serie el dato presente en el reg. W

Tx_Dato
bcf INTCON,GIE   ;DESABILITA INTERRUPCIONES

bcf PIR1,TXIF ;Restaura el flag del transmisor

Tx_Dato_Wait
btfss TXSTA,TRMT ;Byte transmitido ??
goto Tx_Dato_Wait;No, esperar

movwf TXREG ;Almacena el byte a transmitir
bsf STATUS,RP0 ;Banco 1
bcf STATUS,RP0 ;Banco 0

bsf INTCON,GIE   ;HABILITA INTERRUPCIONES
return ;Si

;******************************************************************************************

Haber si con esto no se queda pillado.


Aunque en VB te lleguen caras o corazones eso no quiere decir que no tengas el valor en el bufer, por lo que SI puedes saber que numero ha llegado, si te envia un 0x03 lo puedes comparar con  Chr(3)   por ejemplo, una cosa es el valor que tenga otra su interpretación.
 
- T0ni0 -
30RCF112

Desconectado gabotronic

  • PIC12
  • **
  • Mensajes: 57
RE: Problema con TX de Pic a PC
« Respuesta #14 en: 26 de Agosto de 2004, 13:39:00 »
Gracias Tonio!!
El cuento del reset se arreglo con la habilitacion-deshabilitacion.

Pero sigo con el problema de los datos

El problema es que el corazon o la carita el Visual Basic no los toma como dato (al parecer).

¿Como podria leer o traducir a decimal una carita que se rie?, siendo que ni el mismo VB lee esa cara (que me tiene hasta aca )

¿No es posible que el pic envie el dato leido en la puerta directamente en decimal?

Golden:
Estoy tratando de configurar el programa con la opcion input que me mencionaste. La primera prueba que hice me arrojaba siempre un signo de interrogacion (?) para cualquier dato que llegaba. Aunque sigo intentando, no voy a colgar los guantes por un dato.


 

anything