Giusto per complicarmi la vita, sto lavorando, nei ritagli di tempo, ad un progetto che prende il nome dalla mia moto FJR Yamaha: FJRobot.
La mia moto e' abbastanza carente dal punto di vista delle informazioni sul cruscotto: giri, velocita', consumo e contakilometri parziali. No more.
Il FJRobot dovrebbe:
1) durante le ore del giorno spegnere il secondo anabbagliante e comunque riaccenderlo ad una determinata velocita' od ad una certa ora -> fatto!
2) controllare periodicamente il livello della batteria e comunque sempre all'inserimento della chiave nel quadro -> fatto
3) rilevare la temperatura esterna e/o di altri punti del motore -> fatto
4) totalizzare le ore trascorse e i km percorsi giornalmente, sommarli, memorizzare gli ultimi 5 gg e il totale -> fatto
5) indicare in quale marcia sono -> sob!, non fatto, sob!
L'indicazione della marcia in uso e' determinata dal rapporto tra velocita' e numero dei giri motore.
Ad esempio:
4000 RPM -> 6,667 giri/sec.
In prima marcia corrispondono a 30 Km/h -> 8,333 mt/sec rapporto = 1,250
in quarta marcia corrispondono a 60 Km/h -> 16,667 mt/sec rapporto = 2,500
8000 RPM -> 13,333 giri/sec
In prima marcia corrispondono a 60 Km/h -> 16,667 mt/sec rapporto = 1,250
in quarta marcia corrispondono a 120 Km/h -> 33,333 mt/sec rapporto = 2,500
Ho individuato due strade per ottenere il risultato...
#1: Utilizzo del Timer 0 con interrupt
_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| clock
_______|_____________|_____________| segnale giri motore
___|___|___|___|___|___|___|___|___| giri ruota
- genero un clock elevato
- intercetto sulla porta RB0 la variazione di stato e azzero un contatore
- memorizzo nella variabile il numero di clock contati fino prossimo impulso giri motore
- memorizzo il numero di impulsi della ruota che corrispondono ad una certa unita di spostamento in metri nello stesso intervallo di tempo
- calcolo il rapporto...
se il rapporto = 1.25 -> allora sono in prima
se il rapporto = 2.50 -> sono in quarta
ecc....
#2: Utilizzo il CAPTURE del pic
Ammetto di non aver capito come funziona.
Ho letto la documentazione di Microchip, provato con gli esempi forniti...
Il massimo che ho ottenuto e' una lettura di valori (mantenendo costante la frequenza) che varia in continuazione, e non di poco.
Inoltre ho un dubbio.
Visto che ci sara' un capture sui giri motore ed uno sulla ruota, ma che i due eventi non sono sincronizzati, che risultato dovrei aspettarmi nel mometo in cui cerco di calcolare il rapporto?
Potrei, in teoria, trovarmi con il capture dei giri che ha gia' terminato il conteggio mentre quello della ruota e' ancora in fase di elaborazione.
Certo, potrei eseguire una campionatura su piu' eventi ed ottenere una valore medio.
Sto utilizzando sia Freedom II con 18F4550 che il kit fornito con im PicKit3 che monta un 18F45K20.
Le domande...
La prima soluzione e' percorribile?
Per la seconda soluzione esiste un testo che mi aiuti a capire come usare le funzioni Capture e non solo la modalita' PWM?
Grazie per la vostra pazienza!
nota: allego un diagramma di una moto, purtroppo non della mia