Buonasera Signori.
ultimamente mi sono dedicato alla decodifica ed alla analisi di un segnale digitale di un radiomodem a 300baud utilizzante la modulazione fsk.
il mio problema è che non sono sicuro di quello che leggo tramite un picccolo listato ed arduino uno.
dal modem fuoriescono il clock che è a 300hz e la linea data che in sede di decodifica il controller"arduino" la dovrebbe mettere in XNOR con il clock per avere il segnale in codifica manchester.
ho provato a fare il serial print dell'XNOR dei due segnali entranti in due porte di arduino, precisamente la 2 per la linea data e la 4 per la linea clock.
Solo che noto che al variare del baud rate del serial print, sul monitor seriale vien fuori una stringa binaria più o meno lunga in funzione di quest'ultima velocità seriale.
Domanda....
A quale velocità o meglio baudrate devo impostare il serial print per leggere effettivamente quello che vien fuori tra la linea di clock e data???
allego il mio piccolo listato.
Gradisco suggerimenti e dritte.
/*
Legge sul pin Data e mette il bit in XOR con quello letto sul clock
All'inizio attende di trovare un segnale basso della durata minima di 1600 millis (1600000 micros)
Poi comincia a leggere fino a quando non si verifica la condizione di timeout, cioè
fino a che non legge un segnale basso la cui durata è maggiore o uguale del timeout
*/
#define DataPin 2
#define ClockPin 4
const double TimeIn=1600000;
const double TimeOut=100000;
// #define OutData 7
void setup() {
Serial.begin(300);
pinMode(DataPin, INPUT);
pinMode(ClockPin, INPUT);
//pinMode(OutData, OUTPUT);
//tone(ClockPin, 300);
}
void loop() {
boolean StopRead;
double RealTime;
byte buffer [2];
int i=0;
// ** Finchè non trova un basso lungo 1600 ms elimina i dati in input
StopRead=false;
while(!StopRead)
{
RealTime=micros();
while (digitalRead(DataPin)==LOW){;}
// quando esco misura la durata del basso. Se è superiore a TimeIn la sequenza di dati è terminata
StopRead=((micros()-RealTime) >= TimeIn);
}
// *** qui abbiamo la certezza dell'inizio di una sequenza valida ***
RealTime=micros();
StopRead=false;
while(!StopRead)
{
//Serial.print(BitRead^digitalRead(ClockPin), BIN);
RealTime=micros();
while (digitalRead(DataPin)==LOW){;}
// quando esco misura la durata del basso. Se è superiore a Timeout la sequenza di dati è terminata
StopRead=((micros()-RealTime) >= TimeOut);
for (i=0; i<2; i++) {
buffer[i]=(digitalRead(DataPin)^digitalRead(ClockPin));
Serial.print(buffer[i],BIN);
}
}
}