desktop

Inconveniente con el rs232 y un atmega16

Buenas...les escribo porq estoy teniendo un problema con la comunicación de un atmega16 por medio del rs232 a la computadora y sinceramente ya estoy perdida.

Les cuento un poco de q se trata el proyecto, desp el problema y las cosas q intenté para ver si pueden guiarme un poco.

El circuito toma una señal analógica, la convierte a digital con el conversor del micro y la envía a la computadora. Como la memoria del micro es de solo 1k, la idea es convertir y enviar, por lo q necesito una velocidad de 115.200 bps. En un primer momento logré muestrear y enviar a esta velocidad sin inconvenientes, luego hice algunas modificaciones en el hardware para tomar también la parte negativa de la señal pero coloqué un jumper para poder volver al circuito inicial q funcionaba. Sin embargo, no pude hacer funcionar más la comunicación a esta velocidad, y de acuerdo a las muestras q recibo y el tiempo transcurrido siempre estoy a una velocidad de alrededor de 50.000 bps. El programa lo único q hace es ir a la interrupción del adc y allí enviar al udr la conversión (de 8bits).

Al detectar este inconveniente en la comunicación intenté varias cosas como:

- Usar la interrupción del udre e ir incrementando un registro que se envia hasta llegar a los 255 para luego volver a empezar desde 0. Con este programita tamb logro una velocidad de más o menos 50.000 bps y detecto q a partir de un momento el envío (o la recepción de la computadora) comienza a fallar y saltea varios números (por ejemplo pasar de un 232 a 72). Una vez q la falla comienza se repite cada 100 recepciones pero con distintos baches.

- También usé la interrupción de txc, usando el mismo programa...ir incrementando un registro y enviandolo. Detecté el mismo inconveniente.

- En lugar de utilizar alguna interrupción hice un bucle en el cual me fijo si el udre está seteado o no...para incrementar y enviar. Nuevamente detecté el mismo inconveniente.

- Por último se me ocurrió hacer el mismo programa pero usando la interrupción de la recepción...es decir enviando un ff cuando la computadora lee algo del buffer. Todavía no pude testear bien esto...ya q tengo inconvenientes con el soft d la computadora.

De todas maneras quiero ver si se les ocurre algo más para q intente ya q no entiendo como en un momento funcionó correctamente y nunca más logré hacerlo funcionar. Como se imaginaran chequié mil veces los seteos de la configuración del usart...y no tienen inconvenientes, además d q es el mismo soft q ya funcionó. Como podrán ver...estoy perdida así q les agradecería me puedan ayudar.

Saludos
 
Dicen los Vulcanos que "Si eliminas todo lo posible, lo que quede, aunque sea improbable, debe ser la verdad...." asi que casi podria apostar a que nunca funciono desde el inicio.... simplemente fue un golpe de suerte....

Primero hay que revisar varias cosas... a que velocidad funciona el micro? intentaste enviar un dato de prueba a menor velocidad? la computadora esta configurada para recibir a esa velocidad?

Incluso tambien el cable se troza y no nos damos cuenta... revisa la continuidad, tambien si es posible coloca tu programa, posiblemente alguna interrupcion esta afectando la transmision serial...el micro se queda atorado haciendo alguna accion y cuando se desocupa la computadora ya se canso de esperar...
 
Gracias por tu respuesta. Por tu preg de la computadora, sí, está configurada para enviar y recibir a 115.200 bps.

Intenté enviar a menor velocidad (57.600 bps) y en ese caso no noté el error en el envío, es decir no salteaba ningún número al enviar desde 0 a 255 ciclicamente, y por el tiempo en q estuve enviando de vuelta la velocidad me daba alrededor de los 50.000 bps. De todas maneras voy a volver a intentar enviar a menor velocidad a ver si logro q funcione.

El tema del cable lo pensé...pero podría enviar algo si el cable se trozara?? De todas maneras voy a revisar su continuidad para quedarme tranquila. Y tamb intentar manejar el envío sin interrupciones (aunq ya lo intenté sin éxito).

En cuánto intente todo esto les cuento si llego a alguna conclusión...espero poder hacerlo andar a ese velocidad.

En caso q sea imposible (cosa q no creo), a este micro es imposible añadirle memoria ram externa, no??
 
No es imposible enviar datos a 115200, es dificil ya que hay menos tolerancia al error...

Si pudiste enviar datos a 57600 sin problema entonces solo veo 2 posibilidades, que tengas un error de ruido (que tan largo es el cable??) o que el micro no tenga tiempo de atender una interrupcion...

Lo que no me cuadra es cuando dices que envias a una velocidad y mides otra... eso no es posible en transmisiones digitales asincronas... si una computadora envia a diferente velocidad las señales se desincronizan y se comienza a recibir errores... como mediste la velocidad??
 
La verdad que estoy super perdida, acabo de probar la continuidad del cable y está perfecta. Intenté enviar sin interrupciones y a una velocidad de 9600 bps y la info la recibí sin errores y pareciera que la velocidad está correcta, me da alrededor de los 9300 bps.

Te cuento como mido la velocidad d la recepción a ver si estoy haciendo algo mal. Yo envío 8 bits de datos, más un bit de start y uno de stop...o sea que cada registro de información tiene 10bits. Con un cronometro estoy midiendo el tiempo entre la conexión y la desconexión (es decir del envío) y luego la cantidad de registros recibidos por 10 divido el tiempo sería la velocidad a la que recibí los datos. Es correcto esto???
 
Última edición por un moderador:
MMM el procedimiento es correcto, sin embargo no es la manera adecuada de medir la velocidad, supongo que programas la computadora para que inicie un cronometro, al hacer esto la computadora tambien pierde tiempo en sus procesos internos, haciendo que el cronometro no sea exacto y te de esos errores que estas viendo

En transmisiones digitales asincronas el error es importante, ya que al no existir una señal de clock que sincronize ambos dispositivos, es muy simple que uno de ellos sea mas rapido que el otro haciendo que se desincronizen, en tu caso el error para 9600 es de 3.125%, lo cual ya es elevado

No creo que ese error sea real... estoy casi seguro que es debido a tu procedimiento de medicion, lo ideal es que consigas un osciloscopio para medir la señal

Volviendo al tema principal.... intenta enviar una secuencia grande de numeros a diferentes velocidades, y anota en que numero se pierde la transmision en cada velocidad, asi sabremos si se desincronizan los equipos, repite la accion varias veces a distintas horas del dia, asi sabremos si el error es por ruido electrico

Tambien necesito que me digas la longitud del cable.... entre mas largo sea mas pequeña debe ser la velocidad de transmision... ya que la señal tiene un tiempo de retardo y ademas se va deformando en cables largos....
 
Claro...yo ese error se lo adjudicaba a la manera de medir la velocidad, más teniendo en cuenta que no tuve ningún error en la transmisión, llegué como máximo a transmitir a 57.600bps sin observar errores.

La longitud del cable es de alrededor de un metro, pero podría acortarse en caso que fuera necesario.

En cuánto a enviar a distintas velocidades estuve toda la mañana probando esto y observé que los errores los tengo al transmitir a 115.200 bps más o menos a partir de la muestra número 6500 y una vez que comienzan los errores se repiten cada 100 muestras.

Muchas gracias por todas las sugerencias...voy a seguir intentando si logro solucionar el inconveniente.

PD: Lubeck, pido disculpas por la desprolijidad, sinceramente estoy malacostumbrada a escribir mails y mensajes de textos pero pondré mi máxima atención en el futuro.
 
Atrás
Arriba