Ve stručnosti popis :
- CPU ATmega16 (+ nějaká tlačítka, LCD atd ...)
- program volně inspirovaný app. note AVR182 http://www.atmel.com/dyn/resources/prod_documents/doc2508.pdf
- hlavní smyčka (LCD a tlačítka)
- interrupt od INT0 (vstup Sync) ale nastaven na "sestupnou" hranu (podle mého schématu by mělo být každých 10ms)
- v přerušení od INT0 se testuje doba, kdy je vstup v log 0 (podle AVR182), pokud je "dost dlouho", vezme se sync signál za platný (nahozením bitu SyncOK)
- timer1 jen měří, kdy přišly změny v INT0 (sleduje dobu mezi jednotlivými výskyty SyncOK)
Zdá se, že vše je v pořádku, ale občas žárovka "promrkne". Do programu jsem udělal testovací počítadla, kdy sleduju :
1. zda filtr ve zpracování INT0 zareagoval a tedy by vyplivnul neplatný Sync
2. když už projde Sync jako platný a doba od minulého výskytu Sync je menší než 9500 us (pulz přišel moc brzo - nejspíš byl tedy falešný)
3. když už projde Sync jako platný a doba od minulého výskytu Sync je větší než 10500 us (pulz byl vynechán)
4. celkové počítadlo Sync pulzů prohlášených za správné a platné
Sledováním jsem zjistil, že na cca 200.000 přijatých pulzů Sync jsou 3 odchyceny prvním filtrem ve zpracování INTO a 130 přijde v čase kratším, než 9.5 ms od posledního "platného".
Děláte ještě nějakou softwareovou logiku, která rozpozná platnost synchronizacních pulzů ? Nebo je třeba si pohrát se zapojením (stíněním) obvodu ? Jakou máte zkušenost s takovouto regulací (resp.detekcí)
PS: ono by se to dalo považovat za "vyhovující" přesnost, ale štve mě to z principu ...
díky za Vaše náměty







