Szervusz s3seawa!
Amint az írásodból kivettem, egy négyütemű autóhoz szeretnél egy motorfordulatszám mérőt készíteni, amit soros porton monitorozni szeretnél.
Lenne nagy hirtelen két észrevételem.
1. Fentebb írtad, hogy 4 impulzus jut 1 fordulatra. Nos ez hibás feltételezés csak 2 impulzus jut 1 fordulatra.
2a. 4MHz-es órajel, 64-es leosztás, 16bit-es timer. Eredmény: 1sec, ha a timer1-et H0BDC (dec 3036)-ról indítod.
2b. 16MHZ-es órajel, 1024-es leosztás, 16bit-es timer. Eredmény: 1sec, ha a timer1-et HC2F7 (dec 49911)-ről indítod.
Amit tudnék javasolni:
- Csinálsz egy 1sec-os megszakítást a timer1 segítségével. (A megszakításban a számláló kezdőértékét mindig meg kell adni.
- Figyelsz egy megszakítás bemenetet (INT0, vagy INT1). Itt csak egy változó értékét növeled (incr impulus)
- Timer1 túlcsordulásakor kiolvasod az impulzusok számát, lemented, majd nullázod
- Az impulzusok számából kiszámolod a fordulatszámot.
Pl.: Alapjárat 500ford/perc = 8,33ford/sec = 16,66impulzus/sec
Viszont az AVR byte változóval csak egész számokat tud kezelni. Visszaszámolva pontatlan fordulatszámot kapnál vissza.
1impulzus/sec = 0.5ford/sec = 30ford/perc (maximum ekkora a felbontásod).
Ha pontosabb értéket szeretnél, növeld a timer1 idejét.
Do-Loop ciklusban kiírod a mentett fordulatszám értékét.
Ez csak egy elvi felépítés és fejben elgondolt elképzelés, ami hibákat is tartalmaz(hat) de én így kezdenék neki.
Ha lenne ADC bemeneted, akkor a "Config ADC" paranccsal konfigolod. De max 5V kerülhet a bemenetre! Bascom súgót nézd meg hozzá