Евгений Надточий Опубликовано 16 июня, 2017 Поделиться Опубликовано 16 июня, 2017 Как уловить нажатие кнопки на Attiny13A ? Кнопка одним концом подключена к 5, другим к PB4. Но нажатие не фиксируется. Как зафиксировать подачу сигнала на PB4 ? DDRB = 0b01111; PORTB = 0b10000; while (1) { if ((PINB & ( 1 << 4 )) == 1){ // пробовал PINB4 == 1 PORTB = 0b1001; _delay_ms(500); PORTB = 0b1010; _delay_ms(500); PORTB = 0b1100; _delay_ms(500); // order ended... _delay_ms(1000); } else { PORTB = 0b0000; } 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 16 июня, 2017 Поделиться Опубликовано 16 июня, 2017 А что такое 5? 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
Реле, вентиляторы, корпуса, разъемы, а так же любые электронные компоненты в нашем каталоге! Бесплатная доставка + 15% кэшбэк + скидки!Перейти на сайт ТМ Электроникс Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
KomSoft Опубликовано 16 июня, 2017 Поделиться Опубликовано 16 июня, 2017 5 это наверное +5в? А порт резистором 1-10к подтянут к земле? Иначе будет ВСЕГДА считываться 1 или мусор 0 Настоящему коту и в декабре март! Ссылка на комментарий Поделиться на другие сайты Поделиться
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Евгений Надточий Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 (изменено) On 6/16/2017 at 7:23 AM, KomSoft said: 5 это наверное +5в? А порт резистором 1-10к подтянут к земле? Иначе будет ВСЕГДА считываться 1 или мусор да, это 5V. Резистор >6 kOm подтянут к земле. При подаче питания диодики мигают, а по кнопке нет. Spoiler #define F_CPU 1200000UL #include <avr/io.h> #include <util/delay.h> void DoubleLedOrder(){ PORTB = 0b001; _delay_ms(500); PORTB = 0b010; _delay_ms(500); PORTB = 0b100; _delay_ms(500); PORTB = 0b010; _delay_ms(500); PORTB = 0b001; _delay_ms(500); PORTB = 0b000; } int main(void) { DDRB = 0b01111; PORTB = 0b10000; _delay_ms(1000); DoubleLedOrder(); // test while (1) { if ((PINB & ( 1 << 4 )) == 1){ DoubleLedOrder(); } } return 0; } Условие срабатывает при == 0, то есть всегда мигает, а при нажатие нет. Но а как логическую 1 получить ? Изменено 21 июня, 2017 пользователем Евгений Надточий 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке. Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Yurkin2015 Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 (изменено) if (PINB4 == 1) 27 минут назад, Евгений Надточий сказал: Условие не срабатывает а и не должно срабатывать, потому что PINB4 может быть только = 4. А единице - никогда. Изменено 21 июня, 2017 пользователем Yurkin2015 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Литиевые батарейки и аккумуляторы от мирового лидера EVE в КомпэлКомпания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Евгений Надточий Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 Just now, Yurkin2015 said: PINB4 может быть только или =0 или =16. А единице - никогда. (PINB & ( 1 << 4 )) == 1 это условие тоже не работет 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 (изменено) Я поправил свой пост. Видимо константа PINB4 всегда = 4. Типа, надо проверять неравенство нулю: if(PINB & ( 1 << PINB4 ) != 0) Изменено 21 июня, 2017 пользователем Yurkin2015 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Евгений Надточий Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 (изменено) 8 minutes ago, Yurkin2015 said: if(PINB & ( 1 << PINB4 ) != 0) Спасибо, работает. А условие == 1 представляет из себя конкретное значение напряжения / тока ? Изменено 21 июня, 2017 пользователем Евгений Надточий 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
aitras Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 Вероятно, надо было сравнивать с 0b10000, а не с 1. Так как выражение PINB & ( 1 << 4 ) при нажатой кнопке даст как раз число 0b10000, а просто 1 это 0b00001. 0 С уважением, Михаил, EEP Lab Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 4 минуты назад, Евгений Надточий сказал: А условие == 1 представляет из себя конкретное значение напряжения ? 1 - это просто число. Сравнение двух чисел. Когда кнопка не нажата, что PINB = 00000000 в двоичном виде. Когда кнопка нажата, что PINB = 00010000, отличие в четвёртом бите. Поэтому операция PINB & ( 1 << 4 ) проверяет только четвёртый бит, остальные биты игнорирует. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Евгений Надточий Опубликовано 21 июня, 2017 Поделиться Опубликовано 21 июня, 2017 Все понятно, всем спасибо) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 26 ноября, 2017 Поделиться Опубликовано 26 ноября, 2017 Не знаю был такой вариант или нет , но напишу его. Пример очень простой и эффективный в принципе: Скрытый текст Цитата while(1) { if(KEY1==0 && flg&0x01) { // Что то делаем flg&=~0x01; // сбросили флаг } if(KEY1)flg|=0x01; delay_(50); } С телефона плохо пример писать .. но думаю понятно. 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 27 ноября, 2017 Поделиться Опубликовано 27 ноября, 2017 может запишем поровнее? Quote while(1) { if(!KEY10 && flg) flg = !flg; // сбросили флаг if(KEY1) flg = 1; delay_(50); } метод в принципе может и работать, но для очень простых задач. Потому как прерывание программы на 50 мс ради какой то кнопотульки, это очень расточительно. 0 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 27 ноября, 2017 Поделиться Опубликовано 27 ноября, 2017 (изменено) подобное решение может красиво работать только в случае использования ОС. Там логика работы позволяет (и даже рекомендует) использовать задержки. Правда не все так просто, но в целом именно так. вот пример опроса группы кнопок с использованием ОС. Каждая может работать независимо от остальных или вместе с ними, одновременно или раздельно. В общем как угодно и все будет корректно typedef struct { GPIO_PinState New_state; GPIO_PinState Old_state; } Button_state; typedef struct { uint8_t event; // событие кнопки (кнопка нажата) Key_status ctrl; // контроль кнопки (запрет/разрешение считывания состояния) } _key; typedef struct { _key Up; _key Down; } Keyboard_state; Keyboard_state Keyboard; // глобальное обьявление структуры клавиатуры /* Start_Keyboard_Task function */ void Start_Keyboard_Task(void const * argument) { // init Keyboard Button_state Up_key; Button_state Down_key; Keyboard.Down.event = 0; Keyboard.Up.event =0; Keyboard.Down.ctrl = kbENABLE; Keyboard.Up.ctrl =kbENABLE; const uint8_t Debounce_time = 10; // start key scan for(;;) { Up_key.New_state = HAL_GPIO_ReadPin(RSRV_1_GPIO_Port, RSRV_1_Pin); Down_key.New_state = HAL_GPIO_ReadPin(RSRV_2_GPIO_Port, RSRV_2_Pin); if (Up_key.New_state != Up_key.Old_state && Keyboard.Up.ctrl) { if (Up_key.New_state == GPIO_PIN_RESET) Keyboard.Up.event = 1; osDelay(Debounce_time); Up_key.Old_state = Up_key.New_state; } if (Down_key.New_state != Down_key.Old_state && Keyboard.Down.ctrl) { if (Down_key.New_state == GPIO_PIN_RESET) Keyboard.Down.event = 1; osDelay(Debounce_time); Down_key.Old_state = Down_key.New_state; } } } для краткости я оставил только пару кнопок, но их можно делать сколько угодно, добавляя поле в структуру и накопипастив блоков if. Да в лоб, зато предельно понятно. чисто пример и можно переписать посимпатичнее Изменено 27 ноября, 2017 пользователем mail_robot 0 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
artos5 Опубликовано 27 ноября, 2017 Поделиться Опубликовано 27 ноября, 2017 4 часа назад, mail_robot сказал: может запишем поровнее? метод в принципе может и работать, но для очень простых задач. Потому как прерывание программы на 50 мс ради какой то кнопотульки, это очень расточительно. Если программа критична к времени (если нужно обслуживать динамическую индикацию в основном цикле) , то можно сделать так: Скрытый текст while(1) { if((++tmr>DELAY) && !KEY10 && flg) flg = !flg; // сбросили флаг if(KEY1) flg = 1; } PS: с телефона по ровнее не получается а пк лень включать 0 Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 27 ноября, 2017 Автор Поделиться Опубликовано 27 ноября, 2017 8 часов назад, mail_robot сказал: вот пример опроса группы кнопок с использованием ОС. Каждая может работать независимо от остальных или вместе с ними, одновременно или раздельно. В общем как угодно и все будет корректно Можно немного сократить цикл задачи : for(;;) { Up_key.Old_state = Up_key.New_state; Down_key.Old_state = Down_key.New_state; osDelay(Debounce_time); Up_key.New_state = HAL_GPIO_ReadPin(RSRV_1_GPIO_Port, RSRV_1_Pin); Down_key.New_state = HAL_GPIO_ReadPin(RSRV_2_GPIO_Port, RSRV_2_Pin); if (Up_key.New_state != Up_key.Old_state && Keyboard.Up.ctrl) { Keyboard.Up.event = 1; } if (Down_key.New_state != Down_key.Old_state && Keyboard.Down.ctrl) { Keyboard.Down.event = 1; } } 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 27 ноября, 2017 Поделиться Опубликовано 27 ноября, 2017 неа, не пойдет. Новое состояние должно запоминаться только для сработавшей кнопки, а не для всех подряд. Поэтому задержка именно внутри иф-а 0 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 27 ноября, 2017 Автор Поделиться Опубликовано 27 ноября, 2017 1 минуту назад, mail_robot сказал: Новое состояние должно запоминаться только для сработавшей кнопки А оно так и будет. Если состояние кнопки не изменится, оно и не запомнится. Точнее останется прежней. Всё пойдёт... Попробуйте, и всё заработает 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 27 ноября, 2017 Поделиться Опубликовано 27 ноября, 2017 (изменено) еще раз внимательно пробежался. Ну в принципе да, так тоже будет работать. Немножко экономии получится по коду самое главное, что функция легко масштабируется под любое количество кнопок и позволяет гибко ими управлять. Не всегда же надо иметь все кнопки активными, поэтому если ктото установил флаг блокировки, эта кнопка запрещается к опросу и event всегда будет нулевой для нее. Удобно Ось вообще классная штука в плане администрирования ресурсов и диспетчеризации процессов. И по моему совсем не тормозит, а гдето даже экономит ресурсы проца Изменено 27 ноября, 2017 пользователем mail_robot 1 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 27 ноября, 2017 Автор Поделиться Опубликовано 27 ноября, 2017 Я тоже такой способ опроса кнопок применяю, практически один в один. И, также, без ОСи уже "жить" не могу 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 27 ноября, 2017 Поделиться Опубликовано 27 ноября, 2017 ось на каких камнях поднимаете? 0 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 27 ноября, 2017 Автор Поделиться Опубликовано 27 ноября, 2017 Я на PIC-ах специализируюсь. Для "мелких" (16, 18) - OSA. Под PIC32 - FreeRtos. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
mail_robot Опубликовано 27 ноября, 2017 Поделиться Опубликовано 27 ноября, 2017 (изменено) я чисто из спортивного интереса. Но в целом удивлен, что люди даже на довольно слабых камнях осью не брезгуют уже. Я так то с пиками уже завязал и скорее всего навсегда. Смысла нет ни по деньгам ни по ресурсам ни по гибкости применения. STM за 3 копейки убивает эту нишу под корень. А так мне пики нравились больше авров. Какие то они более душевные чтоли. Последний камень F886-ой зашил. До сих пор лежит еще штук 80 тел разных из той жизни (16, 18). Остался ICD3 и кит второй. Кит жалко, а вот ICD-шку думаю куда деть Изменено 27 ноября, 2017 пользователем mail_robot 0 Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух Ссылка на комментарий Поделиться на другие сайты Поделиться
supercelt Опубликовано 22 мая, 2019 Поделиться Опубликовано 22 мая, 2019 Привет! Подскажите пожалуйста. Вообще изначально задача сделать универсальную кнопку, которая с помощью джампера может подавать на вход мк либо высокий потенциал, либо сажать на землю. Сначала я нарисовал эту схему, но чего-то мне кажется что она работать не будет. И тогда получилась вот такая схема. Но без вторых компонентов не обойтись. А хотелось бы универсальности 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
КЭС Опубликовано 22 мая, 2019 Поделиться Опубликовано 22 мая, 2019 (изменено) 1 час назад, supercelt сказал: хотелось бы универсальности Не вижу практического применения, но дело ваше (может, макетная плата для разработок?). Без доп.деталей не получится. Нужно использовать два переключающих джампера: один переключает резистор подтяжки к питанию или общему, второй кнопку к противоположной шине. Но можно обойтись одним переключающим джампером, подключающий вход мк к кнопке или выходу инвертора на транзисторе. П.С. Ну и не могу не сказать про использование логики "исключающее ИЛИ" - тогда можно обойтись обычным (не переключающим) джампером. Изменено 22 мая, 2019 пользователем КЭС 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.