forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Atmega16 časovače(nepoužití delay+větši projekt)

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR
 
Nymik
Nováček
Nováček


Založen: 11.10.2016
Příspěvky: 6

PříspěvekZaslal: 06 listopad 2016, 23:47    Předmět: Atmega16 časovače(nepoužití delay+větši projekt) Citovat

Dobrý den,

vytvářím program v C pro atmega16 k ní je připojeno 2x servo a 1x ultrazvukový senzor. Používám všechny tři časovače následovně TIMER0 = servo1. TIMER1 = ultrazvukový senzor a TIMER2 = servo2. Pro ultravukovovz senzor je hodnota TCNT1 nulována pro změření vzdálenosti, pro serva jsou časovače 0 a 2 v režimu fast PWM a tudíž nuluju hodnotu pomocí bitu OCRx. Potřeboval bych navíc měřit čas, tak abych například některé servo mohl zastavit na určitý čas na jednom místě a poté znovu pootočit a počkat zase určitou dobu(tato doba bude vždy stejná). Vzhledem k tomu, že si nuluju všechny časovače v určitých místech, tak uplně nevím jak bych měl tuto dobu změřit. Navíc k tomu všemu, nemůžu použít delay, protože bych si tak zastavil měření vydálenosti, která by měla běžět prakticky pararelně se servama. Napadlo mě, že bych třeba mohl časovače pro serva hodit do normálního režimu, počkat až dosáhne určité hodnoty a poté znovu spusti PWM režim abych otočil servomotorem. Předem děkuji za jakýkoliv nápad a omlouvám se za trošku zmatečný a dlouhý popis problému.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Balů
Profesionál
Profesionál


Založen: 29.10.2012
Příspěvky: 708

PříspěvekZaslal: 07 listopad 2016, 11:44    Předmět: Citovat

Čítač ve Fast PWM režimu čítá až do svého maxima - tedy pokaždé stejně = TOV přerušení nastává při přechodu 0xFF->0x00 a lze ho tedy k měření času použít. Pomocí OCRx se nenuluje hodnota čítače, ale ovládá se tím PWM výstup. Čítač by se pomocí OCRx nuloval pouze v případě CTC (Clear Timer on Compare match) režimu. V případě CTC režimu k TOV přerušení nikdy nedojde.

Jinak i Timer 1 by šel použít - a to tak, že bys startovací impulz pro ultrazvukový senzor posílal při přerušení TOV1 a dobu bys pak odchytával pomocí ICP, ale proč to předělávat, pokud Ti to šlape a na měření času můžeš použít ostatní čítače.

Dalším řešením by pak bylo použít pro ultrazvukový senzor timer 0 nebo 2 a pro obě PWM pak použít timer 1, který má 2 PWM výstupy. Zbyl by Ti jeden 8-bitový čítač. Ale v tuto chvíli je to stejné jako v předchozím případě - proč předělávat funkční program.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Nymik
Nováček
Nováček


Založen: 11.10.2016
Příspěvky: 6

PříspěvekZaslal: 07 listopad 2016, 15:04    Předmět: Citovat

Mockrát děkuji za odpověď, to je přesně to co mi nedocházelo, snažil jsme se to vyčíst v datasheetu, ale pořád mi z těch grafů vycházelo, že se nuluje i hondnota TCNTx. Děkuji.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můž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.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)