pic33f UART Problems

0

He estado arrancándome el pelo por un tiempo. Tengo un dsPIC33FJ16GS502 y he estado tratando de que transmita un solo carácter a mi computadora, pero hasta ahora, he estado recibiendo basura absoluta:

LauCdeberíaenviar'b'enlugarde0x89.Tengounresumendemicódigodisponible aquí .

Tengo un cristal de 16 Mhz conectado a OSC1 y OSC2 con dos condensadores de 27 pF conectados. También tengo una tapa electrolítica de 10 uF en Vcap (la hoja de datos dice que realmente debería usar tantalio, pero no tengo ninguna en este momento). Estoy usando un pickit 2 para programar el uC. El pin TX se conecta a un convertidor serie USB FTDI FT232. La velocidad de transmisión es de 9600.

Tal vez me esté perdiendo algo realmente básico. Cualquier ayuda sería muy apreciada!

Editar: Aquí hay una foto de mi configuración:

Edición2:medicionesdesdeunanalizadorlógico.Parecequehayunafluctuaciónentre0x89yunacoma:

    
pregunta superkittens

1 respuesta

1

Editar: se confirmó que la información de nivel estaba bien (TTL out invertido - > TTL invertido en un puente USB FTDI) pero lo he dejado al final de esta respuesta en caso de que alguien más lo necesite.

La forma más fácil de lidiar con este tipo de solución de problemas es descomponerlo y confirmar que los bits funcionan. Un osciloscopio (o analizador lógico) confirmará que el tiempo es correcto y que la señal no está invertida y es el nivel adecuado. Eso elimina posibles problemas con la configuración de BRG, la fuente del reloj o la configuración de frecuencia, etc.

Si hay una falta de coincidencia entre el número de bits de inicio y de parada o la longitud en el receptor y el transmisor, entonces puede aparecer cuando los caracteres se envían uno tras otro sin espacio, por lo que puede ayudar a espaciarlos ( también hace que sea más fácil interpretar el analizador lógico o las imágenes de alcance). No en este caso, ya que está controlado por interrupciones, pero incluso es posible que el búfer se pueda sobrescribir.

He tenido buena suerte al utilizar Realterm como un programa de terminal, también Teraterm y Putty en menor medida.

Suposición original del problema (se deja por razones históricas).

Si no está utilizando un convertidor de nivel RS-232, ese podría ser su problema. Una unidad típica es el MAX232 .

Además de cambiar los niveles a los voltajes apropiados, invierte la señal.

La mayoría de los receptores RS-232 responderán a señales de 0 / 5V, pero la señal invertida provocará que se reciban datos incorrectos.

De la hoja de datos vinculada arriba:

El chip contiene bombas de carga para obtener señales de +/- 8.5V de una sola fuente de alimentación de 5V, con solo unos pocos condensadores cerámicos o electrolíticos externos.

Puede probarlo con un inversor si no tiene ninguno de estos chips.

    
respondido por el Spehro Pefhany

Lea otras preguntas en las etiquetas