Stránka 1 z 1
PIC - měření frekvence
Napsal: 01 zář 2006, 20:28
od Datel_new
Ahoj,chtěl bych se zeptat ,jak lze měřit čas mezi náběžnou hranou prvního impulsu a náběžnou hranou druhého impulsu na jednom vstupu (např PORTA bit0)?
Měl by někdo nějakej příklad,nebo odkaz ?
Díky za každou radu k tématu.
Napsal: 02 zář 2006, 12:28
od eljaro
Napsal: 02 zář 2006, 12:58
od Datel_new
Dík.Nějak mi to hlava nebere.Šlo by to nějak vysvětlit ?
Napsal: 03 zář 2006, 10:45
od eljaro
přeci na tom nic není nejaký registr pužiješ jako výsledek a jeho obsah inkrementuješ - start inkrementace provebeš jedním vstupem a konec druhým - periodou inkrementace pak zvolíš rozsah mněření - totéž popisují i na tom odkazu - trocha fantazie a jeto - téměř školský příklad ! je to v každé učebnici programování procesorů !
Napsal: 04 zář 2006, 10:04
od Datel_new
Díky za radu.Inkrementace je mi jasná,ale není mi jasný jak programově odchytím všechny vstupní impulsy na daném pinu.
Mohl by mi to prosím někdo polopaticky vysvětlit ? Děkuji.
>je to v každé učebnici programování procesorů !<
To mě prřekvapuje,knížky o programování procesorů mám dvě.Polovina knížky je popis instrukcí.Polovina s té druhé poloviny je popis programu MPLab a v zbylé části je jeden příklad s tlačítky a 7seg. displejem.
Existuje nějaká "dobrá" knížka ,nebo nějaký web o programování v asm ?
Napsal: 04 zář 2006, 13:55
od ViPali
Napsal: 06 zář 2006, 16:14
od ZdenekHQ
Nevím ,jak u PIC, ale u ATMEL to řeším tak, že to pošlu na vývod, kde je přerušení, spustím vnitřní čítač/časovač, a kdykoliv se zavolá přerušení, hodnotu uložím a čítač vynuluju. Lepší je ale provést např. 16 měření a výsledek vydělit 16 (přes rotaci akumulátoru nebo přes div). Jedinej rozdíl je v tom, že to reaguje na sestupnou hranu. Pro pravoúhlý pulsy to chodí dobře, jak máš sinus atd., tak použít tvarovač.
Napsal: 06 zář 2006, 21:22
od ViPali
Máš viac možností:
1//
clrf POCITADLO
btfss 6,0 ; testuješ pb0 či je 1
goto $-1 ; ak nie opakovať
btfss 6,0 ; už bol 1, tak skočí
goto $+3 ;skončila jednotka tak poskočí ďalej
incf POCITADLO ; inkrementuje pocitadlo
goto $-3 ; spať testovať
btfsc 6,0 ; je stále nula tak kočí
goto $+3 ; skončila nula končím počítať
incf POCITADLO ; inkrementujem pocitadlo
goto $-3 ; spať testovať
movf POCITADLO ; bola nastupna hrana, tak pocitadlo do W
goto ZOBRAZIT
2//
testuješ 0 na PB0
ak príde 1 tak,
povolíš prerušenie od PB0 spádovou hranou
začneš pripočítavať do registra
po prerušení od PB0 otočíš prerušenie na nástupnú hranu OPTION 6
a ďalej pripočítavaš
Po prerušení zobrazíš.
3//
estuješ 0 na PB0
ak príde 1 tak,
povolíš prerušenie od PB0 spádovou hranou
spustíš TMR0 z oscilátora
po prerušení od PB0 otočíš prerušenie na nástupnú hranu OPTION 6
po prerušení zastavíš TMR0
a zobrazíš.
Napsal: 06 zář 2006, 21:39
od Datel_new
Díky moc za vysvětlení a informace.
Zkusím se s tím nějak poprat,kdyžtak se zkusím ozvat znovu.