Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

Re: Обработка нажатия кнопки в AVR...

Вс апр 27, 2014 05:38:13

HHIMERA писал(а):delay() к чему относится???
А если МК имеет хардварную обработку кнопок???

Можешь назвать МК с хардварной обработкой кнопок?
Или опять забыл название темы?
А может слово "универсальный" выпало из твоей памяти? :facepalm:
Ранний склероз?
:facepalm:
Стас, чем больше ты пытаешься троллить по обсуждаемому вопросу, тем глупее выглядишь... :(

HHIMERA писал(а):И в догонку...
КРАМ писал(а):Из серии printf ...

А что... printf так тяжек для нежного и ранимого мозга???
А если он хорошо ложится под задачу... почему бы и нет??? Или костность мышления не позволяет???

Косность мышления состоит в том, чтобы при выборе дисплея выяснять поддерживает его библиотека или нет...
Телега все же находится позади лошади...

Re: Обработка нажатия кнопки в AVR...

Вс апр 27, 2014 10:10:57

КРАМ писал(а):Можешь назвать МК с хардварной обработкой кнопок?

Cortex M0 от Nuvoton... хотя к данной теме это и не относится...
слово "универсальный"

"Заставь дурака богу молиться..."(С)
Вот так и ты... со своим "универсальный"... как "с писаной торбой"... :))) :)))
Нечего сказать по теме, так лучше промолчи...
Телега все же находится позади лошади...

Ох и тяжёлая она для тебя!!!

Re: Обработка нажатия кнопки в AVR...

Вс апр 27, 2014 10:52:24

HHIMERA писал(а):
КРАМ писал(а):Можешь назвать МК с хардварной обработкой кнопок?

Cortex M0 от Nuvoton... хотя к данной теме это и не относится...

Если к данной теме не относится, то к чему ты об этом?
Собственно все уже сказано тем, что ТС ни хрена не понял из приведенного ARV примера.
Тогда ЗАЧЕМ? Чтобы еще раз выпендриться?
Или заставить "подумать"?
Над чем?
:facepalm:
Прежде чем учить, нужно самому научиться учить...
HHIMERA писал(а):Нечего сказать по теме, так лучше промолчи...

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

Re: Обработка нажатия кнопки в AVR...

Вс апр 27, 2014 11:43:23

Я вот даже и не знаю, то-ли чистить тему, то-ли совсем её сносить, т.к. чистить придётся полдня... :facepalm:

Re: Обработка нажатия кнопки в AVR...

Вс апр 27, 2014 18:48:31

Господин модератор!
Если надумаете чистить, то просьба и тут сразу почистить viewtopic.php?p=1382330#p1382330
А то местный персонаж и там постарался наславу...

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 09:18:37

Рискнул сделать еще одну попытку, посмотрите пожалуйста. Просьба: если что-то не так то ткните носом где именно. Я всего лишь пытаюсь научиться обрабатывать кнопки, но также хочется все делать правильно вот по этому и обращаюсь к вам.
Код:
#include <mega8.h>
#include <delay.h>
unsigned char a=0;        //переменной "а" присвоить "0"
void main(void)
{
 
PORTB=0x00;               //PORTB-выход(0)
DDRB=0x01;
 
PORTC=0x01;               //PORTC-вход(1)
DDRC=0x00;

while(1)
       {
        if(PINC.0==0)     //если кнопка нажата
        {
         delay_ms(50);    // ждем 50мс
         if(PINC.0==0)    // проверяем еще раз, если нажата
         {           
         a++;             // инкриминируем "а"   
         }
         while(PINC.0==0) // ждем отпускания кнопки
         {       
         }
        if(a==2)          // если "а" равно 2(кнопка нажата 2 раза)
         {
         PORTB.0=1;       // "1" на порт Б
         a=0;             // обнуляем "а"
         }
        }             
       }
}

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 10:27:31

Событие у Вас происходит после отжатия кнопки, по этому и делайте инкремент после ожидания отжатия, сразу с проверкой.
Что то типа такого :
Код:
        if(PINC.0==0)     //если кнопка нажата
        {
         delay_ms(50);    // ждем 50мс
         while(PINC.0==0) continue;    // ждем отпускания кнопки
        if(++a>=2)          // если "а" равно 2(кнопка нажата 2 раза)
         {
         PORTB.0=1;       // "1" на порт Б
         a=0;             // обнуляем "а"
         }
        }

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 12:03:29

