TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: waltermet en 29 de Septiembre de 2003, 15:31:00
-
Estoy tratando de leer y escribir mensajes de 8 bytes en hexa a través de un puerto serie en 232 a 4800. Con serin y serout lo logro perfectamente, pero a 2400. Para poder hacerlo a 4800 decidí utilizar serin2 y serout2 pero no logro que funcione correctamente.
¿Existe alguna manera de leer a 4800 utilizando serin y serout? De no ser así, por favor,¿alguien puede guiarme?
Desde ya muchas gracias.
Saludos.
-
Hay varias posibilidades, la que a mi mas me gusta es jugar cn el cuarzo.
Puedes decirle que usas el modo 2 ó 6 ( según lo dsesees invertido o no invertido ) que son 9600 baudios y entonces poner un cuarzo de 2Mhz pero manteniendo el "DEFINE OSC 4". Con esto como todo funcionará a la mitad de velocidad aunque hayas definido 9600 baudios estarás trabajando a 4800. Cuidado porque entonces todo lo que dependa del oscilador deberás escalarlo en la misma medida.
O bién puedes hacer todo lo contrario, decir que usas el modo 0 ó 4 y poner un cuarzo de 8Mhz ( entonces necesitarás un PIC que llege a los 8 Mhz mínimo ) pero manteniendo el "DEFINE OSC 4". Con esto como todo funcionará al doble de velocidad aunque hayas definido 2400 baudios estarás trabajando a 4800. ten en cuenta las precauciones mencionada antes.
-
Muchas Gracias, Marqués. Hago las pruebas de rigor y te digo como salió todo.
Saludos
-
Hola Walter,
En Melabs hay un sitio (serin2/serout2 modes) donde te describe todos los ajustes de de serin2 y serout2. Para 4800 tienes los siguientes ajustes:
4800 Driven true None 188
4800 driven true even 8380
4800 driven inverted none 16572
4800 driven inverted even 24764
4800 open true none 32956
4800 open true even 41148
4800 open invered none 49340
4800 open inverted even 57532
Tienes que ver en el datasheet según el cristal que utilices el error que se genera en la frecuencia de baudrate para ver si es aceptable o no. En general, a mayores frecuencias de cristal mayores baudrate de transmisión.
No olvides la sentencia Define OSC xx "donde xx es la frecuencia del reloj.
Saludos
Ricky
-
El problema de Walter es que quiere usar las funciones "serin" y Serout" no las "serin2" y "serout2", y dichas funciones no disponen de la velocidad que el desea.
-
Marqués: probé con el cambio de modo pero me trae problemas con ciertas subrutinas como vos bien me avisaste.Hoy, volví a intentar con el serin2 y serout2 y me día cuenta que uno de los problemas radicaba en que no había hecho el cálculo para 4800 invertido, en lugar de escribir 16572 puse 188 -anoche soñe con esto, me parece que voy a jugarle a la lotería-.
Mil gracias Ricky por la tabla, con ella pude resolver parte del problema que tengo. Y con el link que me pasaste voy a ver si puedo resolver la parte 2 del problema, que se las comento:
Ahora el tema pasa por leer los datos en hexa. Quiero leer 8 palabras pero no se da ni por enterado el pic.
Este un programita de prueba que estoy usando para experimentar con estas sentencias:
define osc 3
j var byte
dat var byte[8]
low portb.3
Leer: for j=0 to 7
serin2 portB.1,16572,[hex dat[j]]
´si le sacás la palabra hex funciona, pero en el programa original necesito que lea y compare datos en hex
next j
if dat[0]=dat[7] then
high portB.3
low portB.5
else
high portB.5
low portB.3
endif
goto leer
end
Muchas Gracias y Saludos, Walter
-
PROBLEMA SOLUCIONADO.
Gracias a su colaboración pude sacar andando no solo el programita de prueba sino el original.
Marqués, Ricky mil gracias.
Saludos, Walter