Página principal‎ > ‎2-Codigo‎ > ‎

2.39 Dos Ardus

Como he comentado en Descripción me he preguntado:

¿Puedo Conectar dos Arduitos vía Serie?

Casi, me da vergüenza “subir” los programas, por lo elementales que son

Recordar que solo  son para comprobar que la “cosa” funciona:

 El Duemil_to_Mega_1 lo he cargado en el Duemilanove

Consiste simplemente en enviar “bytes”, en el rango 33 a 126

(que corresponden a los caracteres ASCII representables) a la puerta serie (Pin 1 TX).

El Duemil_to_Mega_1_M  lo he cargado en el MEGA

 Lee los caracteres recibidos en una de las vías serie adicionales (Serial1 – Pin 19 RX1)

 y los envía a la puerta serie normal ( la conectada al PC) para visualizarlos en el “monitor serie” del PC.

 Como detalle, comentar que en el primer programa no hay que enviar “ retornos de carro” ni “tabuladores”.

Son bytes que equivocarían al  receptor.

 

Para el programa definitivo:

Tenemos que tener en cuenta que el “buffer” de entrada almacena hasta 128 bytes.

Y a partir de aquí si no leemos/limpiamos  los datos se “desbordan” (pierden)

Posiblemente sea conveniente mandar por “delante” de cada dato un identificador de a que corresponde.

¿Será necesario un control de paridad?

Como con un simple byte solo podemos enviar del 0 al 255,

tendremos que juntar 2 para enviar los datos (recordar ”union”):

Y antes de leer nada asegurarnos que tenemos la pareja

if (Serial.available() > =2) {

¿Qué pasa si se desparejan los bytes y leemos la “cola” de uno con la “cabeza” del siguiente?

Como los procesos no estarán sincronizados (tardar lo mismo en ambos ciclos (loops).

Tendremos que definir una estrategia de envío y recepción.

 

De momento se me ocurren:

 

A)    El Duemila no envía nada hasta que tiene todos los datos

y el MEGA espera hasta tener un paquete “completo"

No me gusta nada si por cualquier cosa no se recibe todo el MEGA se queda esperando,

 sin hacer nada  y ya me imagino lo que pasa.

 

B)    El Duemila va enviando lo que tiene, en cuanto lo tiene, aunque no este completo ni ordenado

       y el MEGA cuando su "loop" pasa por la zona de “leer al Duemila”

      coge lo que hay en el buffer (siempre en pareja de bytes) y sigue.

      Esto significa que si un dato no se ha actualizado utiliza en sus cálculos el anterior.

     Aunque hay muy pocas probabilidades de que ocurra, tenemos un problema

     si el Duemilia  se ha vuelto loco y me ha enviado cientos de datos..

 

C)    Establecemos un protocolo:

-          MEGA pide un dato y Duemila se lo envia = Duemila no envía nada hasta que MEGA se lo pide

-          MEGA pide un “paquete completo” y espera hasta recibirlo completo. Volvemos al punto A)

-          Etc.

 

Como veis tenemos demasiadas alternativas y eso que aun no he empezado a pensar en “tiempos”

 ¿Que opináis vosotros?

Por favor mojaros y en los Foros aportar ideas

 

 

De momento a mi me parece que  no va a ser tan elemental como parecia…..

 

 Continuara…..

 

Ver: Continuación

 

Enlaces:

Descripción

Montaje

ċ
Duemil_to_Mega_1.pde
(1k)
Marcos Echeita,
9 de mar. de 2010 9:46
ċ
Duemil_to_Mega_1_M.pde
(1k)
Marcos Echeita,
9 de mar. de 2010 9:47
Comments