Autor Tema: Problema de comunicación dsPIC > PC  (Leído 1875 veces)

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

Desconectado cvlaso

  • PIC10
  • *
  • Mensajes: 14
Problema de comunicación dsPIC > PC
« en: 03 de Agosto de 2017, 15:40:55 »
Hola, ojalá me puedan dar una mano, después de buscar y revisar varios hilos no doy con el problema.
Este  programa para transmitir datos desde el  “ds PIC 33fj64MC506”  al PC,  transmite pero en el pc  recibo caracteres extraños como estos ( ÿ  ), y no el dato que cargo al wo y al U1txreg.
Tengo un programa de recepción y el hyperterminal , por lo que al puentear la salida 2 con la 3 del puerto de pc esta funciona ok.
Les adjunto el programa y después de revisar bit a bit no encuentro problema con la inicialización.
Supongo que el asunto puede ser del “ baud rate”. Estoy trabajando con un xtal de 20 MHZ.
Lo que no me que claro para el baud rate es lo siguiente, según el manual pg 214, la FCY es FOSC/2, por lo que entiendo que  FCY sería de 10.000.000., sin embargo en otros hilos he visto que usan 20.000.000.
Si tomo FCY=20.000.000, entonces , BRGx = 129 con BRGH=1, para obtener un baud rate de 9600 baud
Si tomo FCY=20.000.000, entonces , BRGx = 32 con BRGH=0, para obtener un baud rate de 9600 baud
En el programa estoy usando 129. Tambien probé con otros valores, y tengo el mismo síntoma.
Ojalá alguien me pueda decir donde tengo el problema.
De antemano muchas gracias. 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema de comunicación dsPIC > PC
« Respuesta #1 en: 04 de Agosto de 2017, 20:17:42 »
Primero que nada la frecuencia es la del oscilador , lo que se conoce como Fcy o frecuencia de intruccion es Fosc/2
Raro el datasheet... Si hacemos caso al datasheet de la UART dice:

para BGRH = 0

baud = Fp  / ( 16 * (UxBRG + 1))

Donde Fp es Fosc/2 segun la nota que aparece en la ecuacion, es decir que para 9600 baud necesitarias:

UxBRG = (Fp / (baud * 16)) - 1

Es decir que el contenido deberia ser 64

------------------

Para BGRH = 1 la formula es parecida, cambia el 16 por el 4

UxBRG = (Fp / (baud * 4)) - 1

Cargando 259 obtenes

Ambos te dan 9615.38 baud.

-------------------------------

- ¿Por que este codigo esta en el camino del loop principal?

Código: ASM
  1. bset  U1MODE,#15  ;HABILITO USART
  2. bset  U1STA,#10

- Podrias usar:

Código: ASM
  1. mov #'A' ,w0       ;CARGA  CARACTER >>    A

O buscar algo parecido a eso, ya no recuerdo como cargarlo en ASM alli.

- No veo donde configuras el Oscilador, no se que oscilador estas usando, imagino que debe arrancar con el oscilador interno Si es asi deberias segurarte de tener la frecuencia de entrada.
 Parte de tu problema es que puede que no sepas exactametne la frecuencia a la cual esta funcionando tu micro.