разные режимы работы ШИМ в Tiny13

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

сбросил фьюзы на дефолтные и схема заработала как надо!
Еще раз Спасибо zero648!

__________
Вот, кстати, сделал то что мне нужно было благодаря ICR1
Вложения
2_PWM_ICR.zip
(164.89 КБ) 179 скачиваний
не зная броду не лезь к вольтмоду
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Да, нет проблем! :beer:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Программа, которую я написал, работает некорректно! :cry: Хотя, на первый взгляд, написана правильно! :shock:

Программа должна генерить ШИМ с частотой 50Гц.
длина импульсов зависит от кнопки ( на обоих каналах симметрично )
если кнопка выключена то длительность импульса 1400 мкс ( на обоих каналах ), если кнопка нажата, то длительность импульса = 1600 мкс.

Проблема заключается в следующем:
Видимо имеется какое-то рассогласование между аппаратным ШИМ и программой. Такое ощущение, что аппаратная часть не успевает за программой....
Программа не всегда уходит на выполнение прерывания. Иногда отпускаешь кнопку, а он все равно генерит импульсы 1600 мкс. Или наоборот нажмешь кнопку а он продолжает генерить с длительностью 1400 мкс. Как быть незнаю...
Вложения
2-ШИМ-ICR.asm
(5.83 КБ) 260 скачиваний
не зная броду не лезь к вольтмоду
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Изменил режим срабатывания прерывания, и немного в самом обработчике.
Сам не проверял, если че, шуми.
Вложения
2-ШИМ-ICR.asm
(5.51 КБ) 268 скачиваний
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Привет, zero648 ! Спасибо за помощь, ЦЕНЮ ! :beer:

Я еще не проверял, но сразу спрошу:
in Temp, GIFR ; сбрасываем флаги
out GIFR ,Temp
Ты хотел сказать EIFR. :) я заметил эту запись в Твоем первом варианте. А для чего она? На первый взгляд она ничего не делает... :)
EIFR всегда читается как 255 что ли ?
не зная броду не лезь к вольтмоду
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

uwrtey писал(а):А для чего она? На первый взгляд она ничего не делает... :)
Она считывает регистр, и записывает его обратно))).
Теперь серьезно: Для того чтобы сбросить флаг - нужно записать туда лог."1". Когда Вы считываете регистр - получаете единицы в тех местах, где установлены флаги. При записи единиц в те места, где были единицы - получите сброс всех флагов.
Вывод: эта конструкция сбрасывает все возведенные флаги.
Ставим плюсы: )
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

uwrtey писал(а):Ты хотел сказать EIFR. :) я заметил эту запись в Твоем первом варианте. А для чего она? На первый взгляд она ничего не делает... :)
EIFR всегда читается как 255 что ли ?
Ну собственно это, Я, и имел в виду, :))
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Спасибо, zero648! твой вариант работает безупречно! :beer: :)

решил в свой вариант добавить запись

Код: Выделить всё


	in  Temp, EIFR						; сбрасываем флаги *************************************************
	out EIFR ,Temp
но это не помогло!

Видимо проблема в самом алгоритме, только вот я не могу понять где именно...
Вложения
2-ШИМ тини 2313-ICR.asm
(5.93 КБ) 276 скачиваний
не зная броду не лезь к вольтмоду
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

uwrtey писал(а):но это не помогло!

Видимо проблема в самом алгоритме, только вот я не могу понять где именно...
Что не помогло, сбрасывание флагов? срос флагов нужен здесь для исключения ложных срабатываний в начале программы после команды SEI. В самом обработчике тоже есть изменения, обрати внимание, главным образом, на обработчик.

P.S. Обрати внимание вот на это:
ldi r16,(0b01<<ISC00) ; изменение логического уровня на INT0 генерирует запрос на прерывание
out MCUCR,r16

и вот на эту замечательную команду, с помощью которой можно узнать без всяких флагов какой уровень фронта в данный момент на ноге и сразу выполнить нужное условие:
sbis PIND, 2 ; мы вошли в прерывание нарастающему фронту ?
rjmp set_falling_edge ; если нет, то идем на метку "прерывание по падающему фронту"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

В самом обработчике тоже есть изменения, обрати внимание, главным образом, на обработчик.
дак конечно я это видел! :)

я говорю, что твой вариант работает отлично!
а вот почему мой вариант не работает я не могу понять...

я уже строил программу подобным образом и она работала без проблем.. а эта не работает - вот я и удивляюсь...
не зная броду не лезь к вольтмоду
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

Проверил твою версию проги в протеусе, все работает как надо, возможно в железе влияет дребезг кнопок, поставь на кнопку конденсатор параллельно подтягивающему резюку.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

zero648, Ты Человечище! :beer:
Воткнул конденсатор 0,22 мкф и глюки прекратились!

П.С.
Твой вариант мне понравился больше - он проще и компактнее. И самое что главное - ему пофиг на дребезг! :))

Еще раз Спасибо, zero648!
не зная броду не лезь к вольтмоду
Ответить

Вернуться в «AVR»