Nastavení timeru-spustit při sestupné hraně a potom zastavit

Zdravím, nedávno jsem se začal zabývat programováním mikroprocesorů a teď jsem narazil na problém. Chtěl bych např. z generátoru přivádět signál do mikroprocesoru a měřit jeho periodu (připadně frekvenci). Jde nějak nastavit timer aby se spustil např. při sestupné hraně a při té samé hraně se potom zastavil a já mohl odečíst periodu? Případně bych chtěl poprosit o vysvětlení, jak ji měříte vy. Používám mikroprocesor Atmega16 …Díky moc

:arrow_right: administrator: přejmenováno z "nastavení timeru"

asi raději uvítáš nějaké tutoriály než studování datasheetu
koukni do mého podpisu…jsou to linky na výborné tutoriály

Tak jo, mrknu na to … díky

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Tohle bude to, co potřebuješ : winavr.scienceprog.com/example-a … n-lcd.html

Tak jsem si to všechno prošel, díky.A teď taková moje úvaha… Šlo by přivést signál z generátoru na vstup vnějšího přerušení INT0 a toto přerušení nastavit tak, že by se spouštělo při sestupné hraně. Timer1 nastavit jako counter a pokud by došlo k přerušení na INT0, tak by se ten counter spustil a pokud by došlo podruhé k přerušení na INT0(uběhla by perioda), tak by se counter zastavil, uložil bych counter do nějaký proměnný a pak bych to přepočítal? Díky

ano. V prvom preruseni skontrolujes, ci timer bezi. Ked nebezi, vynulujes TCNT a spustis ho. Ak bezi, zastavis ho a ulozis hodnotu z TCNT. Pripadne mozes rovno po ulozeni hodnoty z TCNT znovu timer spustit, ale predtym vymaz TCNT. No a nezabudni na mozne pretecenie timera, ktore treba priratat k tej ulozenej hodnote z TCNT.

To co píšeš by šlo, ale potom je lepší dát signál na pin ICP, timer nechat nepřetržitě běžet a použít přerušení Input Capture.

V tomto přerušení použiješ 16-bitové proměnné současný_stav a minulý_stav (pro 16.bitový timer).

  1. hodnotu Capture registru uložíš do současný_stav
  2. od něho odečteš minulý_stav, tím dostaneš periodu
  3. současný_stav zkopíruješ do minulý_stav

Rozsah měření určíš nastavením předděliče timeru (tak aby nepřetekl).

Měl jsem napsat přesněji: tak aby perioda nebyla větší než 65535 (0xffff). Timer může během periody jednou přetéct, na výpočet to nemá vliv.