Jak měřit šiřku pulsu a frekvenci

Jak měřit šířku pulsu a frekvenci použivám Atmegu32 , ICP vstup. Potřeboval bych poradit jak to spočítat

Výpočet je jednoduchý. Frekvence je převrácená hodnota času. Podle nastavení se do ICR zapíše hodnota čítače při náběžné nebo sestupné hraně. Čas mezi dvěma pulzy je frekvence. V případě, že chceš použít pouze ICP vstup i pro měření šířky pulsu, musel bys po každém přerušení zastavit čítač. V registru TCCR obrátit nastavení náběžné/sestupné hrany a spustit čítač. Čas mezi těmito dvěma přerušeními je šířka pulzu

Našel sem něco takového

[code]ISR(TIMER1_CAPT_vect) {

 static uint16_t LastCapture;

   if( !(TCCR1B & (1<<ICES1)) ){
   	PulseWidth = ICR1 - LastCapture;
   }

LastCapture = ICR1;
TCCR1B ^= (1<<ICES1);
}[/code]
Chci měřit šířku servo impulsu výsledek bych potřeboval v ms.
procesor taktují 8 MHz preskaler 8 tak výsledek je v milisekundách ale jak dam 16 MHz tak už to nesouhlasí jak to přepočítat

Nesranduj.
8MHz s preddeli4om 8 nie je milisekunda, ale mikrosekunda.
Ak mas Xtal 2x rychlejsi, vysledok vydel dvoma.

Loogish :slight_smile:

Se budu muset podívat na současné školní osnovy jestli nezrušili matematiku…

no jo jak mam 16 MHz tak to podělím ale jak mam třeba 18,432 MHz a preskaler jiny chci to prostě trochu univerzální

Pulsewidth [us] = (ICR1 - Lastcapture) * prescaler / F_CPU [MHz]

kurna, ze by 18.432/8?

alebo rukolapnejsie, do jednej milisekundy sa Ti zmesti 18432 tickov Xtalu.

dělám to podle toho vzorce a výsledek je pořad nula co dělám špatně

To nevíme, dokud neukážeš kompletní kód schopný kompilace.