RS232 con CCS, no leo lo que debería.

Hola:

Estoy intentando hacer una comunicación bidireccional entre el PC y mi placa. Como estoy usando una placa demo de Microchip no tengo problemas hardware.

La cosa es que enviando sencillas cadenas lo que recibo es ilegible. Estoy usando un PIC18F8722 cuyo código es:

Código:
#elif defined(__PCH__)
#include <18F8722.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2457600)
#USE RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PCHOST, force_sw)  
#endif

main() { 

SET_TRIS_C( 0xbf);

	putc('1');

}

La velocidad de reloj que uso la calculé con la tabla pero no estoy seguro de que esté bien. Es mi primera experiencia pic y encender y apagar leds se me da bien. ¿Alguna sugerencia?
 
keb, yo utilizo el pic 18f2515, normalmente no hay mucha diferencia entre familias de la misma gama, en la tabla dice que para un cristal de 20Mhz tendrias que usar como constante aquel valor que te de el menor % de error, para lo cual tendras que configurar algunos bits adicionales en los registros. por ejemplo

xtal = 20Mhz
SYNC = 0
BRGH = 0
BRG16 = 0
para 9600 baud
tenes 0.16% de error.

hay dos trucos que se suelen utilizar para saber que esta pasando con el puerto serie.

1. enviar un 170 que es un 10101010 y medirlo con el osciloscopio
2. enviar el mismo 170 y usar un programita en la pc que reciba el valor y comparar el patron recibido.

Normalmente las macros para configurar puertos no tienen problemas, pero de ultima siempre podes recurrir a la configuracion de los registros.


suerte.

alberto.
 
#include <16f877.h>
#use delay(clock = 4000000)
#use rs232(baud = 9600, xmit = PIN_C6, rcv = PIN_C7)//Esta directiva habilita el uso de funciones tales como GETCH, PUTCHAR y PRINTF.
#use standard_io(c) //directiva de instrucciones de entrada y salida
void main()
{
do
{
printf("\n MICROCONTROLADORES PIC");
delay_ms(1000);
}
while(true);
}
 
Atrás
Arriba