- Codice: Seleziona tutto
const int analogPin = A0; // Usa il pin A0 per la lettura analogica
// Variabili per memorizzare il valore massimo e minimo
int minValue = 4095; // Inizialmente impostato al massimo possibile per un ADC a 12 bit
int maxValue = 0; // Inizialmente impostato al minimo possibile
void setup() {
// Inizializza la comunicazione seriale per il monitoraggio
Serial.begin(115200);
// Configura l'ADC
configureADC();
}
void loop() {
// Leggi il valore analogico direttamente dall'ADC in modalità Free-Running
int analogValue = ADC->ADC_CDR[7]; // Leggi il valore dall'ADC Channel Data Register
// Controlla se il valore letto è valido
if (analogValue != 0) { // Assicurati che la lettura non sia 0
// Aggiorna il valore minimo se il valore corrente è più basso
if (analogValue < minValue) {
minValue = analogValue;
}
// Aggiorna il valore massimo se il valore corrente è più alto
if (analogValue > maxValue) {
maxValue = analogValue;
}
}
// Stampa i valori minimo e massimo
Serial.print("Min: ");
Serial.print(minValue);
Serial.print(" Max: ");
Serial.println(maxValue);
}
void configureADC() {
// Abilita l'ADC
pmc_enable_periph_clk(ID_ADC);
ADC->ADC_CR = ADC_CR_SWRST; // Reset dell'ADC
// Configura l'orologio per l'ADC
ADC->ADC_MR = ADC_MR_PRESCAL(1) | // Configura il prescaler per l'ADC
ADC_MR_STARTUP_SUT64 | // Tempo di startup
ADC_MR_FREERUN_ON | // Abilita la modalità Free-Running
ADC_MR_SETTLING_AST3; // Settling time
// Configura la risoluzione a 12 bit
ADC->ADC_MR &= ~ADC_MR_LOWRES;
// Abilita il canale 7 (A0) dell'ADC
ADC->ADC_CHER = ADC_CHER_CH7;
// Riabilita l'ADC
ADC->ADC_CR = ADC_CR_START;
}
i valori ottenuti sono:
Min: 468 Max: 3914
quindi sarebbe:
Gamma effettiva utilizzata: 3914 - 468 = 3446
Percentuale di utilizzo: (3446 / 4095) ∗ 100% = circa 84%
il foglio di calcolo che mi ha gentilmente fornito
**Edit: pensandoci forse la mia percentuale non ha niente a che vedere con quella fornita dal foglio di calcolo, semplicemente non non riesco a sfruttare tutti i 3.3v, giusto ?
Quindi quell'errore si sommerebbe a quello del foglio di calcolo ?
Altra cosa che ho notato: il sensore è veramente sensibile, devo implementare un filtro bassa basso via codice per eliminare le vibrazioni che non mi interessano per i calcolo che devo fare, ma questo non è un problema, ho già fatto qualche prova e si aggira facilmente, con il senno di poi forse era meglio la versione dell'accelerometro a 5g, ma questa è una teoria tutta da verificare.

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


