Опрос кнопок микроконтроллером

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
RGB
Родился
Сообщения: 17
Зарегистрирован: Пт ноя 09, 2012 17:22:37
Откуда: Москва
Контактная информация:

Re: Помогите опросить кнопку

Сообщение RGB »

Уважаемый Alexeyslav Я с вами согласени по поводу "Рано тебе программы писать "с наскока". Начни с блок-схем. На них хорошо видны все возможные ситуации и узкие места."
Вот есть у меня умная книжка http://www.labirint.ru/books/300259/ как вы считаете? она подойдёт я изучения программирования? там как раз и блок-схемы описывают, только она правда для PIC, ну это не важно!

А если нет, подскажите Какую книжку выбрать? и какую чучше скачать прогу (софт) для создания блок-схем (для си или ассемблера)
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Помогите опросить кнопку

Сообщение Goodefine »

RGB писал(а):... и какую чучше скачать прогу (софт) для создания блок-схем (для си или ассемблера)

Карандаш обыкновенный и лист бумаги. Если алгоритм не влезет на лист бумаги, то он как бы и не нужен ))) Впрочем, он и так не особо полезен, мыслить программными модулями куда удобнее.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите опросить кнопку

Сообщение Alexeyslav »

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

Программ для рисования блок-схем не видел ни одной достойной, даже платные... чтобы нарисовать что-то и подключить в нужные места нужно слишком много телодвижений. Карандашом же - в среднем 4 линии на фигуру - от 2 до 5 секунд. И, однако, мысль все-равно порой быстрее...
Программы нужны разве что для того чтобы задокументировать готовые схемы - для этих целей годится даже DRAW из состава OpenOffice, но там все очень сложно с привязкой к определенной сетке - пока выровняешь все фигуры пройдет столько же времени как на их рисование и соединение, изменение может порушить красиво разведенные связи и т.д.

Если кто найдет более удобную программу для рисования блок-схем, сообщите.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Помогите опросить кнопку

Сообщение Аlex »

Ну чтож, коли пошла такая пьянка, подкину и я своих дровишек в костёрчик )
Раз тут собрались одни АВРщики :)), пришлось поставить CV и черкнуть на нём примерчик обработки кнопок. CV взял из-за генератора кода, т.к. не хочется лезть в даташит на совершенно незнакомые мне МК. В общем, за им генерируемый код меня не пинать :)) . Остальное, что касается моей писанины - обсуждаем, критикуем, закидываем помидорами, .... :)))
В архиве проект + файл всеми любимого протеуса:
butt.rar
(68.12 КБ) 853 скачивания
Программа хорошо комментирована, так что, думаю, вопросов не возникнет.
Если кому будет интересно, могу добавить обработку длинного нажатия.
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Помогите опросить кнопку

Сообщение Goodefine »

Еще вариант антидребезга кнопки/датчика:

Код: Выделить всё

//--------Чтение состояния городской линии
void city_line_read(flag_tmp* fl_tmp)
{
static uchar8 key_acc; //переменная для хранения послед. состояний кнопки

key_acc <<=1; // Сдвигаем аккумулятор влево на 1 бит
key_acc |= !(CITY_LINE_PIN); // читаем состояние ножки и добавляем новое значение к аккумулятору

switch(key_acc)
{
 case 0:
 fl_tmp->city_line_state=ZERO;
 break;

 case 0xFF:
 fl_tmp->city_line_state=ONE;
 break;

 default:
 fl_tmp->city_line_state=RANDOM;
 break;

}
}
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Помогите опросить кнопку

Сообщение ibiza11 »

Alexeyslav писал(а):Если кто найдет более удобную программу для рисования блок-схем, сообщите.
есть такая бесплатная программа - yEd, компании yWorks. скачивается из интернета. 40 МБ.
По примеру уважаемого Jack_A картинку закинул под спойлер
СпойлерИзображение
Вложения
primer.png
пример
(39.13 КБ) 1945 скачиваний
Последний раз редактировалось ibiza11 Вс ноя 11, 2012 22:56:39, всего редактировалось 1 раз.
Ставим плюсы: )
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Помогите опросить кнопку

Сообщение Jack_A »

Goodefine писал(а):Карандаш обыкновенный и лист бумаги.


На мой взгляд, не лучшее решение. Имея электронный вариант схемы, ее легче копировать и модифицировать.
Пользуюсь банальным Paint. Открываем 2 экземпляра программы, в одном будет рабочее поле, в другом -- библиотека элементов ( или схема-прототип, из которой будем выдергивать нужные элементы ) . Простым копипастом набрасываем каркас схемы, затем в текстовом режиме добавляем обозначения и названия. В итоге получаем что-то вроде :

СпойлерИзображение
Вложения
Example.JPG
(60.42 КБ) 1773 скачивания
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Помогите опросить кнопку

Сообщение shads »

Alexeyslav писал(а):Если кто найдет более удобную программу для рисования блок-схем, сообщите.

Я пользуюсь платной (не знаю мож есть и ломаные, но я голову не ломал, взял да купил) WizFlow очень доволен.

СпойлерИзображение
Вложения
algoritm.JPG
(97.3 КБ) 1816 скачиваний
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите опросить кнопку

Сообщение Alexeyslav »

Диаграммы умеет рисовать множество программ, тот же DRAW имеет для этого все инструменты... но, пользоваться ими со скоростью мысли невозможно. Только как в качестве чистовика. Рисование в программах отнимает уйму времени и собственно отвлекает от самого алгоритма.

Сколько я не пробовал таких программ, ни в одной не получалось делать сразу ровные вертикальные и горизонтальные стрелки - места стыковки параллелограмма и прямоугольника одинаковых размеров находятся на разных осях. не говоря уже если тебе надо нарисовать один элемент чуть шире остальных и не совсем по центру.

А рисовать схемы в паинте это вообще мазохизм... гораздо удобней для этого одна из программ 98-го года, она работает по принципу паинта с библиотекой "заготовок" но она слава богу ушла в небытие, и её вполне способен заменить Sprint Layout работающий по тому же принципу но с векторными объектами. Но в нём столь же неудобно рисовать блок-схемы... не для того он заточен.

Да что говорить, пачка бумаги с десятком карандашей стоит сейчас дешевле чем эти программы-рисовальщики(Visio Pro например). Выигрывает в скорости, но проигрывает в красивости. Вот во втором случае программы и выручают, когда рисуется окончательный вариант... но обычно он уже не нужен - программа написана а бумажки сожжены выполнив свою роль.
Кстати черкать и переделывать блок-схему в электронном виде не так-то и просто - слишком много времени теряется.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Помогите опросить кнопку

Сообщение ibiza11 »

Alexeyslav, Вы просто не умеете их готовить) вот посмотрите: http://www.youtube.com/watch?v=ujMhxPJnJCw
Ставим плюсы: )
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите опросить кнопку

Сообщение Alexeyslav »

Зачем еще одна программа которая работает абсолютно так же как и DRAW? Оно конечно хорошо, но все элементы имеют разный размер потом их приходится постоянно ровнять. А сразу клепать одинаковые как-то не получается... только копи-паст.
1cr1
Родился
Сообщения: 1
Зарегистрирован: Пн ноя 12, 2012 19:34:55

Re: Помогите опросить кнопку

Сообщение 1cr1 »

Подскажите пожалуйста, если у меня кнопка без фиксации, как мне обработать нажатие кнопки?
if (!PIND.2) //если нажата кнопка {
for (i=0; i<8; i++) {}; //антидребезг
if (!PIND.2) //если все-таки нажата кнопка
{тут что-то происходит};
}// тут получается, что выполняется программа, пока нажата кнопка, если ее отжать, то ничего не будет происходить, а как мне сделать, чтобы код выполнялся, после нажатия-отжатия?

по идее, я нажимаю кнопку, программа генерирует последовательность, зажигаются светодиоды, потом должно происходить считывание с двух других кнопок (одна - 0, другая - 1, кнопки тоже без фиксации), чтобы ввести двоичный код, затем эти последовательности сравниваются и уже в зависимости от результата разные сигналы выходные.
т.к. кнопка без фиксации,
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите опросить кнопку

Сообщение Alexeyslav »

Собственно в чем суть проблемы? Чтение всего 3-х страниц не помогло(последняя не в счет)?

for (i=0; i<8; i++) {}; //антидребезг

Это не антидребезг а пародия на антидребезг... за какое время выполнится эта часть кода? 20-30 тактов процессора от силы, если компилятор не упростит всю конструкцию до одной команды...

