![]() |
![]() |
#1 |
Member
Регистрация: 16.11.2013
Сообщений: 32
Вес репутации: 0 ![]() |
![]()
добрый день
- Atmega328P - на 3м порту (PD3/INT1) висит кнопка - порт сконфигурирован на вход, подтяжка установлена - дребезг контактов давится программно попытался заменить ардуиновскую функцию digitalRead() на более низкоуровневую: #define _L( BIT) ( _BV( BIT ) ) #define _R(PORT,BIT) ( PORT >> BIT ) #define PORTD_GET(BIT) ( _R ( ( PIND & _L(BIT) ) , (BIT) ) ) #define D03_GET (PORTD_GET (3)) #define PORT_GET_BTN ( D03_GET ) т.е. в коде digitalRead(3) меняется на PORT_GET_BTN при быстрой проверке работает нормально, читат все ок, но вот при дотошном прогоне кода, программа начинает подглючивать причем при замене макроопределения на след. программа перестает тупить: #define PORT_GET_BTN (digitalRead(3)) ВОПРОСЫ: - привильно ли определен PORT_GET_BTN ? - правомерная ли такая замена? - из за чего может глючить (хотя бы потенциально) ? - где то читал, что для кнопок внутреннего подтягивающего сопротивления не достаточно и надо ставить внешние, кто что думает по этому поводу ? можно ключевые слова, ссылки, в личку итд... ОБНОВЛЕНИЕ глюки выловлены, проблема была в том, что я решил полностью заменить ардуиновские digitalWrite() digitalRead() - на низкоуровневые аналоги а так поступать, как оказалось, не следовало, т.к. голова дана не только что бы ею лопать... :о) сначало восстановил все как было, проверил, действительно из за этого ну и пока отложил это серьезное дело "замену ардуиновских функций на низкоуровневые" пожалуйста, продолжаем высказываться, буду следить за топиком хотелось бы УСЛЫШАТЬ МНЕНИЯ: - где можно и корректно использовать "такую замену" ардуиновским функциям - где нет - какие особенности - подводные камни - итд Последний раз редактировалось sunjob; 09.12.2013 в 20:29. |
![]() |
![]() |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|