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 highLo 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
XD)
uwefed:
ripeto: La tensione tra 1,5V e 3V non é definita, ma la lettura non é casuale.
E me lo dici soltanto adesso? ![]()
leo72:
uwefed:
ripeto: La tensione tra 1,5V e 3V non é definita, ma la lettura non é casuale.E me lo dici soltanto adesso?
Te lo avrei detto anche prima se me lo avessi chiesto.
![]()
uwe +1 se leo merita ![]()
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
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