Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.02.2015, 05:12  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от NewWriter Посмотреть сообщение
ну ниче се, сколько дней уже ведутся дискуссии то...
Что поделаешь, компилятору опять не понравился код - утверждает, что...
PHP код:
WarningC:\..\AVR_progs\tiny13\untitled.c(99): expression with possibly no effect 
Насколько я понял, он хочет сказать мне: "не понимаю зачем ты это написал"?
Получается, функция, которая ему не понравилась BACKLIGHT_on_off(); ничего не делает? Но почему? Ведь там же есть строка
PHP код:
led_on 1
которая должна включать светодиод!
В чем же ошибка, подскажите пожалуйста, кто в этом разбирается!
Файл с прогой добавляю!
Вложения:
Тип файла: txt LED_ON_OFF.txt (4.3 Кб, 28 просмотров)
Реклама:
prosto_andriy вне форума  
Непрочитано 27.02.2015, 06:53  
NewWriter
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
но там внутри есть куча "граблей", я имею в виду сам алгоритм. Если начнете по нему писать сами увидите.
Я уже писал нечто подобное для одной поделки, но для PIC12, "граблей" особо не встречал, честно. Я бы без проблем мог привести код, но для автора он будет бесполезен, потому что для PIC написан. А ATTiny изучать как-то не хочется, есть более интересные МК.

Автору - какой у тебя программатор? Может PIC-и прошивать? Если да, могу дать под них готовый
NewWriter вне форума  
Непрочитано 27.02.2015, 10:34  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Получается, функция, которая ему не понравилась BACKLIGHT_on_off(); ничего не делает? Но почему? Ведь там же есть строка
PHP код:
led_on = 1;
Всем доброго времени суток.
Данная сторка действительно бесполезна, по-моему об этом Вам в своих комментариях писал Proshha. Еще раз объясню. В режиме, когда светодиод управляется таймером в режиме ШИМ, PORTB.0 включается и выключается с частотой ШИМ таймером, и поэтому то, что вы пытались его включить вручную - он тут-же начнет дергать ногой от таймера.
Если нужно выключить ШИМ - запиши, на СИ, TCCR0A&=~(3‹‹6); Этим Вы сбросите биты СOM0A0 и COM0A1, что отключит таймер от вывода. А чтоб включить - надо записать TCCR0A|=3‹‹6; этим Вы опять выставите эти биты на место, при этом вы не зацепите биты WGM00 и WGM01, которые отвечают за режим работы.

PS. Перед усыплением нужно обязательно вписать строку, после того, как отключите таймер, для Вашего случая, led_on=0. Потому-что, если МК заснет, а на ноге в этот момент будет высокий уровень - он так и останется в спящем режиме и светодиод будет гореть на полную мощность.

Последний раз редактировалось МВА; 27.02.2015 в 10:43.
МВА вне форума  
Сказали "Спасибо" МВА
prosto_andriy (02.03.2015)
Непрочитано 27.02.2015, 11:03  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от NewWriter Посмотреть сообщение
Я уже писал нечто подобное для одной поделки, но для PIC12, "граблей" особо не встречал, честно. Я бы без проблем мог привести код, но для автора он будет бесполезен, потому что для PIC написан. А ATTiny изучать как-то не хочется, есть более интересные МК.

Автору - какой у тебя программатор? Может PIC-и прошивать? Если да, могу дать под них готовый
C PIC я не работал, программатор у меня самый дешевый AVR USBASP. Код для PIC мне не интересен, так ка не я занимаюсь этой проблемой. Кстати, последний проект, который я выкладывал, правда он на ASMe, на моей демоплате работает без замечаний. Для Prosto Andriy нужно, просто изменить делитель таймера на 1024 и подобрать дополнительные константы делителей, которые отвечают за длительность нажатия и паузы. Или еще, как вариант, выпаять кварц и конденсаторы, и выставить фьюзы по умолчанию. Да..., еще в функции сна не устанавливать бит в PORTB.0, а сбрасывать.
Кстати, система команд и синтаксис - это не только для Tiny, она подходит для всего семейства AVR.
МВА вне форума  
Непрочитано 27.02.2015, 11:38  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
При одинаковых частотах тактирования таймера режим Phase corrected PWM имеет длительность ШИМа в два раза больше чем Fast PWM. У меня второй режим и светодиод горит ровно.
В режимах не-FastPWM регистр OCR обновляется в момент TOP или BOTTOM, а в режме FastPWM - немедленно, что приводит к появлению одного импульса или паузы непредсказуемой длины. Поэтому и моргает. Удивительно, но заметно моргает галогеновая лампа 20W при частоте ШИМа несколько килогерц.

Сообщение от МВА Посмотреть сообщение
там внутри есть куча "граблей", я имею в виду сам алгоритм. Если начнете по нему писать сами увидите.
Каких граблей? Стандартно обрабатываем кнопку интегрированием, а не задержкой (перед этим смотрим осциллографом на дребезг кнопок, впечатляемся), стандартно считаем время (расширяем аппаратные счётчикм программными)

