Go Down

Topic: Trasmissione dati (Read 3 times) previous topic - next topic

g.paolo92

Salve a tutti!
Sono alle prime armi con l'utilizzo dell'arduino e avrei bisogno di un consiglio per il progetto che sto realizzando. Si tratta di un progetto scolastico con funzione puramente dimostrativa quindi non mi interessa che sia ottimizzato alla perfezione. Devo realizare una simulazione di una trasmissione tramite fibra ottica, utilizzo due Arduino uno, il primo trasmette una serie di bit con un led rosso (acceso=1 spento=0), mentre il secondo ha collegata una fotoresistenza collegata ad un partitore di tensione che riconosce il valore ricevuto. Se faccio eseguire il programma utilizzando un solo Arduino tutto funziona perfettamente, se uso due Arduino separatamente sincronizzo la trasmissione utilizzando led e fotoresistenza, i microcontrollori si scambiano un po' di bit ma la trasmissione ha un lieve ritardo e dopo poco viene sfasata completamente.
Qualcuno ha idea di come si possa sincronizzare perfettamente la trasmissione? Tenendo conto che i due microcontrollori possono comunicare solo con il led e una fotoresistenza.
Grazie in anticipo.

uwefed

#1
Jan 14, 2011, 04:43 pm Last Edit: Jan 14, 2011, 04:44 pm by uwefed Reason: 1
2 cose:
* usa al posto della fotoresistenza un fototransistore perché é piu veloce.
* Per secondo usa un protocollo che ti evita questo sfasarsi:
o un protocollo tipo RS232 con uno o 2 bit di start e 1 di paritá e uno di stop
oppure un protocollo tipo codifica Manchester nel quale é codificato anche un segnale di clock.
http://it.wikipedia.org/wiki/Codifica_Manchester

Ciao Uwe

g.paolo92

Molte grazie provvederò subito a usare un fototransistor, comunque credo che il problema della sincronizzazione persista anche usando la codifica manchester, perchè per ogni bit trasmesso dovrei far "leggere" il valore al fototransistor 2 volte al posto che una sola, se la lettura è sfasata rispetto alla trasmissione il fototransistor potrebbe comunque rilevare uno 0 invece di un 1 o viceversa...

uwefed

Ciao g.paolo92

Non necessariamente.

Se sicronizzi a ogni passaggio di stato, l' errore rispetto alla durata del pulso é molto piccolo e percui irrilevante.

Esempio: periodo 1mSec, differenza tra il trasmettitore e ricevitore 0,05msec ogni msec. (5%)

Diciamo un bit dura 1msec. Se controlli se dopo 1 msec arriva un cambio e estendi quasto tempo da 0,9 a 1,1 mSec un errore di 0,05mSec non ti fa niente.

Se non risincronizzi e lascia andare vedrai che dopo 20 msec l' errore sará di 1msec e percui nella grandezza del periodo del segnale. in questo caso non leggi piú valori giusti.
Il codice Manchester decodifica un 0 in un imulso e pausa corta e un 1 in un impulso e pausa lungo (o viceversa se mi sono sbagliato) Con errori di velocitá tra trasmettitore e ricevitore abbastanza grandi puoi comunque ricavare i dati giusti. parliamo di errori di ca metá del periodo corto.

Ciao Uwe

uwefed

Ciao g.paolo92
Ma avete giá pensato di inviare i dati usando la libreria softserial e mettendo al posto del cavo tra i 2 Arduini il LED e il fotodiodo?
Ciao Uwe

Go Up