Большое спасибо. Исправил.

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 12:12:47

ну почему не слушаете советов?! все равно ведь используете метод опроса - почему тогда не поступите, как рекомендовал я, т.е. выделить работу с опросом в отдельную функцию и использовать ее, где нужно?!

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 12:16:18

Зачем все так сложно? Неужели это все проще анализа состояния кнопки равными интервалами?

хочется все делать правильно
Понятие правильно - субъективное. Правильно все то что работает, а правильней - то что при этом просто и красиво выглядит.


Код:
while(1)
       {
        delay_ms(10); // Это самый простой способ соблюсти условие для нижней строчки
        butt = PINC.0  // Главное здесь именно эта строчка, она должна выполнятся максимум один раз в 10мс, если соблюсти это условие - дребезг будет не страшен.
       
       if(butt <> last)
        {
         if(butt ==0) {момент когда кнопка нажата}
         if(butt ==1) {момент когда кнопка отпущена}
         }
       last = butt
       }

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 12:54:26

ARV писал(а):ну почему не слушаете советов?!

видать, от изобилия советов, человек просто-напростаки запутался и незнает чьим советам следовать :))

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 15:02:12

sanyo.95 писал(а):ну почему не слушаете советов?!

Советы я "слушаю" очень внимательно, перечитываю по 100500 раз, но мне непонятно как это сделать из за моего уровня знаний в данной области, так что извините. Вот подучусь немного еще, начну ПОНИМАТЬ Ваши советы и вот тогда...

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 17:41:48

sanyo.95 писал(а):Советы я "слушаю" очень внимательно, перечитываю по 100500 раз, но мне непонятно как это сделать

Рискну привести вариант с системным таймером в виде диаграммы работы:
Изображение

Re: Обработка нажатия кнопки в AVR...

Пн апр 28, 2014 21:16:41

КРАМ писал(а):Рискну привести вариант с системным таймером в виде диаграммы работы:

Спасибо большое, но все же остановлюсь пока на том что получилось.

Re: Обработка нажатия кнопки в AVR...

Вт апр 29, 2014 11:38:29

КРАМ писал(а):
sanyo.95 писал(а):Советы я "слушаю" очень внимательно, перечитываю по 100500 раз, но мне непонятно как это сделать

Рискну привести вариант с системным таймером в виде диаграммы работы:
Изображение

тоесть....., вы хотите сказать что использование системного таймера при обработке кнопки является не целесообразным ?

Re: Обработка нажатия кнопки в AVR...

Вт апр 29, 2014 13:36:26

FreshMan писал(а):тоесть....., вы хотите сказать что использование системного таймера при обработке кнопки является не целесообразным ?
КРАМ как раз и предлагает сделать на таймере .....
Что кстати и является наиболее универсальным решением...

Re: Обработка нажатия кнопки в AVR...

Вт апр 29, 2014 13:59:57

Что я в самом начале и предлагал... только сам таймер в виду начинающего заменить на бесконечный цикл специально замедленный на 10мс/итерация, это и правда простое решение если контроллеру кроме обработки кнопки больше ничего делать не нужно.

Re: Обработка нажатия кнопки в AVR...

Ср апр 30, 2014 09:19:57

sanyo.95 писал(а):становлюсь пока на том что получилось.
Ну и напрасно, потом начнутся проблемы, связанные с выполнением отдельных кусков кода.
Сейчас у Вас пока нажата кнопка, программа тупо зациклена, не выполняя ничего, а могла бы выполнять что-нибудь полезное. Нужно стараться распараллеливать процессы, тогда не возникнет никаких трудностей.

Re: Обработка нажатия кнопки в AVR...

Ср апр 30, 2014 12:49:23

Вы имеете в виду прерывания от таймера. Т.е. поместить опрос кнопки в обработчик прерываний? Или как?

Re: Обработка нажатия кнопки в AVR...

Чт май 01, 2014 17:34:11

sanyo.95 писал(а):Вы имеете в виду прерывания от таймера. Т.е. поместить опрос кнопки в обработчик прерываний? Или как?

Именно так...
Вот примерчик:
Вложения
sanyo.95_button_lib_example.7z
(17.65 KiB) Скачиваний: 472
Тема закрыта