Autor Tema: uart a 38400 bps  (Leído 9460 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
uart a 38400 bps
« en: 06 de Mayo de 2007, 17:33:13 »
hola,tengo un problemilla.

tengo que realizar la comunicacion con un gps,mediante la usart del 16f876,la velocidad de comunicacion es de 38400bps.y segun veo el registro BRGH,esa velocidad no viene,por lo menos en el datashet del pic.
con que cristal y configuracion del registro obtendria esta velocidad?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart a 38400 bps
« Respuesta #1 en: 07 de Mayo de 2007, 08:26:43 »
tengo que realizar la comunicacion con un gps,mediante la usart del 16f876,la velocidad de comunicacion es de 38400bps.y segun veo el registro BRGH,esa velocidad no viene,por lo menos en el datashet del pic.
groundman, creo que te estas confundiendo el registro SPBRG con el bit BRGH.  Uno es para setear el baudeaje y el otro el modo de muestreo que te permitirá trabajar con baudeajes más altos.

con que cristal y configuracion del registro obtendria esta velocidad?

Las combinaciones pueden ser muchísimas!

En el datasheet hay una simple formula de cálculo que en base al cristal que tengas te permitirá saber qué valor de SPBRG necesitas para lograr el baudeaje que quieres.

Si hay algo que te genera duda de esa fórmula, nos preguntas y te lo decimos.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #2 en: 07 de Mayo de 2007, 18:41:08 »
es verdad,perdon.yo iba mal encaminado solo ha sido una confusion de letras,yo me referia al SPBRG.

ah y he estado mirando la formula.   Baud Rate= Fosc/(16(x+1)) donde Fosc sera el crystal a utilizar y x  el valor que se le introducira al registro SPBRG.

pero si ya se el BaudRate que voy a utilizar,38400bps.cual sera la formula para calcular el crystal?

es que la regla de tres ya hace tiempo que no la utilizo. :lol:
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #3 en: 07 de Mayo de 2007, 18:44:07 »
ah tambien esta la otra formula para low speed:

Baud Rate=Fosc/(64(x+1))

cual sera la mas apropiada?la que se acerque mas al cristal y dato en SPBRG?
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart a 38400 bps
« Respuesta #4 en: 07 de Mayo de 2007, 18:52:13 »
ah tambien esta la otra formula para low speed:

Baud Rate=Fosc/(64(x+1))

cual sera la mas apropiada?la que se acerque mas al cristal y dato en SPBRG?

Para baudeajes sobre los 9600 lo más apropiado es usar el modo de alta velocidad, y para el baudeaje que tu utilizas, te dará mayor precisión.

Oye, para saber el cristal a utilizar despejas Fosc de la fórmula y listo!

Tampoco necesitas 100% de precisión!, con un pequeño error funcionará igual, es por eso que te sugiero pruebes calcular con algún cristal que tengas a mano , no se, 16MHz, 20MHz, 8MHz, alguno que elijas y hagas el cálculo.  Si quieres lo subes acá y lo verificamos.

Cómo te darás cuenta, pretendo que lo aprendas a hacer y no a que yo te de el resultado, de esa forma te aseguro que lo aprenderás y jamás lo olvidarás.  Si te doy la respuesta... no sabrás bien el porqué.  :) :)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #5 en: 07 de Mayo de 2007, 19:34:13 »
te entiendo y te lo agradezco,porque me ha serbido para aprender.pues..

creo que lo he logrado.tengo que poner BRGH=1 que corresponde a la formula Baud Rate=Fosc/(16(x+1))

donde x  va al  SPBRG ,pondre el valor 5 ya que (16(5+1))=96   y       la formula que he hecho  xtal=(16(5+1))(BaudRate)   = 96x38400 =3.686400Mhz

y mira por donde ese crystal se comercializa :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ espero no haberme equivocado.lo he hecho bien?

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #6 en: 07 de Mayo de 2007, 19:43:00 »
upss,acabo de darme cuenta de que en el datashet de este pic ,en la tabla viene los datos a introducir,para conseguir las velocidades de 33.6 kbaud y 57.6 kbaud

pero ya podian haber puesto entre medias el valor para 38400,ya les vale. :x.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart a 38400 bps
« Respuesta #7 en: 08 de Mayo de 2007, 08:30:17 »
y mira por donde ese crystal se comercializa :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ espero no haberme equivocado.lo he hecho bien?
Sí, lo has hecho bien, ahora si solo quieres usar el PIC para transmisiones precisas y el resto de los tiempos de tu aplicación no necesitan cálculos muy precisos, no habrá ningún inconveniente, pero si necesitas tiempos precisos también con otras rutinas te aclaro que ese valor de cristal te complicará la forma de pensar ya que cada ciclo de instrucción demorará 1,085 microsegundos.

upss,acabo de darme cuenta de que en el datashet de este pic ,en la tabla viene los datos a introducir,para conseguir las velocidades de 33.6 kbaud y 57.6 kbaud
pero ya podian haber puesto entre medias el valor para 38400,ya les vale. :x.
Je, bueno, ¿tampoco se puede tener todo en la vida no? Y hubieras tenido el dato ya resuelto, no habrías aprendido a cómo calcularlo.  :)

Si quieres como ejercicio, puedes calcular el X que te daría para un cristal de 16MHz, y luego compara el baudeaje obtenido con el que quieres obtener y calcula el error.  Allí veras que el error... no es tanto  :)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #8 en: 08 de Mayo de 2007, 17:50:06 »
para 16MHz hay un crystal muy cercano el 15.9744MHz que el valor de x es  25.pero para un crystal que tambien sirva para.manejar tiempos esta el 16.777.216MHz pero no se esa diferencia de 802.816KHz tendra mala influencia para la usart.

