TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: a9965 en 07 de Abril de 2015, 13:17:17
-
Buenas tardes.
Estoy tratando de comunicarme con el pic16f1825 y el terminal serie.
Lo estoy haciendo con MikroC. He escrito en el foro de mikroe, pero no damos con el clavo.
Aquí os dejo el código:
int j = 12;
char txt[7];
void main(){
ANSELC = 0; //PORTC as digital
TRISC.F4 = 0; //PORT C4 as Output
TRISC.F5 = 1; //PORT C5 as Input
APFCON0 = 0x00; //Configure Rx and Tx pins
UART1_Init(9600); // Initialize UART module at 9600 bps
while (1) {
IntToStr(j, txt);
UART1_Write_Text(txt);
}
}
A mí me da, que el problema es de configuración del oscilador y el baudarate de la comunicación.
El proyecto está bien configurado. Mi reloj es de 12Mhz y externo.
Aquí os dejo algunas imágenes del proyecto y configuración.
Un saludo y gracias a quien le dedique unos minutos. ((:-))
-
El unico ejemplo que encontre fue este:
char uart_rd;
void main() {
CHECON = 30; // Esto es configuracion de puertos
AD1PCFG = 0xFFFF;
UART1_Init(56000); // Initialize UART module at 9600 bps
Delay_ms(100); // Wait for UART module to stabilize
UART1_Write_Text("Start");
UART1_Write(13);
UART1_Write(10);
while (1) { // Endless loop
if (UART1_Data_Ready()) { // If data is received
uart_rd = UART1_Read(); // read the received data
UART1_Write(uart_rd); // and send data via UART
}
}
}
Si observas para iniciarlo ahi utiliza otro valor para los 9600, sino usa el avanzado:
http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic32/help/uart_library.htm
UARTx_Init_Advanced(unsigned long baud_rate, unsigned long freq_Khz, unsigned short high_low, unsigned short parity, unsigned short stop_bits);
UARTx_Init_Advanced(9600, 2000,_UART_LOW_SPEED, _UART_8BIT_NOPARITY, _UART_ONE_STOPBIT);
Ese te permite seleccionar la frecuencia del bus, es decir 8Mhz/4 son 2Mhz o 2000Khz, podrias probarlo.
-
Gracias por tu respuesta.
El ejemplo que me has pasado ya lo he probado y no funciona.
El ejemplo que yo presento es más simple, muestra un 12 por terminal.
En cuanto a la librería que me has pasado, es para pic 32. Yo estoy usando un pic16.
Libreria UART pic16 (http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/uart_library.htm)
Ayer probé el código en proteus y funcionó a la primera. No nos podemos fiar porque es un simulador, pero en mi circuito real, revisé el hardware e incluso cambié el adaptador ftdi. Seguía sin funcionar.
¿Qué co***** puede pasar?
¿Si el hardware está bien y el software también, por qué no va ?
A mí me da que es un registro de la comunicación o el oscilador.
En fin, gracias de nuevo por su tiempo. Un saludo. :5]
-
Fijate que valor le esta poniendo en el registro donde se carga el baudrate en proteus, y la frecuencia del PIC, en lso datasheet del PIC esta la formula para calcular el baudrate, ahi te podes sacar la duda si es por un error de frecuencia o ya pasas a otra cosa.
-
Gracias de nuevo por tu aportación.
Registro a registro configuré todo lo que dices.
Voy a volver a escribir a los de mikroe a ver qué me dicen. Lo último que se me ocurre es que sea un error del compilador.
El problema es que este micro está en la versión de 20 y 14 pines. ¿Puede ser que el compilador esté haciendo cosas mal?
En fin. Dadas las quejas sobre éste, no dudaría que algún problema hay.
De nuevo gracias por su tiempo y estaré de vuelta con la solución o preguntando qué compilador usar: el de MP o el de HI TECH.
Un saludo!! :z)