Покритикуйте, пожалуйста, кот. Задача: по кнопке (sbic PinD,4) ксорится порт Б и переключаются светодиоды, но при этом система должна возвращаться из переключенного положения обратно через n секунд, если оставлена в переключенном положении
По задумке программа крутится в цикле, ждет кнопку По кнопке сбрасывается таймер, переключаем По прерыванию таймера отсчитывается нужное кол-во секунд, далее проверяется нужный бит порта Б, и если он не в том положении (1), то порт ксорится аналогично нажатию кнопки и таким образом переключается обратно. Если нужное кол-во секунд не достигнуто или бит сброшен, выходим из прерывания без действия.
Так-то все работает. Переключается обратно как надо. Баг в том, что при работе светодиод едва уловимо подмигивает без нажатия кнопки. По частоте вроде как совпадает со срабатыванием прерывания. Но ведь там стоят досрочные переходы по условию?
есть в даташите "17.6.3 Using the Input Capture Unit" - написано в общих чертах, но нет никаких точных указаний в каких регистрах какие биты надо выбрать.
Последний раз редактировалось Gudd-Head Пн фев 10, 2014 10:54:03, всего редактировалось 1 раз.
И возникает вопрос - какой смысл привязывать выход компаратора к таймеру. Какие это дает преимущества.
Ведь изменение выхода компаратора может вызывать собственные прерывания и соответственно там писать программку которая возьмет число из регистра таймера на тот момент.
Заголовок сообщения: Re: Atmega8 как привязать таймер 1 к выходу компаратора?
Добавлено: Пн фев 10, 2014 15:25:53
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19733 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
amd9800 писал(а):
Какие это дает преимущества.
Насколько я понял, в ICRn будет именно то число, которое было в момент возникновения прерывания от компаратора. А то пока программа скакнёт на вектор обработки (4 такта), пока на саму обработку (2 такта), пока считает значение таймера...
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Atmega8 как привязать таймер 1 к выходу компаратора?
Добавлено: Пн фев 10, 2014 15:41:06
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19733 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
amd9800 писал(а):
И не могу понять логику - почему так происходит?
Встроенный компаратор — гумно. У вас опора внешняя или встроенная? Попробуйте подать внешнюю.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Доброго всем времени суток. Подскажите по таймеру1. Мучаюсь с обработкой значения регистра TCNT1 счётчика 1. Он считает внешние приходящие имульсы. Количество подсчитанных ипульсов требуется вывести на экран LCD/ Регистр вмещает в себя 2^16, но после досчитывания до 32768, начинает считать в обратную сторону и появляется знак "-". Но мне необходимо чтобы на экранчик выводилось число 65130 и т.д. до переполнения регистра. Но на экранчике появляется знак "-". Пробовал задвать переменную в которую счёт производится как unsigned, но это не дало резульата. Также пробовал задать условие, Что если появляется знак "-" то надо из 2^16 вычесть текущее значение счётчика (которое со знаком "-"). Но результать всё тот же, LCD отображет сначала положительное число до 2^15, затем появляется знка "-" и отображаемое число подсчитанных имульсов уменьшается до 0. Код прошивки: СпойлерChip type : ATmega8 Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *******************************************************/
Товарищи коты, прошу помощи по ШИМу в attiny13а. Хочу сделать fastPWM. Вроде бы все настроил, но нога от таймера дергаться не желает. Хотя если дергаю ее процессором - поддается. Т.е. КЗ нигде нету и нога живая. Подскажите пожалуйста, чего не хватает?
Код:
DDRB = CE_3V | CE_5V | PWM_5V; // pwm_5v - нога на ШИМ. настроена как выход ........... while(1) { //toggle_pin(2);
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19733 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Не знаток СИ, но... разве код в
Код:
while(1) { ... }
не выполняется бесконечно сверху вниз?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения