Autor Tema: Problema con comunicación RS-232 pic16f628a  (Leído 2390 veces)

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

Desconectado JuanjoPic

  • PIC12
  • **
  • Mensajes: 97
Problema con comunicación RS-232 pic16f628a
« en: 18 de Marzo de 2016, 23:02:04 »
Hola a todos, bueno mi problema radica en la comunicación entre mi pc y un pic16f628a.
El programa que implemento es utilizando el registro USART del pic y el Hyperterminal.
Simulando en PROTEUS el programa me funciona bien  :) pero en la practica no  :(
Comprobé el funcionamiento del max232 y funciona bien, ya que arme el circuito y he puenteado el rx y tx y utilizando el hyperteminal escribo en el pc alguna letra y esta se replica, osea la transmisión y recepción entre el max232 y el pc funciona correctamente.
Ademas he hecho esta comunicación por sofware y me funciona bien.

Lo que me sucede experimentalmente es que al enviar una frase como "Hola" esta debiese solo aparecer una vez en el hyperterminal (simulando me funciona bien) pero en la practica la frase "Hola" me empieza aparecer indefinidamente (no solo una vez como quiero).

El código lo subiré para que lo vean.

 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #1 en: 18 de Marzo de 2016, 23:12:14 »
Esperamos el codigo para ver si es algo de alli que por lo que comentas lo mas seguro sea eso

Desconectado JuanjoPic

  • PIC12
  • **
  • Mensajes: 97
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #2 en: 18 de Marzo de 2016, 23:28:55 »
list p=16f628a
    INCLUDE "p16f628a.INC"
    __CONFIG _CP_OFF&_CPD_OFF&_MCLRE_OFF&_BODEN_OFF&_WDT_OFF&_PWRTE_ON&_INTRC_OSC_NOCLKOUT 
 
veces  equ 20h   
;...................... INICIO DEL PROGRAMA ................
     
    org 0
   
CONFIGURACION_BASICA_PUERTOS:
   
    bcf STATUS,RP0
    clrf veces
    clrf PORTA
    clrf PORTB
    movlw d'7'
    movwf CMCON   
    bsf STATUS, RP0     
    movlw d'0'
    movwf TRISA
    movlw b'00000010'    ; Rx bit_1 puerto B
    movwf TRISB 
     
   
CONFIGURACION_Tx_Rx:
    movlw d'25'     ; velocidad de transmision 9600 bps
    movwf SPBRG
    movlw b'00100100'
    movwf TXSTA   
    bcf STATUS,RP0
    movlw b'10010000'
    movwf RCSTA
   
    call MENSAJE_INICIO
   
PROGRAMA:
    goto PROGRAMA
   
MENSAJE_INICIO:
    movlw 'h'
    call ENVIAR
    movlw 'o'
    call ENVIAR
    movlw 'l'
    call ENVIAR
    movlw 'a'
    call ENVIAR   
    return

   
ENVIAR:
    movwf TXREG
    bsf STATUS,RP0
trans_no_completa
    btfss TXSTA,TRMT
    goto trans_no_completa
    bcf STATUS,RP0
    clrf TXREG
    return

;....................RETARDOS.............................
   
Delay_500ms:
    call Retardo_65ms
    incf veces
    btfss veces,3
    goto Retardo_65ms
    return
   
Retardo_65ms:
    bsf STATUS,RP0 
    movlw b'00000111' ; cargo el prescaler de 1 al wdt
    movwf OPTION_REG
    bcf STATUS,RP0
    movlw d'0'
    movwf TMR0
    bcf INTCON,2
lopp_11:
    btfss INTCON,2
    goto lopp_11
    return     
   
    end


Bueno este es el codigo.
Como dije antes me simula bien pero en la practica la frase "Hola" empieza a parecer indefinidamente  :(

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #3 en: 18 de Marzo de 2016, 23:49:37 »
El programa parece correcto, solo 2 cosas que cambiaria:

clrf TXREG

Que esta en ENVIAR, que lo sacaria, por que si no seria como enviar un 0x00. Me refiero a que se esta enviando:

'H' , 0x00 , 'O' , 0x00 y asi... suponiendo que da el tiempo lo cual no creo. Es lo unico que veo de malo, pero a lo sumo estarias teniendo un problema en el sentido de que se esta sobreescribiendo los datos, pero no de enviarse muchas veces el texto Hola.

La otra es

    movlw b'00000010'    ; Rx bit_1 puerto B
    movwf TRISB

Cambiarlo por el valor 00000110 es decir RB1 y RB2 como entradas, la explicacion esta en el bit SPEN de RCSTA:

Citar
(Configures RB1/RX/DT and RB2/TX/CK pins as serial port pins when bits TRISB<2:1> are set)
Es decir que los usa para la UART si ambos piens estan como entradas ( set , en 1 ), tambien en el paso a paso indica de ponerlo a 1

Son las 2 cosas que cambiaria y 1 mas que es deshabilitar el receptor por ahora. Ya que si envias algo desde la PC vas a hacer un overflow al buffer del receptor, ya que nunca lo estas leyendo. Asi que para eliminar problemas deshabilitalo y vamos probando por parte.

Desconectado JuanjoPic

  • PIC12
  • **
  • Mensajes: 97
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #4 en: 19 de Marzo de 2016, 00:38:20 »
Seguí tus paso he hice lo siguiente
- el clrf TXREG
- cambie el
movlw b'00000010'    ; Rx bit_1 puerto B
movwf TRISB
por
movlw b'00000110'    ; Rx bit_1 puerto B
movwf TRISB

Resultado: Aun siguie enviado indefinidamente la frase "hola"

Ahora lo que hice después fue deshabilitar la comunicación después de enviar la frase asi (al código que subí le agregue esto):

 movlw b'10010000'
 movwf RCSTA
   
call MENSAJE_INICIO

bcf RCSTA,7   ; esto le agregue

Resultado: Aun sigue enviado indefinidamente la frase  :(


   


Desconectado JuanjoPic

  • PIC12
  • **
  • Mensajes: 97
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #5 en: 19 de Marzo de 2016, 00:47:49 »
*perdon es: borre el clrf TXREG (me falto el borre xD)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #6 en: 19 de Marzo de 2016, 00:57:00 »
Si es que los errores esos no son sobre enviar indefinidamente la palabra.

Tenes un problema que se esta reiniciando el micro. Si estas deshabilitando el transmisor y apesar que el programa no deberia enviar nada, es como que se esta reiniciando el micro, no se por que. Todo parece correcto:

WDT desactivado
Loop inifnito
Sin MCLR

Pero parece que se esta reseteando de alguna forma, pense en un error de algun salto.

Tengo 2 cosas mas para que probes, hace:

PROGRAMA:
    BCF  PORTB,0
    goto PROGRAMA

Y al comienzo antes de enviar todo poner a 1 PORTB0, si podes verlo con un osciloscopio a esa salida, si esta entre 1 y 0 quiere decir que se esta reseteando. sino deberia quedarse en 0 siempre.

Y la otra es que envies luego del "hola" envies un LF y un CR ( line feed y return carriage, busca la tabla ASCII de eso ), por si las dudas es el programa de la PC que se vuelve loco.

Desconectado JuanjoPic

  • PIC12
  • **
  • Mensajes: 97
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #7 en: 19 de Marzo de 2016, 01:28:54 »
seguí tus indicaciones (excepto la del oscilosciopio) y aun sigo con lo mismo  :(

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #8 en: 19 de Marzo de 2016, 02:31:42 »
Ponele un led a RB0

Código: ASM
  1. list p=16f628a
  2.     INCLUDE "p16f628a.INC"
  3.     __CONFIG _CP_OFF&_CPD_OFF&_MCLRE_OFF&_BODEN_OFF&_WDT_OFF&_PWRTE_ON&_INTRC_OSC_NOCLKOUT  
  4.  
  5. veces  equ 20h    
  6. ;...................... INICIO DEL PROGRAMA ................
  7.      
  8.     org 0x00
  9.     GOTO        CONFIGURACION_BASICA_PUERTOS:
  10.     org 0x04
  11.     RETURN
  12.    
  13. CONFIGURACION_BASICA_PUERTOS:
  14.    
  15.     bcf STATUS,RP0
  16.     clrf veces
  17.     clrf PORTA
  18.     clrf PORTB
  19.     movlw d'7'
  20.     movwf CMCON    
  21.     bsf STATUS, RP0    
  22.     movlw d'0'
  23.     movwf TRISA
  24.     movlw b'00000110'    ; Rx bit_1 puerto B
  25.     movwf TRISB  
  26.      
  27.    
  28. CONFIGURACION_Tx_Rx:
  29.     movlw d'25'     ; velocidad de transmision 9600 bps
  30.     movwf SPBRG
  31.     movlw b'00100100'
  32.     movwf TXSTA    
  33.     bcf STATUS,RP0
  34.     movlw b'10000000'
  35.     movwf RCSTA
  36.    
  37.     call MENSAJE_INICIO
  38.  
  39.     bsf  PORTB,0
  40.     call Delay_500ms
  41.     call Delay_500ms
  42.    
  43. PROGRAMA:
  44.  
  45.     call Delay_500ms
  46.     call Delay_500ms
  47.  
  48.     bcf PORTB, 0
  49.     goto PROGRAMA
  50.    
  51. MENSAJE_INICIO:
  52.     movlw 'h'
  53.     call ENVIAR
  54.     movlw 'o'
  55.     call ENVIAR
  56.     movlw 'l'
  57.     call ENVIAR
  58.     movlw 'a'
  59.     call ENVIAR    
  60.     movlw  0x0A
  61.     call ENVIAR    
  62.     movlw 0x0D
  63.     call ENVIAR    
  64.     return
  65.  
  66.    
  67. ENVIAR:
  68.     movwf TXREG
  69.     bsf STATUS,RP0
  70. trans_no_completa
  71.     btfss TXSTA,TRMT
  72.     goto trans_no_completa
  73.     bcf STATUS,RP0
  74.     return

Deberia encenderse 1 sola ves por 1 segundo y luego apagarse para siempre.
Si funciona asi es por que el programa/micro esta bien, y puede que falle otra cosa que sea de hardware.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #9 en: 19 de Marzo de 2016, 04:27:37 »
No se si les sirva pero este codigo yo lo implemente en ese micro:
Código: ASM
  1. LIST P=16F628A
  2. #INCLUDE<p16F628A.INC>
  3.  
  4. __CONFIG  _CP_OFF & _WDT_OFF & _LVP_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF& _BODEN_OFF
  5.  
  6. ERRORLEVEL 1;
  7.  
  8.         CBLOCK  0x20
  9.         INSTRUCCION
  10.         ENDC
  11.  
  12.         ORG 0X00
  13.         GOTO CONFIGURACION_PUERTOS
  14.         ORG     0X04
  15.         BTFSS   PIR1,RCIF
  16.         RETFIE
  17.         CALL    RECIBE_DATO
  18.         RETFIE
  19. CONFIGURACION_PUERTOS
  20.         MOVLW   B'00000111'
  21.         MOVWF   CMCON
  22.         BSF             STATUS,RP0
  23.         MOVLW   .25
  24.         MOVWF   SPBRG
  25.         CLRF    TRISA
  26.         MOVLW   B'00100100'
  27.         MOVWF   TXSTA
  28.         CLRF    PIE1
  29.         BSF             PIE1,RCIE
  30.         CLRF    TRISB
  31.         BSF             TRISB,1
  32.         BCF             STATUS,RP0
  33.         MOVLW   B'10010000'
  34.         MOVWF   RCSTA
  35.         MOVLW   B'11000000'
  36.         MOVWF   INTCON
  37.         CLRF    PORTB
  38.         CLRF    PORTA
  39. INICIO
  40.         GOTO INICIO
  41. RUTINA_ADELANTE
  42.         MOVLW   B'00001010'
  43.         MOVWF   PORTA
  44.         CALL    Retardo_100ms  
  45.         RETURN
  46. RUTINA_ATRAS
  47.         MOVLW   B'00000101'
  48.         MOVWF   PORTA
  49.         CALL    Retardo_100ms
  50.         RETURN 
  51. RUTINA_IZQ
  52.         MOVLW   B'00001001'
  53.         MOVWF   PORTA
  54.         CALL    Retardo_100ms
  55.         RETURN 
  56. RUTINA_DER
  57.         MOVLW   B'00000110'
  58.         MOVWF   PORTA
  59.         CALL    Retardo_100ms
  60.         RETURN
  61. STOP
  62.         MOVLW   B'00000000'
  63.         MOVWF   PORTA
  64.         RETURN
  65. TX_DATO
  66.         BCF PIR1,TXIF
  67.         MOVWF TXREG
  68.         BSF STATUS,RP0
  69. TX_DATO_ESP
  70.         BTFSS TXSTA,TRMT
  71.         GOTO TX_DATO_ESP
  72.         BCF STATUS,RP0
  73.         RETURN
  74. RX_DATO
  75.         BCF PIR1,RCIF
  76.         BTFSC RCSTA,FERR
  77.         GOTO RX_DATO
  78.         MOVF RCREG,0
  79.         RETURN
  80. PRENDE_LEDS
  81.         BSF             PORTB,4
  82.         BSF             PORTB,5
  83.         RETURN
  84. APAGA_LEDS
  85.         BCF             PORTB,4
  86.         BCF             PORTB,5
  87.         RETURN
  88. RECIBE_DATO
  89.         CALL    RX_DATO
  90.         MOVWF   INSTRUCCION
  91.         CLRF    RCREG
  92.         BCF             PIR1,RCIF
  93. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  94.         MOVF    INSTRUCCION,W
  95.         SUBLW   'D'
  96.         BTFSC   STATUS,Z
  97.         GOTO    PRENDE_LEDS
  98. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  99.         MOVF    INSTRUCCION,W
  100.         SUBLW   'X'
  101.         BTFSC   STATUS,Z
  102.         GOTO    APAGA_LEDS
  103. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  104.         MOVF    INSTRUCCION,W
  105.         SUBLW   'F'
  106.         BTFSC   STATUS,Z
  107.         GOTO    RUTINA_ADELANTE
  108. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  109.         MOVF    INSTRUCCION,W
  110.         SUBLW   'B'
  111.         BTFSC   STATUS,Z
  112.         GOTO    RUTINA_ATRAS
  113. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  114.         MOVF    INSTRUCCION,W
  115.         SUBLW   'L'
  116.         BTFSC   STATUS,Z
  117.         GOTO    RUTINA_IZQ
  118. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  119.         MOVF    INSTRUCCION,W
  120.         SUBLW   'R'
  121.         BTFSC   STATUS,Z
  122.         GOTO    RUTINA_DER
  123. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  124.         MOVF    INSTRUCCION,W
  125.         SUBLW   'O'
  126.         BTFSC   STATUS,Z
  127.         GOTO    STOP
  128. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  129.         RETURN
  130.  
  131.  
  132.  #INCLUDE<RETARDOS.INC>
  133.         END

Desconectado JuanjoPic

  • PIC12
  • **
  • Mensajes: 97
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #10 en: 26 de Marzo de 2016, 01:04:31 »
Hola pinolillo16 con tu codigo me funciono bien, gracias por el aporte  ((:-)).
Ahora solo tengo una pregunta:
¿Para que sirve el ERRORLEVEL 1 (nunca lo había visto)?
« Última modificación: 26 de Marzo de 2016, 02:05:42 por JuanjoPic »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema con comunicación RS-232 pic16f628a
« Respuesta #11 en: 26 de Marzo de 2016, 05:43:46 »
¿Para que sirve el ERRORLEVEL 1 (nunca lo había visto)?

Como es larga la respuesta:

ww1.microchip.com/downloads/en/DeviceDoc/33014L.pdf
(Pagina 108)

Ahi tenes todas las directivas de preprocesamiento del linker/compilador/etc y mas cosas tambien.


 

anything