ImageImageImageImage
Hazte Socio (El Foro siempre Gratis)
Paga con Tarjetas+ Info www.arde.cc/socios

UART de pic a 125khz

Postea todo lo relacionado con el mundo de los microcontroladores aquí

Moderator: Junta Directiva

Post Reply
User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

UART de pic a 125khz

Post by fusion » Fri Nov 16, 2012 9:33 am

Hasta ahora programaba el puerto serie por software, pero si me cambio a un micro pic con UART me pregunto si podré programarlo para coger datos digitales a 125khz.
Mi idea es usar uno que consuma poco, un 12F1823 o similar.

Saludos

Ranganok
Usuario Desarrollador
Usuario Desarrollador
Posts: 3874
Joined: Mon Nov 07, 2005 3:10 pm
Location: Barbaros del Valle
Contact:

Re: UART de pic a 125khz

Post by Ranganok » Fri Nov 16, 2012 10:39 am

Depende del cristal que le pongas... algunas cosas a tener en cuenta:

1.- Usa mejor una de las velocidades normalizadas para comunicación asíncrona (puerto serie): 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 (existen otras pero estas son las más comunes). De esta forma tendrás menos problemas al comunicarte con otros equipos.
2.- Mira que el micro llegue, y qué oscilador necesita.
3.- La alta velocidad y el bajo consumo suelen estar reñidos, a un oscilador de más velocidad un consumo mayor.

S2

Ranganok Schahzaman
skiras.blogspot.com

"En igualdad de condiciones la explicación más sencilla es la cierta"

sistemasorp
Usuario Experto
Usuario Experto
Posts: 472
Joined: Fri Jan 29, 2010 9:51 pm

Re: UART de pic a 125khz

Post by sistemasorp » Fri Nov 16, 2012 11:25 am

El 12F1823 no lo encuentro en la página de microchip http://www.microchip.com/ParamChartSear ... &pageId=74" onclick="window.open(this.href);return false; por lo que me imagino que te referirás el 12F1822/16F1823.

Si es así sólo comentarte que depende del cristal de cuarzo que uses podrás alcanzar una velocidad u otra. En el datasheet http://ww1.microchip.com/downloads/en/D ... 41413C.pdf" onclick="window.open(this.href);return false; podrás ver a partir de la página 299 la tabla de velocidades de la USART y el error que tiene dependiendo del cristal que elijas.

Para tener un error bajo a 115200 bps que es la máxima velocidad que permite la USART y pretendiendo usar la mayor frecuencia de micro posible debes poner o bien un cristal de 18,432 Mhz. para que la sincronización sea perfecta (ningún error) o bien un cristal de 32 Mhz y los bits BRGH y BRG16 a 1.

User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

Re: UART de pic a 125khz

Post by fusion » Tue Nov 20, 2012 11:47 am

No puedo elegir la frecuencia.
Creo que se podría programar cualquier velocidad si pudiera programar cualquier divisor de la frecuencia, para 125khz, debiera usar un cuarzo de 8MHz y dividir por 64.
Si programara 115200 tendría un error del 8.5%.
(A lo mejor si "engaño al pic" y le digo que el reloj es de una frecuencia de 8MHz menos el 8.5% me trabajaría bien a 125khz en vez de 115200)

Atención: he podido programar en labview una aplicación Modbus sobre RS485 a 125kbps, con lo cual ya puedo comunicarme con un pic a esa frecuencia. A ver si lo logro también con un RS232, aunque no dispongo ahora de ninguno :)

dragonet80
Usuario Desarrollador
Usuario Desarrollador
Posts: 1323
Joined: Wed Oct 03, 2007 12:15 am
Location: Ibiza

Re: UART de pic a 125khz

Post by dragonet80 » Wed Nov 21, 2012 9:01 pm

Ese micro en concreto no lo he usado nunca, pero si puedes configurar los divisores, como tu has dicho, no tiene que haber ningún problema.

User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

Re: UART de pic a 125khz

Post by fusion » Wed Jan 30, 2013 9:52 am

Para leer y escribir por las dos uarts he hecho este trozo de código:

Code: Select all

	while(1)
	{
		if  (!U1STAbits.UTXBF)   {	U1TXREG=bufferTX1[countTX1--]; }
		if  (!U2STAbits.UTXBF)   {	U2TXREG=bufferTX2[countTX2--]; }
		if  (U1STAbits.URXDA)    {	bufferRX1[countRX1++]=U1RXREG; }
		if  (U2STAbits.URXDA)    {	bufferRX2[countRX2++]=U2RXREG; }
		...
	}
La pregunta es si después de escribir he de resetear el flags: U1STAbits.UTXBF=1
Y si después de leer también: U1STAbits.URXDA=0
(y lo mismo para la segunda UART)

dragonet80
Usuario Desarrollador
Usuario Desarrollador
Posts: 1323
Joined: Wed Oct 03, 2007 12:15 am
Location: Ibiza

Re: UART de pic a 125khz

Post by dragonet80 » Thu Jan 31, 2013 10:46 am

fusion wrote:Para leer y escribir por las dos uarts he hecho este trozo de código:

Code: Select all

	while(1)
	{
		if  (!U1STAbits.UTXBF)   {	U1TXREG=bufferTX1[countTX1--]; }
		if  (!U2STAbits.UTXBF)   {	U2TXREG=bufferTX2[countTX2--]; }
		if  (U1STAbits.URXDA)    {	bufferRX1[countRX1++]=U1RXREG; }
		if  (U2STAbits.URXDA)    {	bufferRX2[countRX2++]=U2RXREG; }
		...
	}
La pregunta es si después de escribir he de resetear el flags: U1STAbits.UTXBF=1
Y si después de leer también: U1STAbits.URXDA=0
(y lo mismo para la segunda UART)
Si te fijas en el "Family Reference Manual" del 30F, verás que el bit/flag UTxBF es "read only".

Puedes darle un vistazo al bootloader y a su código fuente para ver como hace las lecturas y escrituras:
http://www.microchip.com/stellent/idcpl ... e=en530200" onclick="window.open(this.href);return false;

Vaya, ahora he visto que yo te hablo del dspic y tu usas un 16F1823. Pero eso no me cuadra con el código que has puesto, que vendría a ser de un dspic. En cambio en el 16F1823, usa unos registros diferentes y sólo tiene 1 puerto serie. Así que me quedo un poco descolocado.

User avatar
fusion
Usuario Avanzado
Usuario Avanzado
Posts: 389
Joined: Tue Oct 09, 2007 2:12 pm
Nombre: Javier Lopez Segura
Location: Madrid
Contact:

Re: UART de pic a 125khz

Post by fusion » Mon Feb 04, 2013 5:02 pm

Es correcto, estoy con el dspic30, perdona :)

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest