AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
11.01.2014, 02:50
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,543
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Единственный вариант - выходить из прерывания как положено.
Строить алгоритм в соответствии с этим, исходя из решаемой задачи и параметров быстродействия.
Скажем, в прерывании (при первом входе) запускать таймер, скажем, на 5 мс и по прерыванию от него определять состояние (нажата или отпущена). Это так, навскидку...
Прерывание должно обрабатываться максимально быстро и устанавливать "семафоры" для ветвления программы.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 11.01.2014 в 02:53.
|
|
|
|
11.01.2014, 02:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Сначала вынуть оттуда адрес возврата(2 байта), а потом положить адрес main.
После уже reti.
|
|
|
Сказали "Спасибо" omercury
|
|
|
11.01.2014, 02:58
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,543
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
omercury, похоже на медвежатничество в грубой форме...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
11.01.2014, 03:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Ога, особенно если прерывание произошло не в main.
Посему в прерываниях только флаги. Накрайняк что-то оч срочное.
|
|
|
Сказали "Спасибо" omercury
|
|
|
11.01.2014, 04:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Сообщение от Fraktal
|
В итоге пришел к этому:
|
Опишите задачу. Что нужно и для чего.
|
|
|
|
11.01.2014, 04:58
|
|
Временная регистрация
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Godzilla82, нужно разработать микропроцессорное устройство (ничего серьезного - курсовой проект) на любом микроконтроллере , я выбрал AVR.
которое будет обрабатывать данные и выводить их на индикатор.
Данные представляют из себя уравнение : 3 * AVG + min ,где AVG - это среднее значение в массиве чисел а min - это минимальный элемент массива.
МК-лер должен иметь кнопки пуска/паузы и сброса. Я уже код преподу показал теперь схему переделываю (схемы в протеусе ни катят ![Плач](images/smilies/icon_cry.gif) ) буржуи тут не в авторитете нуна под наши госты.
Препод нормальный ,за не которые косяки по коду в три шкуры не дерет а просто на них указывает. Вот кстати ниже и сама схема с этим кодом.
|
|
|
|
11.01.2014, 07:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Сообщение от Fraktal
|
Данные представляют из себя уравнение : 3 * AVG + min ,где AVG - это среднее значение в массиве чисел а min - это минимальный элемент массива.
|
То есть, на входе у нас 3 числа, на выходе - одно число.
Числа вводятся кнопками, как я понял. Или просто ПУСК/СТОП?
Вопрос: зачем здесь прерывания?
|
|
|
|
11.01.2014, 07:42
|
|
Временная регистрация
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
не это : три умноженное на AVG + min
а так мыслите логически правильно три числа на входе.
"Числа вводятся кнопками, как я понял. Или просто ПУСК/СТОП?"
числа я заношу в массив программно максимальное значение = 255
и одна кнопка выполняет функцию ПУСК/СТОП.
А разве можно без прерывания?
|
|
|
|
11.01.2014, 09:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,443
Сказал спасибо: 99
Сказали Спасибо 315 раз(а) в 231 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Сообщение от Fraktal
|
А разве можно без прерывания?
|
В вашем случае - нужно.
Я же вам дал рабочий кусок с программным обработчиком дребезга.
PHP код:
|
void main(void) { init(); ... begin: if(PINA.0 == 0) { //действия или установка флагов для кнопки на PINA.2 start(); delay_ms(50); while(PINA.0 == 0); } delay_ms(50); goto begin; }
|
при нажатии на кнопку вызовется функция start().
Сделайте сначала старт/стоп. А потом (по хорошему) - чтобы все три элемента массива вводились кнопками.
Четырёх кнопок достаточно. Можно и тремя обойтись.
|
|
|
|
12.01.2014, 00:16
|
|
Временная регистрация
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как программно отследить появление логического нуля на входе /Reset?
Godzilla82, я пробовал сделать через метку как Вы посоветовали , но что то студия у меня ругается на эти метки и пробовал объявлять как глобальные и как локальные - испробовал разные варианты но что то студии не нравится эти метки. В ассемблере их проще объявить чем в 5-й студии , думал может нужно какой то файл инклудировать чтобы компилятор знал как работать с этими метками все как об стену горох. в делфях и асме с метками работал без проблем тут ни в какую. только понял что в AVR studio5 метка объявляется как :"labs ‹имя метки›". А так Ваше решение оптимально , я как увидел пример подумал как я сразу не догадался.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:25.
|
|