TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: fr4n en 27 de Abril de 2011, 06:20:51

Título: Como usar varias USARTs
Publicado 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!
Título: Re: Como usar varias USARTs
Publicado por: Diego E. en 27 de Abril de 2011, 09:43:41
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.

Título: Re: Como usar varias USARTs
Publicado por: fr4n en 27 de Abril de 2011, 09:52:55
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!
Título: Re: Como usar varias USARTs
Publicado por: Diego E. en 27 de Abril de 2011, 11:15:53
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.
Título: Re: Como usar varias USARTs
Publicado por: fr4n en 27 de Abril de 2011, 12:41:03
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.
Título: Re: Como usar varias USARTs
Publicado por: beatAurex1 en 27 de Abril de 2011, 19:34:40
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.
Título: Re: Como usar varias USARTs
Publicado por: fr4n en 28 de Abril de 2011, 05:47:19
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!
Título: Re: Como usar varias USARTs
Publicado por: jukinch en 28 de Abril de 2011, 09:18:43
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
Título: Re: Como usar varias USARTs
Publicado por: Suky en 28 de Abril de 2011, 09:41:18
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!
Título: Re: Como usar varias USARTs
Publicado por: fr4n en 28 de Abril de 2011, 10:27:25
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:
Título: Re: Como usar varias USARTs
Publicado por: Suky en 28 de Abril de 2011, 12:26:17
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!
Título: Re: Como usar varias USARTs
Publicado por: fr4n en 28 de Abril de 2011, 13:10:31
Ok, muchisimas gracias!

Saludos!
Título: Re: Como usar varias USARTs
Publicado por: jukinch en 28 de Abril de 2011, 17:30:03
Ok. Gracias Suky por el dato.
         Saludos a ambos.
                   Jukinch
Título: Re: Como usar varias USARTs
Publicado por: fr4n en 29 de Abril de 2011, 07:43:13
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!
Título: Re: Como usar varias USARTs
Publicado por: Suky en 29 de Abril de 2011, 09:38:05
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!
Título: Re: Como usar varias USARTs
Publicado por: fr4n en 29 de Abril de 2011, 09:51:36
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!
Título: Re: Como usar varias USARTs
Publicado por: Suky en 29 de Abril de 2011, 12:23:42
Por default es 8.

Título: Re: Como usar varias USARTs
Publicado por: cristian_elect en 29 de Abril de 2011, 12:40:42
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.