šířku impulzu lze měřit za pomocí Timeru.Při náběžný hraně se spustí Timer , při sestupný se Timer zastaví a přečte hodnota.Je potřeba správně Timer inicializovat.
Založen: Sep 19, 2007 Příspěvky: 3698 Bydliště: Praha
Zaslal: po září 14 2015, 21:52 Předmět:
Jednoduché, ale ne moc dokonalé. Pokud bude ten puls velmi dlouhý, třeba až nekonečný, bude platit podmínka t>1.7 ms, ale oba dva výstupy nebudou aktivní. Pulsein neskončí a nic se nevyhodnotí.
Založen: Sep 19, 2007 Příspěvky: 3698 Bydliště: Praha
Zaslal: po září 14 2015, 23:00 Předmět:
denny_ul napsal(a):
mtajovsky napsal(a):
... Pokud bude ten puls velmi dlouhý ... Pulsein neskončí a nic se nevyhodnotí.
Co je to "velmi dlouhý"?
V zadání úlohy není nic o omezení délky pulsu. Dokud puls neskončí, nic se nebude dít, takže puls > 1,7 ms je taky puls - 1 minuta, třeba. Jenže po té 1,7 ms se nic nenastaví, bude se čekat celou minutu. Toť k algoritmu. V případě Pulsein je maximální vrácená hodnota 65535 x 10 µs defaultně, timeout i časová jednotka se dají nastavit, nicméně zadání není splněno.
Do
Bitwait Pinb.0 , Set 'čekej na úroveň "1"
Time1 = Tcnt1 'zapiš stav čítače
Bitwait Pinb.0 , Reset 'čekej na úroveň "0"
Time2 = Tcnt1 'zapiš stav čítače
Založen: Sep 19, 2007 Příspěvky: 3698 Bydliště: Praha
Zaslal: út září 15 2015, 11:04 Předmět:
Action
Returns the number of units between two occurrences of an edge of a pulse.
PULSEIN var , PINX , PIN , STATE
STATE: May be 0 or 1.
0 means sample 0 to 1 transition.
1 means sample 1 to 0 transition.
kód:
Pulsein W , Pinb , 0 , 1
bude měřit dobu mezi dvěma přechody z log. 1 do log 0. To bude podle obrázku zadání 10-22 ms, což při defaultní granularitě 10 µs dává číslo 1000 - 2200 do proměnné W.
Je ale třeba měřit dobu mezi přechody 0->1 a 1->0, což PULSEIN podle popisu nedělá. Zkus kód s měřením způsobem jak to naznačil AB1. Ten bych ještě doplnil před smyčkou úvodním čekáním na úroveň 0 pro případ, že by se program spustil v okamžiku, kdy je signál v úrovni 1.
Založen: Sep 28, 2005 Příspěvky: 1291 Bydliště: ZČ + JM
Zaslal: út září 15 2015, 12:44 Předmět:
citace:
of an edge
Měří to délku log.0 nebo 1
When state 0 is used, the routine will wait until the level on the specified input pin is 0. Then a counter is started and stopped until the input level gets 1.
Jak máš fuse bity? Běží ta tiny na 9,6MHz?
Jak máš udělaný vstup? Přímo signál z přijímače nebo tranzistor na vstupu tiny + vnitřní pullup? _________________ Kampaň, účelovka, nepodepsal, Palermo, ODS, Kalousek, je líp a jsou na to čísla, nastudujte si to.
Založen: Sep 28, 2005 Příspěvky: 1291 Bydliště: ZČ + JM
Zaslal: út září 15 2015, 16:03 Předmět:
To goto není hezké. Je sice funkční, ale fakt není hezké
Hlavní smyčka je Do ... Loop
Podmínky jdou napsat trochu čitelněji (třeba Select Case)
Pro konstanty není třeba zabírat místo v paměti deklarováním proměnných, stačí jako konstanty (Const)
Proměnná puls by měla být pro jistotu naopak deklarována jako word (má 16-bit, viz help: A 16 bit counter is used. A time out will occur after 65535 unit counts. With 10 uS units this will be after 655.35 mS).
Podle $crystal = 1000000 to vypadá, že používáš externí xtal. Pokud používáč vnitřní RC, nastav 4,8MHz nebo 9,6MHz (viz fusebity)
Pro přehlednost je dobré používat pro vstupy a výstupy aliasy (lidské názvy místo portů/pinů)
Dim Puls As Word
Const Dolni = 130
Const Horni = 160
Do
Pulsein Puls , Pinb , 0 , 0
Select Case Puls
Case is < Dolni:
Vystup1 = 0
Vystup2 = 0
Case Dolni to Horni:
Vystup1 = 1
Vystup2 = 0
Case is > Horni:
Vystup1 = 1
Vystup2 = 1
End Select
Loop
End
A nejsem si jistý, jestli tou poslední nulou v "Pulsein Puls , Pinb , 0 , 0" nedetekuješ log.0 (nemůžu vyzkoušet). Ono to teď fungovat může, ale s jiným přijímačem s jinou frekvencí opakování pulsů to pak nemusí fungovat správně i když vlastní pulsy budou 1-2ms... _________________ Kampaň, účelovka, nepodepsal, Palermo, ODS, Kalousek, je líp a jsou na to čísla, nastudujte si to.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.