TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fr4n en 27 de Abril de 2011, 06:20:51
-
Hola a todos,
Uso el PIC 18F4550 y el compilador CCS.
El PIC utilizado, solo dispone de una USART que uso para la comunicación con otro dispositivo y funciona todo OK.
Mi problema es que necesito la comunicación con un tercer dispositivo a través de otro PIN distinto del PIC.
He visto que se puede usar gracias al compilador otra usart (ésta seria por software) con solo poner la instrucción:
#use rs232(baud=xxxx,parity=N,xmit=PIN_X,rcv=PIN_Y,bits=8);
justo debajo de la de mi usart anterior, quedando así:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use rs232(baud=xxxx,parity=N,xmit=PIN_X,rcv=PIN_Y,bits=8);
Pero si usao el comando putc(c); se envian por la primera usart, como puedo hacer para enviar a través de la segunda usart?
Otra pregunta ¿puedo cambiar el baudrate de esta segunda usart simulada a 500 kbps?
En caso contrario...
¿Como puedo enviar datos en serie (un byte o más), bit a bit a través de cualquier otro pin del pic distinto a la uart y con la velocidad que necesito de 500K bits/s?
Muchas gracias a todos!
-
Hola amigo, si puedes poner varios Usart que el compilador controlará por soft-ware.
para seleccionarlos debes utilizar la directiva stream
#use rs232(baud=4800, xmit=pin_c6,rcv=pin_c7,stream=pc)
#use rs232(baud=2500, xmit=pin_a4,rcv=pin_a4,stream=mando)
debes utilizar también la directiva fputc
Para recibir:
dato_recibido = getc(pc);
dato_recibido = getc(mando);
Para enviar:
fputc(registro,pc);
fputc(registro,mando);
Saludos.
-
Muchas gracias por responder!
Cual es el baudrate maximo que se puede usar? Mi pic trabaja a 48Mhz (18F4550)
el baudrate tiene que ser de los "standars" o puede ser cualquier número dentro de los rangos maximos y minimos?
necesito un bitrate concreto y bastante altito a mi parecer (500kbits/segundo).
Saludos!
-
La verdad no he probado comunicaciones mayores a 38400, en cuanto a las velocidades se puede elegir el valor, hay que tener en cuenta que el receptor esté obviamente sincronizado a la misma velocidad.
Saludos.
-
La verdad no he probado comunicaciones mayores a 38400, en cuanto a las velocidades se puede elegir el valor, hay que tener en cuenta que el receptor esté obviamente sincronizado a la misma velocidad.
Saludos.
Esa es la cosa, que mi receptor trabaja a 500 bits por cada segundo... y por eso quiero enviarle los datos a esa velocidad, para que asi "me entienda"
Saludos.
-
Revisa el datasheet del pic, en la seccion del USART viene una tabla, con las velocidades a las que puede trabajar, y tambien el error que puede haber en la velocidad, dependiendo del cristal utilizado.
-
Muchas gracias, en el datasheet pone valores como:
9.600 baudios
19.200 baudios
57.600 baudios
115.200 baudios
El de 57.600 es el más cercano, tiene distintos errores segun la configuración de ciertos parámetros, pero todos rondan de 57.000 a 62.000 de bitrate.
¿Puedo poner 50.000 baudios en lugar de 57.600? ¿o tengo que poner siempre solo esos rangos del data sheet?
Gracias!
-
Una duda al respecto. Esos valores son para el módulo de usart por hard o también para la librería de usart por soft?
Saludos.
Jukinch
-
Muchas gracias, en el datasheet pone valores como:
9.600 baudios
19.200 baudios
57.600 baudios
115.200 baudios
El de 57.600 es el más cercano, tiene distintos errores segun la configuración de ciertos parámetros, pero todos rondan de 57.000 a 62.000 de bitrate.
¿Puedo poner 50.000 baudios en lugar de 57.600? ¿o tengo que poner siempre solo esos rangos del data sheet?
Gracias!
Podes poner el valor que te parezca, esos son estándares, ahora tienes que estudiar si logras que el error de la velocidad obtenida frente a la necesaria sea adecuado, nada mas.
Saludos!
-
Una duda al respecto. Esos valores son para el módulo de usart por hard o también para la librería de usart por soft?
Saludos.
Jukinch
En el datasheet se refiere a la usart por hardware supongo, la verdad que no viene especificado en ningun sitio, así que supongo que la usart por software debe ser igual...
Aunque ahora que lo dices la de software la genera el propio compilador de ccs y no se si soportará esas velocidades, ni el error que me generaría en caso de no ser igual que la usart por hardware :oops:
Gracias!Muchas gracias, en el datasheet pone valores como:
9.600 baudios
19.200 baudios
57.600 baudios
115.200 baudios
El de 57.600 es el más cercano, tiene distintos errores segun la configuración de ciertos parámetros, pero todos rondan de 57.000 a 62.000 de bitrate.
¿Puedo poner 50.000 baudios en lugar de 57.600? ¿o tengo que poner siempre solo esos rangos del data sheet?
Gracias!
Podes poner el valor que te parezca, esos son estándares, ahora tienes que estudiar si logras que el error de la velocidad obtenida frente a la necesaria sea adecuado, nada mas.
Saludos!
Muchas gracias!
PD: Aunque la duda de nuestro amigo jukinch necesitaría aclararla antes supongo :oops:
-
Una duda al respecto. Esos valores son para el módulo de usart por hard o también para la librería de usart por soft?
Saludos.
Jukinch
En el datasheet se refiere a la usart por hardware supongo, la verdad que no viene especificado en ningun sitio, así que supongo que la usart por software debe ser igual...
Aunque ahora que lo dices la de software la genera el propio compilador de ccs y no se si soportará esas velocidades, ni el error que me generaría en caso de no ser igual que la usart por hardware :oops:
Gracias!
:shock: Está más que claro que el datasheet indica las características de UART por hardware. El tema de emularlo por software es totalmente tu responsabilidad.
Saludos!
-
Ok, muchisimas gracias!
Saludos!
-
Ok. Gracias Suky por el dato.
Saludos a ambos.
Jukinch
-
Hola amigo, si puedes poner varios Usart que el compilador controlará por soft-ware.
para seleccionarlos debes utilizar la directiva stream
#use rs232(baud=4800, xmit=pin_c6,rcv=pin_c7,stream=pc)
#use rs232(baud=2500, xmit=pin_a4,rcv=pin_a4,stream=mando)
debes utilizar también la directiva fputc
Para recibir:
dato_recibido = getc(pc);
dato_recibido = getc(mando);
Para enviar:
fputc(registro,pc);
fputc(registro,mando);
Saludos.
Sin la directiva stream, cuando solo usaba la usart por hardware, uno de los parámetros era decirle el numéro de bit que se iban a trasmitir, de la siguiente forma:
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Con la directiva stream, como se o como le digo los bits a trasnmitir?
Gracias!
-
La directiva stream es para asignarle un nombre al bus, nada tiene que ver con la cantidad de bits a transmitir, eso ya lo definiste con BITS=...
Saludos!
-
La directiva stream es para asignarle un nombre al bus, nada tiene que ver con la cantidad de bits a transmitir, eso ya lo definiste con BITS=...
Saludos!
Aah, perdon, es que en el ejemplo que vi, no estaba la directiva BITS.
Saludos!
-
Por default es 8.
-
Eso del error depende con quien te comuniques si es con la pc que tiene una frecuencia de comunicacion determinada se da el caso de las valores de error del la hoja de datos, si es con otro pic con la misma configuarcion de uart el error es casi cero.