y para el crystal de 3.6864MHz valor x=5 el mas cercano para tiempos mas exactos es el 4.194304MHz que tiene una diferencia de 507.904KHz.
pero como es una frecuencia 4 veces menor,supongo que hay mas margen de error ya que para que hubiera menor margen de error, la frecuencia de diferencia
deberia ser menor de 200.704KHz.

Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart a 38400 bps
« Respuesta #9 en: 09 de Mayo de 2007, 09:35:54 »
para 16MHz hay un crystal muy cercano el 15.9744MHz que el valor de x es  25.pero para un crystal que tambien sirva para.manejar tiempos esta el 16.777.216MHz pero no se esa diferencia de 802.816KHz tendra mala influencia para la usart.

y para el crystal de 3.6864MHz valor x=5 el mas cercano para tiempos mas exactos es el 4.194304MHz que tiene una diferencia de 507.904KHz.
pero como es una frecuencia 4 veces menor,supongo que hay mas margen de error ya que para que hubiera menor margen de error, la frecuencia de diferencia
deberia ser menor de 200.704KHz.

Para qué complicarsela tanto

Si se usa un cristal de 16.0000 MHz veamos el error que se obtiene

X = (Fosc/Baud * 16) - 1
X = (16000000 / (38400 * 16) ) - 1 = 25,0416667

Tomamos X = 25

Baud. Obtenido = Fosc / (16*(x+1)) = 38461,5385


Error (%) = 100 * (Baud Obtenido - Baud Deseado) / BaudDeseado = 0,16%


Como ven el error es ínfimo y les aseguro que funcionará de maravillas.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #10 en: 09 de Mayo de 2007, 18:39:32 »
entiendo,pero hasta que % de error,no es conveniente sobrepasar? y que pasaria si sobrepasamos ese % de error?


ah,otra cosilla.
he estado transmitiendo desde el pc al pic,por el usart.y no me concuerdan los datos recividos por el pic.por ejemplo:

a las teclas que he pulsado he obtenido los siguientes valores.

a=4Fh
b=27h
c=4Eh
d=13h
1=67h
2=33h

los he estado comparando con tablas ASCII que he visto por internet y no me coinciden los valores,con los que deberian poner.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart a 38400 bps
« Respuesta #11 en: 09 de Mayo de 2007, 23:00:38 »
Puedes probar primero al revés? PIC primero hacia la PC? digamos, pensando en que tal vez tengas un problema con el baudeaje o bien con la masa, o con otra cosa.


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #12 en: 10 de Mayo de 2007, 10:47:50 »
tendre que provar,pero lo raro es que si fuera una mala masa, la tecla que pulsara,el valor seria casi siempre diferente.

y en mi caso el valor siempre es el mismo para la tecla que pulso,la verdad es que algo he tenido que hacer mal,porque me estoy acordando
de que durante la realizacion del programa ,las primeras pruevas ,las teclas del 1 al 9 tenian como un orden relativo.es decir que el valor iba incrementando.

pero segun la configuracion de los registro esta todo corecto.

                                   BANK1
         clrf   TRISB      ;Puerta B como salida
         movlw   b'10111111'   ;RC7/Rx entrada,
         movwf   TRISC       ;RC6/Tx   salida.
         movlw   0x06
         movwf   ADCON1      ;porta entradas digitales
         movlw   0xcf
         movwf   TRISA
         movlw   b'00100100'   ;Configuracion USART modo alta velocidad 9600 baud
         movwf   TXSTA      ;y activacion de transmision
         movlw   .25      ;9600 baudios
         movwf   SPBRG
                    BANK0   ;Cambio al banco 0 -------------
         movlw   b'10010000'   ;Configuracion de la usart
         movwf   RCSTA      ;para recepcion continua y habilitacion de la usart
         movlw   b'11000000'   ;Habilitacion para las
         movwf   INTCON      ;interrupciones en general y perifericas
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: uart a 38400 bps
« Respuesta #13 en: 10 de Mayo de 2007, 11:04:31 »
El error de baudeaje aceptable, depende del hardware que esté del otro lado, pero no debieras tener mayores problemas si el error es menor al 5%. No me dijiste si probaste del pic hacia la PC...

Respecto a tu código, fijate esto
         movlw   b'10111111'   ;RC7/Rx entrada,
         movwf   TRISC       ;RC6/Tx   salida.
En los 16F, trisc<7:6> ambos deben estar en 1.



         movlw   b'11000000'   ;Habilitacion para las
         movwf   INTCON      ;interrupciones en general y perifericas
¿realmente usas las interrupciones? sino es así, no hace falta habilitarlas.

Por otra parte, no has posteado el código de la recepción , tal vez allí esté el problema.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: uart a 38400 bps
« Respuesta #14 en: 10 de Mayo de 2007, 17:37:57 »
tengo que repasar el programa ,no quiero marearte tampoco bucho hasta que no este seguro de no poder solucionarlo.

una cosa,el trisc lo he configurado de esa manera porque rc6 es una salida tx,o no va de esta manera?

yo se que una vez tube problemas con el porta,pero porque antes de utilizar este puerto como entradas o salidas,habia que configuralo como entradas digitales o analogicas.pero el puero de la ¿ usart?,no se.????? hay algo que se me escapa?
Montando mi primera impresora 3D (Raprep Prusa i3)