Rotazione e rpm con pin analogici

Mi sono rimasti solo i pin analogici e dovrei contare i giri di una ruota dove è collegato un sensore magnetico.
Per il senso di rotazione potrei collegarmi al motore elettrico a 12v che muove la ruota e verificare l'alimentazione in modo da sapere in che verso gira il motore. Il problema è che i due interrupt sono occupati e dovrei utilizzare i pin analogici per verificare i giri della ruota. Secondo voi faccio una funzione che legge in continuo i valori e se i valori superano una certa soglia, per poi diminuire posso dire che il magnete è passato davanti il sensore. Oppure ci sono altre vie?

pensi troppo complicato.
Le entrate analogiche possono essere usati come entrate/uscite digitali. Basta chiamari da 14 (A0) a 19 (A5).

Ciao Uwe

Qual'è il valore soglia tra low e high sulle analogiche?
Non sono un grande esperto, ma posso fare un collegamento pull-up o pull-down per e collegare il sensore magnetico ai 5v e ad una entrata analogica (programmata come digitale) oltre le resistenze di protezione?

il valore soglia è circa 3V

ps. TUTTI i pin sono DIGITALI, ma alcuni hanno funzioni in più come il PWM o l'ADC

non ho capito bene cosa dici, ma se vuoi fare
vcc -> resistenza protezione -> sensore -> pin + pull down

allora sì, puoi farlo

Si esatto., grazie mille

uwefed:
Le entrate analogiche possono essere usati come entrate/uscite digitali. Basta chiamari da 14 (A0) a 19 (A5).

Li puoi anche chiamare A0, A1, ecc.
L'importante è usare la funzione digitaRead e non l'analogRead.

Infatti nel file pins_arduino.h (un file dell'IDE) ci sono i #define che ti riassegnano la numerazione.

#define A0 14
#define A1 15
#define A2 16
#define A3 17
#define A4 18
#define A5 19
#define A6 20
#define A7 21

quindi è completamente automatico.

Parlo naturalmente dell'IDE versione 1.0.5.

PaoloP:

uwefed:
Le entrate analogiche possono essere usati come entrate/uscite digitali. Basta chiamari da 14 (A0) a 19 (A5).

Li puoi anche chiamare A0, A1, ecc.
L'importante è usare la funzione digitaRead e non l'analogRead.

Infatti nel file pins_arduino.h (un file dell'IDE) ci sono i #define che ti riassegnano la numerazione.

#define A0 14

#define A1 15
#define A2 16
#define A3 17
#define A4 18
#define A5 19
#define A6 20
#define A7 21



quindi è completamente automatico.

Parlo naturalmente dell'IDE versione 1.0.5.

Attenzione i Pin A6 e A7 del ATmega328 versione SMD sono solo entrate analogiche e non pin digitali!!!!

Ciao Uwe

angi79:
Qual'è il valore soglia tra low e high

Lo dice il datasheet.
Tutto quello che è sotto 0.3Vcc è letto come Low, tutto quello che è sopra a 0.6Vcc è letto come HIGH.
Quindi Da 0 a 1,5V è letto come segnale basso, da 3 a 5V è letto come segnale alto.
Tutto quello che sta nel mezzo è indefinito e come tale può essere letto sia come segnale alto che come basso.

leo72:

angi79:
Qual'è il valore soglia tra low e high

Lo dice il datasheet.
Tutto quello che è sotto 0.3Vcc è letto come Low, tutto quello che è sopra a 0.6Vcc è letto come HIGH.
Quindi Da 0 a 1,5V è letto come segnale basso, da 3 a 5V è letto come segnale alto.
Tutto quello che sta nel mezzo è indefinito e come tale può essere letto sia come segnale alto che come basso.

La tensione tra 1,5V e 3V serve per avere una maggiore imunitá contro disturbi.

Lo stato che assume il segnale tra 1,5V e 3V non é casuale. È ben definita: se da und segnale HIGH arrivi tra 3V e 1,5V il segnale rimane letto HIGH finche la tensione schende sotto 1,5V. Solo in quel momento legge LOW. La stessa cosa succede se un segnal passa tra LOW a HIGH. Solo sopra 3V viene riconosciuto HIGH.

ripeto: La tensione tra 1,5V e 3V non é definita, ma la lettura non é casuale.

Ciao Uwe

E' un ciclo di isteresi ... aiuta parecchio anche nell'uso di debounce hardware (reti RC), perche' evita false letture durante la "rampa" di carica e scarica dei condensatori usai per il debounce (e per fortuna che ce l'hanno messo, altrimenti i micro sarebbero praticamente inutilizzabili :stuck_out_tongue: XD)

uwefed:
ripeto: La tensione tra 1,5V e 3V non é definita, ma la lettura non é casuale.

E me lo dici soltanto adesso? :wink:

leo72:

uwefed:
ripeto: La tensione tra 1,5V e 3V non é definita, ma la lettura non é casuale.

E me lo dici soltanto adesso? :wink:

Te lo avrei detto anche prima se me lo avessi chiesto. :wink: :wink: :wink:

uwe +1 se leo merita :grin:

ps. quindi è una soglia d'isteresi?

Praticamente si ... senza questa soglia, se il tuo ingresso avesse la commutazione esattamente in un punto (diciamo il 50%), e se il tuo pin andasse al 50% per qualsiasi motivo, sarebbe una commutazione continua, con falsi azionamenti a non finire ... lo stesso se avessi soglie non perfettamente definite, ed una minima variazione sull'alimentazione ti facesse oscillare la tensione di ingresso subito sopra e subito sotto al valore di soglia, o se un disturbo captato dai cavi ti spostasse il livello dell'ingresso sopra e sotto la soglia in continuazione ... in questo modo invece hai ben 1/3 della tensione di alimentazione di "soglia di sicurezza" fra gli stati ... ... senza questa soglia, mi sa che il 90% delle applicazioni non funzionerebbero o impazzirebbero, specie quelle "hobbystiche" o realizzate con le breadboard :stuck_out_tongue: XD

peccato però, se mettevano la soglia di HIGH a 2.5 saremmo stati compatibili a leggere segnali a 3V, in oltre devo amemtere che ho avuto problemi con quelli a 3.3V con le pull-down o simili.

Per la cronaca il Schnitt-Trigger é una cosa ancora diversa. Sono migliori rispetto alle entrate normali del circuiti TTl e CMOS.

Ciao Uwe