Mérése időrésben amatőr design mikrokontroller

I képviselik működési idő mérésével impulzusszélesség és az átmeneti időszak az impulzussorozatot. Általában ez elég kereslet a témában. Elsősorban alapján a működési idő felmerül végre frekvencia, ami viszont, alakul egy tömege eszközök, mint például :. Fémkeresők, induktivitások mérők, kapacitív, ESR, stb Továbbá vannak most a különböző átalakítók (feszültség / áram / nyomás értékesítési - frekvencia), ahol a biztosított funkciók alkalmazhatók. I impulzus generátorral megvalósított ATtiny2313. Gyorsan lejegyez forrás:


A szabályzó órajele egy 20 MHz-es kvarc (elvileg ez nem fontos). Én használ a „rossz” standard késleltetett könyvtár (utalva a „rossz” szempontjából optimális ezek megvalósítása vagy használata időzítő), de ehhez a példához ez egyáltalán nem kritikus. Közvetlenül méter végrehajtani az ATmega128 kit - Megvan a kezét. Tekintsük a folyamat mérésére az impulzus szélessége.
A felső görbe kék grafikonja értékek megszámlálható TCNT1 regiszter a számla idő (az egyszerűség kedvéért én kijelölt időszakokban OverflowC túlcsordulás). TCNT1 érték növekszik nullától a maximális értéke 65535 (fekete szaggatott vonal), majd egy nullázódik és periodikusan ismétlődő n-szer (lásd. Vertices „háromszögek). Az alsó a hullámforma pulzáló T időtartamú látható érkezik bemeneti rögzítés ICR1 számláló T1 (PD4) a mi újonnan ispechonnogo generátor (bár lehet alkalmazni bármely generátor). Először hozzon létre, hogy elfog megszakítás felfutó élre. Ezen a téren memorizálni számláló értéke TCNT1 = edger. Ezután rekonstruálni elfog megszakítást lefutó él. Erről megjegyezni értéke TCNT1 = EdgeF. Ezek között időbeli pillanat előfordulhat (ha az impulzus időtartama hosszabb, mint az időszak az időzítő 1 túlfolyó) n túlfolyó időzítő 1. Ismerve az időben a túlfolyó időzítő, és a számlálási ciklus időtartama tckl könnyen értékének kiszámításához az impulzusszélesség a következő képlet szerint:
Tpulse = EdgeF (tckl) - edger (tckl) + 65536OverflowC (tckl);
vagy, egyszerűsített expresszió:
Tpulse = tckl (EdgeF - edger + 65536OverflowC);

Az az időszak, az impulzussorozatot a méréseket azonos

Csak szakítsa a rögzítési beállított folyamatosan felfutó élére.

Nyilvánvaló, hogy a minimális impulzusszélesség, amely képes kezelni a végrehajtása ezt a funkciót kevésbé lesz idő, hogy végre egy műveletet a felvezető befogására megszakításokat. Szimulálása AVRStudio mérésére ki 49 ciklus, azaz egy 8 MHz-es - 6.12 mikroszekundum, amit alátámaszt gyakorlatban - minimális impulzus időtartamának, hogy helyesen kiszámításra - 7 mikroszekundum (lásd a fényképet.).

Mérése időrésben amatőr design mikrokontroller

Ha teszünk a mérő a vezérlő frekvenciával 20 MHz (a maximális az AVR mega), a minimális időtartam már feldolgozott 2,45 ms, mert az ütemet - 50 ns * 49 = 2,45 ms. De ez a szám erre végrehajtása - assembler természetesen egy kicsit jobban. Ha azt szeretnénk, hogy az intézkedés a kisebb időközönként, szükség van egy külső menedzser elválasztó. De ez egy másik történet.
A forrás archívum. Egyértelmű, hogy a forráskód meg kell szerkeszteni, attól függően, hogy a feladatokat.

Megint ugyanaz, kóbor egyik helyről a másik hiba. Súly változó OverflowC az 65536!
Tpulse = tckl (| EdgeF - edger | + 65536OverflowC) - szigorú kifejezést
”... a minimális impulzusszélesség, amely képes kezelni a végrehajtása ezt a funkciót kevesebb lesz. (Tovább). Run-time akció a felvezető befogására megszakításokat. „Sajnálom.

Mérő nem működik időszakban. és általában akkor veszik figyelembe, hogy EdgeF