PWM таймери (Лекция) платформа съдържание
PWM таймери (лекция)
Очевидно е, че имаме нужда от външен брояч, който ще се отбелязва, независимо от процесора, а процесорът може по всяко време да се види какво е natikalo. Или да тезгяха даде случай на преливане или незареден - флаг повдигнат или прекъсват генерира. Процесорът ще го и процес види. И това не брояч има дори един - е периферните таймери. В AVR може да бъде няколко парчета с различна дълбочина малко. В ATmega16 три, четири в ATmega128. Освен това, на таймера може да бъде прост брояч, таймерът е един от най-разнообразни (по отношение на алтернативни функции) периферия.
Те знаят как таймери
· Помислете с различна скорост, като се брои времето
· Прочети входящите импулси външно (брояч режим)
· Работа от външен кварц при 32 768 Hz
· Създаване на няколко вида PWM сигнал
· За да се издадат за прекъсване (от половин дузина различни събития) и знамената
Източник на такта
Таймер / брояч (наричан TC), или каза тактови импулси от вътрешния часовник генератор или от входа брояч. Ако конфигуриран ТА ще поеме или отпред (градиент 0-1) или задната (градиент 1-0) ръбове, които идват към входовете. Основното нещо, което входящо честотата на пулса не надвишава часовника на процесора, в противен случай той няма да има време за обработка на импулсите.
Освен това, някои таймери могат да работят в асинхронен режим. Това означава, че превозното средство не се счита за CPU тактови импулси, и импулсите на собствен генератор, действащи от един кварцов. За да направите това, автомобилът е с отделен вход, който може да бъде окачена на кварцов резонатор. Защо е необходимо? Най-малко, за да организира часовник в реално време. ги окачени на кварцов гледат 32 768 Hz и да установят време - за да възникнат вторите 128 залято (ако превозното средство - осем цифри). Така че един преливник е 1/128 секунди. И прекъсне по време на обработката таймер преливник не бъде спрян, той продължава да се брои.
Ако таймерът брои импулси от часовника или вътрешните си, те все още могат да се преминава през делител. Това означава, че преди да влязат в броенето регистрирате импулсната честота ще бъде разделена. Сподели може да бъде 8, 32, 64, 128, 256, 1024. Така че, ако се мотае на кварцов часовник на превозното средство и да минава през делител 128, таймерът ще се брои в размер на един път в секунда. Също така е подходящо да се използва делител, когато току-що получи голям обсег, както и единственият източник на сметката - е CPU часовник генератор и да се разгледат тези мегахерца трудно, но ако пропуснете през делител, а след това всичко е по-лесно. Въпреки това, ако ракета-носител с делител, първата отметка тезгяха в регистъра не е задължително през необходимия брой импулси.
Това зависи от състоянието на честотния делител, и изведнъж тя в момента на включване вече преброени почти до определена стойност? Така че, ще отбележете веднага. Честотния делител работи през цялото време, независимо от това дали таймерът е активиран или не. Ето защо, делител може и трябва да бъде сменена с нова. Вие също трябва да се вземе предвид факта, че делител е един за всички гишетата, така че това отпадане, че е необходимо да се вземат под внимание това, което другата чук-таймер забавяне преди следващия кърлежи.
Например, първият таймер работи на оттеглянето на 1:64, а втората на пин 1 на 1024 делител. Вторият е почти dotikalo в делител на 1024, а сега предстои да бъде таймер кърлеж, но тогава отидох и хвърли на разстояние от делител да започне първия таймера точно на нула. Какво се случва? Вторият разделител след това хвърля на 0 (делител единствен абонирайте имали такъв), и втори таймер да чакаме още 1024 цикъла, за да се получи същия инерция! И ако делител нулиране в цикъла, в полза на първия таймер, повече от веднъж на 1024 цикъла на втория таймер никога tiknet. За да нулирате делител е достатъчно да напишете бита в PSR10 SFIOR регистър. PSR10 малко автоматично се връща до следващия цикъл.
Целият законопроект се натрупва в броенето регистрирате TCNTh където вместо х броя на таймера. Тя може да бъде и двете 8- и 16-битова версия, като в този случай се състои от две регистри и TCNTxH TCNTxL - високи и ниски байта, съответно.
Освен това, има улова. И всичко това от - таймер отброява независимо от процесора, така че ние може да постави първия един байт, той ще започне да се разглежда, а след това на втория, и да започне броене вече като се вземат предвид втория байт. Таймер точното устройство, така че корабоплаването го броим регистри в същото време е необходимо! Но как? А инженерите на Atmel решили проблема просто: Писане за регистрация старши (TCNTxH) е на първо място в ТЕЛК регистър. Този регистър е чисто услуга, а ние не може по никакъв начин.
Това, което в крайна сметка с? Пишете на регистър ТЕЛК високата байт (за нас, така или иначе TCNTxH), и след това да напишете долния байт. В този момент, истинската TCNTxH въведеното преди записаната стойност. Това е два байта, високо и ниско, се записват в същото време! Вие не можете да променяте реда! Тя изглежда така: