Problema de comunicación serie PIC MCU a PC

0

Estaba intentando enviar un flujo continuo de la letra 'G' desde mi PIC MCU (PIC18F452) a mi computadora portátil.

Aquí está mi código de ensamblaje que estoy usando:

#include <p18f452.inc>

    CONFIG  OSC=XT,WDT=OFF,PWRT=OFF
    ORG     0H
    MOVLW   D'12'
    MOVWF   SPBRG
    MOVLW   B'00100000'
    MOVWF   TXSTA
    BCF     TRISC,TX
    BSF     RCSTA,SPEN
    OVER    MOVLW   A'G'
    S1      BTFSS   PIR1,TXIF
    BRA     S1
    MOVWF   TXREG
    BRA     OVER
    END

Diseño el circuito en proteus y lo simulo con realterm y hyperterminal i obtengo el resultado deseado. Pero cuando intento implementar el hardware me enfrento a un problema. No obtengo salida en Realterm solo cuando conecto mi fuente. Pero en el instante en que elimino la fuente (desenchufe solo la conexión a tierra o el cable vivo) obtengo la salida (cadena G). ¿Alguien puede decirme cuál es el problema? Dispositivos que utilizo: 01. PIC18F452 02. 8MHz Crystal Oscillator, 03. MAX232 con cinco condensadores 10uF 04. Cable USB a RS232. Aquí está mi diagrama de conexión:

    
pregunta Sabbir Ahmed

3 respuestas

1

Si el PIC es de 3.3 V, es posible que el MAX232 esté en el límite trabajando con los niveles en su pin TX. Es posible que deba usar la versión 3V del MAX232.

De lo contrario, debe colocar un osciloscopio digital en el pin3 de su P1 y verificar si tiene sus datos allí, si es así, mida el ancho de un bit y asegúrese de que la velocidad en baudios sea la que espera. (1 dividido por el ancho de un bit en segundos le dará una velocidad cercana a la velocidad real).

Si no hay datos, verifique en el pin 25 de U1 y vea si tiene datos allí. Si no, podría haber un error de software.

    
respondido por el Tony Richardson
1

Creo que su problema estaba en la configuración, si está utilizando xtal esa frecuencia superior a 4MHz, deberá usar OSC = HS en lugar de OSC = XT

    
respondido por el rodeomusty
0

Si funciona con algunas velocidades en baudios y otras no, a veces puede deberse al uso de una frecuencia de reloj demasiado baja para las velocidades en baudios que no funcionan. Intenta un reloj mucho más alto.

El generador de velocidad en baudios (BRG) generalmente obtiene su velocidad en baudios al dividir el reloj del sistema por el número binario que ha cargado en él. Si es un BRG de 16 bits, puede dividir el reloj entre los números cargados hasta 65536 para obtener una velocidad en baudios.

Si la velocidad del reloj es baja y la velocidad en baudios es alta, a veces, el generador de velocidad en baudios no tiene suficiente resolución de división de tiempo para que la velocidad en baudios se acerque lo suficiente a lo que debería ser.

es decir. como un ejemplo tonto para explicar la idea, dependiendo del tipo de MPU, si tuviera un reloj de 1MHz y un generador de velocidad en baudios de 2 bits, las velocidades disponibles serían 1MHz / 1, 1MHz / 2 y 1MHz / 4. Ninguno de los resultados sería una velocidad de transmisión "estándar".

    
respondido por el Tony Richardson

Lea otras preguntas en las etiquetas