Писать я не начну. Не могу - уже не только начато, но и надоело давно
makakus вне форума  
Непрочитано 27.02.2015, 12:13  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от makakus Посмотреть сообщение
Каких граблей? Стандартно обрабатываем кнопку интегрированием, а не задержкой (перед этим смотрим осциллографом на дребезг кнопок, впечатляемся), стандартно считаем время (расширяем аппаратные счётчикм программными)
Я не имел ввиду обработку самой кнопки, а сам алгоритм формирования команды, а если вы заглядывали в последний проект, который я выкладывал, то может показаться, что борьба с дребезгом, методом задержки, только в прерывании INT0.
Я сделал это так, как примерно сделано в контроллерах от Siemens. Создал образ входов вначале цикла, и переписал его в конце. Так удобней выделять фронт. Даже если будет дребезг - это означает, что меняется состояние, и если не споймает нажатие в этом цикле, то в следующих, когда все установится, программа обязательно его найдет, и зафиксирует в образе, и потом, этот образ обработается, и не надо после каждого нажатия вводить задержку или обрабатывать нажатие интегрированием.
МВА вне форума  
Непрочитано 27.02.2015, 13:45  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от МВА Посмотреть сообщение
если не споймает нажатие в этом цикле, то в следующих, когда все установится, программа обязательно его найдет, и зафиксирует в образе, и потом, этот образ обработается, и не надо после каждого нажатия вводить задержку
Что такое "нажатие"? Какова длина цикла?

Проблема не в том, что программа пропустит нажатие. Проблема в том, что программа отработает несколько нажатий-отпусканий за одно физическое нажатие кнопки пальцем. Дребезг. Обработка дребезга задержкой не даёт результата - я видел пачку дребезга длиной в 150 мс! У тактовой не новой кнопки. Бывают ещё энкодеры с контактами, тоже подарок тот ещё, особенно со временем. Интегрирование такое издевательство терпит - плохая кнопка сработает позднее, но сработает однозначно.
В справочниках по эргономике написано, что реакция на нажатие кнопки должна быть в течение 80 мс, если дольше - напрягает "тупость" кнопок, если время реакции "плавает", то пользователь склонен избегать таких кнопок.
makakus вне форума  
Непрочитано 27.02.2015, 13:58  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,969
Сказал спасибо: 2,554
Сказали Спасибо 11,850 раз(а) в 5,938 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от makakus Посмотреть сообщение
Интегрирование такое издевательство терпит - плохая кнопка сработает позднее, но сработает однозначно.
Позднеее может и не сработать, если недоинтегрирует интегратор. Для безгеморройности пользования кнопкой лучше бороться с дребезгом программно.
Если в течение, скажем, десяти миллисекунд, было многократное изменение уровня, а потом кнопка отпущена (даже без фиксации факта отсутствия дребезга), т.е, дребезг был и пропал - кнопку топтали однозначно.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 27.02.2015, 14:32  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от akegor Посмотреть сообщение
Позднеее может и не сработать, если недоинтегрирует интегратор. Для безгеморройности пользования кнопкой лучше бороться с дребезгом программно.
Интегратор программный!

Нога контроллера (с внутренним пулл-апом) - кнопка - земля. Всё.
Интегратор - это байт в памяти, который через 6-15 мс инкрементируется или декрементируется, в зависимости от состояния входа кнопки.
Практически, при 10-мс интервале, считает от 0 до 16, в верхних битах - флаги "нажатие", "отпускание" (события, сбрасываются обработчиком) и "нажато" (состояние).

Без дребезга интервал проходим за 80 мс. С плохой кнопкой интегратор мечется в середине интервала и в конце концов доходит до сработки.

Последний раз редактировалось makakus; 27.02.2015 в 14:35.
makakus вне форума  
Непрочитано 27.02.2015, 14:57  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от makakus Посмотреть сообщение
Проблема не в том, что программа пропустит нажатие. Проблема в том, что программа отработает несколько нажатий-отпусканий за одно физическое нажатие кнопки пальцем.
В начале программы есть такая строчка
.equ min_lim =1 ;Минимальный лимит длительности нажатия (постараемся отрезки времени установить 0,1 сек.)
А в функции sign:
;функция установки признака ажатия------------------------------------------------
sign:
cpi len_coun, min_lim ;если меньше минимального
brcs sing0 ;если меньше значит дребезг. обнуляем и выходим
cpi len_coun, short_lim ;сравнили длину с порогом длины
Этого достаточно?. Если надо можно установить сравнение 1, 2, 3. это будет 0,1; 0,2; 0,3сек.
Здесь задержка до 100 мс.

Последний раз редактировалось МВА; 27.02.2015 в 15:00.
МВА вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Как правильно отследить импульс sdsrem Микроконтроллеры, АЦП, память и т.д 8 17.08.2010 21:28
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33


Часовой пояс GMT +4, время: 16:23.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot