Que tal Redpic,
... tienes que modificar los siguientes registros de configuracion del USART.
TXSTA
RCSTA
BAUDCON
...
SPBRG
SPBRGH
Otra cosa que también recomiendo es la directiva RS232_ERRORS. Cuando en la comunicación se produce un 'framing error' o un 'overun error' la comunicación se queda totalmente parada y hay que rearmarla de nuevo. A ver si lo que obtienes es algún tipo de error que te congela la comunicación. Recomendaría que trataras estos posibles errores y que cuando se produzca alguno la rearmes para que no se quede parado (esto que comento también me dió muchos quebraderos de cabeza jeje).
#int_rda
void serial_isr()
{
if ( rs232_errors & 0x04 ) // get framing error bit from Rx status reg
{
cRxErrorFlag=1;
}
if(kbhit())
{
Keypress=getc();
buffer_char(Keypress); // lo recibo y lo añado al Buffer de Recepcion
}
}if(cRxErrorFlag==1)
{
printf("ERROR*ERROR#");
cRxErrorFlag=0;
}M'alegro que lo consiguieras.
¿Porqué reinicias el byte SPBRG antes de cargarle un valor?, ¿te falla si no lo haces?
switch(velocidad) {
case 0 :
set_uart_speed(9600);
break;
case 1 :
set_uart_speed(19200);
break;
case 2 :
set_uart_speed(38400);
break;
case 3 :
set_uart_speed(115200);
break;
default:
set_uart_speed(115200);
break;
}
Syntax:
set_uart_speed (baud, [stream])
Parameters:
baud is a constant 100-115200 representing the number of bits per second. stream is an optional stream identifier.
Returns:
undefined
Function:
Changes the baud rate of the built-in hardware RS232 serial port at run-time.
No conocía esa función, y sí, parece que hace lo mismo que hemos realizado "a pelo".Ehhh!! :-/ :-/
Muchas gracias por tu apunte.
De paso al consultar la ayuda de mi CCS C acabo de descubri un bug en la ayuda ja, ja, ja :D :D :D
...
Function:
Changes the baud rate of the built-in hardware RS232 serial port at run-time.
Each bit in the value represents one pin. A 1 indicates the pin is input and a 0 indicates it is output.
Availability:
This function is only available on devices with a built in UART.
Lo que está en itálica parece que es de la ayuda del SET_TRIS() :mrgreen:
Opps :oops: Cierto MGLSOFT, me salté sin verlo tu enlace. Y efectivamente lo tenías todo ya solucionado. Lo siento.Has medido la tension que le llega al EM202 antes y durante la conexion del GTP-USB+ ??? :mrgreen:
Otra cosa curiosa que me ocurre, leve pero curiosa:
Las líneas TX-RX salen del PIC, pasan a través del CD4053, bifurcándose unas para el MAX485 y otras para el EM202. Justo antes de conectarse al EM202 tengo conectadas a ambas líneas unos pines donde conecto un MAX232 y desde éste un cable serie DB9 al PC por el COM1.
De esta forma tengo mi placa conectada al PC de tres formas distintas: Por dos puertos COM del PC, uno directo al MAX232 y otro, a través de un conversor ATEN IC485-SN al MAX485, y por otro lado una conexión Ethernet TCP/IP desde el PC al Router ADSL y desde éste al EM202.
Tódos los módulos se alimentan de la misma fuente, el MAX232, el MAX485 y el EM202 y todos ellos junto a los DB9 del PC tienen las masas comunes. Por cualquiera de los canales con los que hable con el PIC siempre termino en los dos mismos TX RX de la USART del 18F4550, y todos hablan, cada uno a su velocidad correspondiente, alto y claro.
Pero hete aquí que si conecto el GTP-USB+ a la placa, mediante GND,PGC,PGD y VPP, hay uno de los módulos, el EM202, que se queda sordo y mudo. :shock:
Conectando el Socket TCP/IP y el canal RS232 éste último en paralelo absoluto con la salida TTL del EM202, cuando escribo algo el RS232 habla perfectamente, pero desde el Socket no aparece nada, ni muge ni puje.
Desconecto el GTP-USB+ y el Socket revive como ave fénix y habla hasta por los codos. :mrgreen:
Misterios de la electrónica "másica", a lo mejor.
Ahora estoy trabajando con una comunicación RS485 entre varios dispositivos.
Tengo 2 PC´s. Con uno programo la pba y en el otro tengo enganchado el cable para monitorizar las tramas que envío ERROR!!!
Se produce un bucle de masas que no veas y la comunicación se queda KO cuando le da la gana.
El PC con el que programo lo tengo enganchado a la pba por medio del programador (GTP-USB+) y el cable de comunicación lo tengo enganchado al otro PC.
Solución?? Quitamos el cable de programación ICSP y ya está, ya no hay bucle de masas. Parece una idiotez, pero, me ha dado muchos quebraderos de cabeza esta tontería.