К схеме претензий нет, вполне рабочая, я имел ввиду что предыдущий пример не подходит под нее ) Резисторы в данном случае не есть необходимость, т.к. включены подтяжки в МК. Если последний пример заработал, и по нажатию на любую из кнопок светодиод загорается, можно идти дальше. Теперь попробуйте переключать эффекты:
Код:
char ef = 0; while(1) { if ( !(PIND & (1 << PIND4)) ) { ef = !ef; }
Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср янв 18, 2012 09:47:32
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
BerZerK-ku писал(а):
Зачем? И так все работает
PORTB.1 тоже работает кое где, но это не означает, что такая запись правильная. WinAVR, например, следуя стандарту, все числовые константы ПО УМОЛЧАНИЮ считает типа int, а значит запись 16000000 фактически превратится в 9216. поэтому указание суффикса UL обязательно. и уж во всяком случае одинаково сработает ВО ВСЕХ КОМПИЛЯТОРАХ без исключения.
BerZerK-ku, вы же великий знаток Си - неужели не знаете этих элементарных вещей?!
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
При чем тут WinAVR? В WinAVR вообще нет подобной встроенной функции, да и ВО ВСЕХ КОМПИЛЯТОРАХ вряд-ли найдется. Так какой смысл думать о переносимости, а особенно в такой программе? В отличие от ваших возвеличиваний, я не употреблял в свою сторону "великий" и вроде никогда не говорил как надо делать, а всего-лишь как можно делать. Ну не люблю я правила, а особенно неписанные
Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср янв 18, 2012 10:38:38
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
BerZerK-ku писал(а):
При чем тут WinAVR? В WinAVR вообще нет подобной встроенной функции, да и ВО ВСЕХ КОМПИЛЯТОРАХ вряд-ли найдется. Так какой смысл думать о переносимости? В отличие от ваших возвеличиваний, я не употреблял в свою сторону "великий" и вроде никогда не говорил как надо делать, а всего-лишь как можно делать
если у вас температура - пейте аспирин: о какой функции идет речь?! константу без суффикса вы указали при помощи обычного дефайна! при чем тут функция?! я про функцию даже слова не сказал. дефайн сделан с ошибкой. ну или, если вам так приятнее, то с упором на специфические особенности какого-то конкретного компилятора. а программа на Си, как известно, должна быть переносимой по определению, не так ли?
можно сделать и нужно делать - это разные вещи. если говорите можно - уточняйте конкретные условия и ограничения применимости ваших советов, ибо иначе они пахнут большими проблемами у тех, кто вам поверит сгоряча.
кстати, в WinAVR есть функции _delay_cycles() и подобные
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
Последний раз редактировалось Мастер Ломастер Ср янв 18, 2012 10:51:13, всего редактировалось 1 раз.
Объясняю на пальцах: данная программа уже не переносима, ввиду использования внутренней функции IAR __delay_cycles(). Если мыслить по вашему, данная программа уже является ошибкой природы, т.к. не заработает в используемом вами WinAVR. А для тех кто в танке, если вы проследите все вышесказанное, то разговор шел именно о использовании IAR. И код был приведен именно для этой среды.
В двух стандартных библиотеках delay.h и delay_basic.h подобного нет. Да и ни в одной из стандартных такого нет. Где же она распологается?
Последний раз редактировалось BerZerK-ku Ср янв 18, 2012 11:00:17, всего редактировалось 1 раз.
Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср янв 18, 2012 10:56:15
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
BerZerK-ku писал(а):
А для тех кто в танке, если вы проследите все вышесказанное, то разговор шел именно о использовании IAR. И код был приведен именно для этой среды.
похоже, в танке именно вы... пора вылазить: правила описания констант в дефайнах - НЕ ЗАВИСЯТ ОТ КОМПИЛЯТОРА. правильные правила из стандарта, а не их вариации КОНКРЕТНОЙ РЕАЛИЗАЦИИ компилятора. если в танке можно смело ехать на красный свет, плюя на правила, это не означает, что проезд на красный свет - это правильно.
давайте советы правильные, и я вам ни слова не скажу.
P.S. я подправил свой пост - по поводу _delay_cycles(), перепрочтите и удивитесь
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
Скорее всего происходит следующее: При нажатии на кнопку, цикл с eff= 0, eff = 1 проскакивает практически мгновенно, включается eff = 2. Идет мигание. Вы нажимаете на кнопку и см. сначала. Шанс остановки не на eff= 2 есть, но очень мал. Необходимо увеличить период опроса кнопки, например добавить задержки в eff 0 и 1. Посмотрите пример выше, я там для исключения подобного поставил задержку 1с в конце цикла. На практике обычно реализую опрос кнопок на таймере: после первого определения кнопки, следующее нажатие фиксирую где-то через 2 секунды и если кнопка до сих пор нажата, перехожу в ускоренный режим с фиксацией раз в 0.5с.
Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср янв 18, 2012 11:28:03
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
AR_AROV писал(а):
почему вот такой код не работает?
как минимум потому, что вы не читали, как надо опрашивать кнопку - а я для вас подробно все описывал. категорически недопустимо работать с кнопкаи, опрашивая 1 раз пин порта! сколько раз еще надо повторить?!
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
как минимум потому, что вы не читали, как надо опрашивать кнопку - а я для вас подробно все описывал. категорически недопустимо работать с кнопкаи, опрашивая 1 раз пин порта! сколько раз еще надо повторить?!
а сколько раз надо опрашивать? я делал так как вы писали, но у меня не получилось
Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Ср янв 18, 2012 11:33:11
Поставщик валерьянки для Кота
Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45 Сообщений: 1995 Откуда: Цветочный город
Рейтинг сообщения:0
я не увидел ни строчки кода, где бы вы делали и у вас не получилось. к тому же вам только что еще раз намекнул местный гуру, что цикл пролетает ОЧЕНЬ БЫСТРО и, может быть, у вас все и работает, но вы этого не успеваете замечать. поэтому перед тем, как делать очередной опрос кода кнопки надо дождаться, когда ее отпустят - ну, по ситуации, конечно.
_________________ битва с дураками проиграна, победители торжествуют. слава победителям!
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения