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
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.