Кнопки надо считывать раз в 10-20мс не чаще, тогда на дребезг не нарвёшься...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Помогите опросить кнопку

Сообщение vitalik_1984 »

Goodefine писал(а):Еще вариант антидребезга кнопки/датчика:

Код: Выделить всё


key_acc 
<<=1// Сдвигаем аккумулятор влево на 1 бит
key_acc |= !(CITY_LINE_PIN); // читаем состояние ножки и добавляем новое значение к аккумулятору
 

Странное дело вроде как дефайном CITY_LINE_PIN можно установить любую ножку для пользы дела, но ведь сдвиг осуществляется путем ввода нулей с другой стороны, то есть чтобы получилось состояние 0xFF просто необходимо, чтобы CITY_LINE_PIN было 0x01
в чем тут цинус?
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Помогите опросить кнопку

Сообщение Goodefine »

vitalik_1984 писал(а): то есть чтобы получилось состояние 0xFF просто необходимо, чтобы CITY_LINE_PIN было 0x01
в чем тут цинус?

Цимус в том, что необходимо чтобы CITY_LINE_PIN было равно 0х00 восемь раз ПОДРЯД
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Помогите опросить кнопку

Сообщение vitalik_1984 »

стоп стоп стоп, расшифруйте тогда что у вас спрятано за этим CITY_LINE_PIN.
про восемь раз я все прекрасно понял.
И я еще немножко неправильно выразился, нужно чтобы !(CITY_LINE_PIN) всегда получался 0x01.

Предположим, что там (PORTB&PINB4) если кнопка нажата получится 0b0001 0000 как тогда получится 0xFF, если когда сдвинули и сложили получили 0b00110000
Или я чего то недопонимаю?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите опросить кнопку

Сообщение Alexeyslav »

Видимо, если проделать эту операцию 8 раз и за все эти 8 раз значение бита не менялось то весь байт примет однородное значение - либо $00 либо $FF. Но правда, зачем такой изощренный метод использовать для подавления дребезга - загадка. Вероятно, экономится парочка регистров?
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Помогите опросить кнопку

Сообщение Goodefine »

Под CITY_LINE_PIN спрятано банальное

Код: Выделить всё

#define CITY_LINE_PIN   PINB.4         /*пин опроса состояния городской линии*/

Это для CVAVR. Можно выкрутится и с более стандартной записью

Код: Выделить всё

#define CITY_LINE_PIN   (PINB&(1<<PB4))       /*пин опроса состояния городской линии*/
...
key_acc |= (CITY_LINE_PIN)? (0):(1); // читаем состояние ножки и добавляем новое значение к аккумулятору

Может и проще можно, лень думать )))
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
RGB
Родился
Сообщения: 17
Зарегистрирован: Пт ноя 09, 2012 17:22:37
Откуда: Москва
Контактная информация:

Re: Помогите опросить кнопку

Сообщение RGB »

Аlex
Ну чтож, коли пошла такая пьянка, подкину и я своих дровишек в костёрчик )

Просто огромное вам СПАСИБО!!! в вашем коде с кнопками многое мне пояснило!
Респект вам и Уважуха :)
Zhursat
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Вт янв 31, 2012 21:09:21
Откуда: Украина

Re: Помогите опросить кнопку

Сообщение Zhursat »

Вопрос к Alex: а почему мою тему viewtopic.php?f=20&t=80979 закрыли и при этом направили меня сюда??? Тут и так "полным-полна коробушка", меня только со своими нубскими вопросами не хватало.... Я эту ветку прочитал, но еще больше запутался. Не получается у меня опрашивать эти чертовы кнопки - хоть ты мать божью пой. Компиляется все красиво, а вот протеус говорит "не видать тебе удачи". И хотя я неоднократно слышал, что симуляторы не всегда правду говорят, в данном случае мне кажется, что не врет он... Я конечно могу в железе собрать свою схему, плату вытравить - дело 30 минут, но только ничего я и на плате наверное не увижу. Модер, открой тему мою, я лучше там буду потихоньку вопросы задавать - глядишь кто чего и подскажет. А то в этой теме мне стыдно позориться со своим "мегапроектом".
Ответить

Вернуться в «Периферия»