Alguna vez te ha capturado la Autobaud
Hace un tiempo empecé jugando con el programa de un dsPic4011 hace unos meses, usando MPLAB y C30. Me dio satisfacción que fui capaz de ejecutar un programa "hola mundo" en un tiempo muy corto. No sólo la instalación del C30 y MPLAB ocurrió sin problemas, sino que copiar-pegar código disponible en la biblioteca de los periféricos de C30, uart1 y timer1, fue my fácil! El siguiente código, que sirvió para programar uart1, está disponible en los documentos de Microchip:
/ * Configurar UART1 módulo para transmitir datos de 8 bits con un parada. También habilitar el modo de iteración * /
baudvalue = 5;
U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & & UART_DIS_LOOPBACK
UART_EN_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT;
U1STAvalue = UART_INT_TX_BUF_EMPTY & & UART_TX_PIN_NORMAL
UART_TX_ENABLE & UART_INT_RX_3_4_FUL & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
OpenUART1 (U1MODEvalue, U1STAvalue, baudvalue);
Hace un par de semanas empecé un nuevo proyecto con un 4011, usando mas periféricos. Dado que soy un verdadero creyente en reutilizar código, importe el programa "hola mundo", recompilándolo para estar seguro que todo estaba bien configurado y luego empecé desde ahí con el nuevo proyecto.
En primer lugar escribí un código de ensayo para crear y dirigir entrada capture2, funcionó muy bien, luego escribí mas código de ensayo para 2 salidas PWM, el cual también estuvo bien. También era necesario uart2, así que simplemente copie el código de uart1 para abrirlo (cambiando 1 a 2 cuando era necesario) y funcionó. A este punto ya tenía todas las piezas necesarias para construir toda la aplicación. Así que las puse juntas y ... la entrada de capture2 se negó a trabajar! Por qué? Confieso que he perdido varias horas antes de relacionar el problema a un bloque de código especifico!
Para hacer una larga historia corta, no me di cuenta que el código de Microchip permite velocidad de autobaud al abrir uart1 (UART_EN_ABAUD). Esto impide la operación de la entrada capture1. Adivina lo que ocurre cuando autobaud se activa para uart2? Así es, captura de entrada 2 se desactiva.
Sinceramente me tomó tiempo encontrar este error también porque el autobaud ni siquiera se menciona en la sección de entrada de captura del manual de 4011. Y como suele ser, el señor Murphy se aseguró de que yo no usara entrada de capture 1 (cuando uart1 ya estaba ocupada). El problema lo solucione sustituyendo UART_EN_ABAUD con UART_DIS_ABAUD.
.
Por tanto, para evitar hacer el ridículo en frente de usted mismo, esta bien que utilice código que ya ha usado, pero asegúrase de saber exactamente lo que hace...
- blog de froa0112
- Inicie sesión o regístrese para enviar comentarios
