Buongiorno a tutti,
ho un problema da risolvere.
Sto cercando di simulare dei contraves (selettori decimali/binari) per comandare una scheda che gestisce un vfo di una radio con arduino.
La frequenza dovrà variare da 1 MHz a 30MHz e la risoluzione a 100Hz quindi se il valore fosse rx=30.000.000Hz andrà troncata ai 100Hz quindi rx=rx/100.
Otterrò quindi 300.000 per gestire i 6 contraves.
La mia idea sarebbe quella di creare una funzione
void converti(long fr) { // Funzione per scomporre le cifre.
f=fr%10; //100hz
fr=fr/10;
e=fr%10; //1Khz
fr=fr/10;
d=fr%10; //10Khz
fr=fr/10;
c=fr%10; //100Khz
fr=fr/10;
b=fr%10; //1MHz
fr=fr/10;
a=fr%10; //10MHz
}
Ed una seconda funzione con maschera per inviare il codice binario relativo per simulare i contraves dove i vari a,b,c,d,e,f rappresentano i 6 contraves
ed 0/1/2/4 rappresentano gli esponenti base 2 del valore binario che piloteranno i 4 pin in ingresso nella scheda :
void inviaBCD(){
digitalWrite(f0, (HIGH &&(f & B0001))); // 100hz
digitalWrite(f1, (HIGH &&(f & B0010)));
digitalWrite(f2, (HIGH &&(f & B0100)));
digitalWrite(f4, (HIGH &&(f & B1000)));
digitalWrite(e0, (HIGH &&(e & B0001))); // 1Khz
digitalWrite(e1, (HIGH &&(e & B0010)));
digitalWrite(e2, (HIGH &&(e & B0100)));
digitalWrite(e4, (HIGH &&(e & B1000)));
digitalWrite(d0, (HIGH &&(d & B0001))); // 10Khz
digitalWrite(d1, (HIGH &&(d & B0010)));
digitalWrite(d2, (HIGH &&(d & B0100)));
digitalWrite(d4, (HIGH &&(d & B1000)));
digitalWrite(c0, (HIGH &&(c & B0001))); // 100Khz
digitalWrite(c1, (HIGH &&(c & B0010)));
digitalWrite(c2, (HIGH &&(c & B0100)));
digitalWrite(c4, (HIGH &&(c & B1000)));
digitalWrite(b0, (HIGH &&(b & B0001))); // 1Mhz
digitalWrite(b1, (HIGH &&(b & B0010)));
digitalWrite(b2, (HIGH &&(b & B0100)));
digitalWrite(b4, (HIGH &&(b & B1000)));
digitalWrite(a0, (HIGH &&(a & B0001))); // 10Mhz
digitalWrite(a1, (HIGH &&(a & B0010)));
}
Simulandolo con Excel queste 2 funzioni girano ottimamente ma con arduino da dei risultati incongruenti.
La variabile che gli passo è stata inizializzata così:
int_fast32_t rx=7200000; // Starting frequency of VFO
in una fase successiva viene caricata in una EEPROM
// Load the stored frequency
if (ForceFreq == 0) {
freq = String(EEPROM.read(0))+String(EEPROM.read(1))+String(EEPROM.read(2))+String(EEPROM.read(3))+String(EEPROM.read(4))+String(EEPROM.read(5))+String(EEPROM.read(6));
[b] rx = freq.toInt(); [/b]
}
}
Come si vede la variabile viene convertita in intero rx = freq.toInt();
Non vorrei che tutte queste modifiche di tipo variabile comportassero un funzionamento anomalo.
grazie per l'attenzione
Antonio