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

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

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

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

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

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

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

 
Опции темы
Непрочитано 17.04.2011, 23:03  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от oleg_harp Посмотреть сообщение
Ну, Ваше дело.
Да мне-то не жалко. Но что же теперь, по всем архивам имя переменной править?

А в алгоритме участвует либо только-что нажали, либо только-что отпустили.
Реклама:
omercury вне форума  
Непрочитано 17.04.2011, 23:12  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
Момент 2.

в первой строке идёт инкремент счётчика. Если при выполнении условия (долгом нажатии) продолжать увеличивать счётчик, он, в конце концов, перескочит "255" и станет "0" "1" и т.д. Это приведёт к невыполнению условия
PHP код:
if  (countlongkey//Если длинное нажатие 
то есть к сбросу переменных и прекращению увеличения яркости. И так до следующего раза, когда счётчик досчитает до longkey. Увеличение будет работать "рывками" в диапазоне от longkey до "255".
Всё, понял этот кусок.

P.S. Но моя логика всё равно написала бы не так:
PHP код:
OCR2++;             //Уменьшаем яркость
  
if  (OCR2==0) {OCR2=0xFF;}  //Тормозим на минимуме 
а так:
PHP код:
OCR2++;             //Уменьшаем яркость
  
if  (OCR2==255) {OCR2=0xFF;}  //Тормозим на минимуме 
poligon_85 вне форума  
Непрочитано 17.04.2011, 23:16  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

В этом случае останется засветка в 1/255 цикла таймера.

oleg_harp, со своим вариантом не разбирались?

Посмотрел, что "наколбасил" CVAVR - ужаснулся. Вот!
PHP код:
0000 002D             OCR2++;             //Уменьшаем яркость
    
IN   R30,0x23
    SUBI R30
,-LOW(1)
    
OUT  0x23,R30
0000 002E             if  (OCR2==0){OCR2=0xFF;}  //Тормозим на минимуме
    
IN   R30,0x23
    CPI  R30
,0
    BRNE _0x5
    LDI  R30
,LOW(255)
    
OUT  0x23,R30 

Последний раз редактировалось omercury; 17.04.2011 в 23:28.
omercury вне форума  
Непрочитано 17.04.2011, 23:31  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Прерывание раз в 8 мс.
PHP код:
if  KeyPress                //Если кнопка нажата
    
{                            //Проверим, давно ли её нажали
        
if (KeyNew)             //Если флаг установлен (значит "давно")
        
{                                          
         ...
        } 
        else                    
//Нажали только что, на это и укажем
        
{   
            
KeyNew 1;         //Устанавливаем флаг
        
}                       //Выход
    

Получается что антибребезг у нас всего 8 мс? Т.е. если при втором входе в прерывание на пине по прежнему ноль, то считаем кнопку нажатой? Правильно?
poligon_85 вне форума  
Непрочитано 17.04.2011, 23:41  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

На самом деле антидребезг у нас 60 раз по 8 мс(на самом деле не по 8mS, а по 2uS - я частоту ШИМ поменял, но это неважно)
PHP код:
#define shortkey  0x3C    //60 . Константа - минимум для короткого нажатия 
помните? Вот пока счётчик не доберётся до 60 и будет сплошной антидребезг. За это время ничего включаться/выключаться всё/равно не будет. А реально этот счётчик несколько раз сбросится, пока не успокоится подвижный контакт кнопки.

Последний раз редактировалось omercury; 17.04.2011 в 23:45.
omercury вне форума  
Непрочитано 17.04.2011, 23:48  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Ну в принципе понял, однако в голове код ЦЕЛИКОМ всё равно не укладывается. Отдельные куски понимаю. Общую картину не могу представить.

Ладно, не буду больше мучить. Не по зубам мне задачка. И так огромное спасибо за помощь.
poligon_85 вне форума  
Непрочитано 17.04.2011, 23:52  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

А целиком и не надо. Достаточно алгоритма. Если хотите, разберём Ваш код.


И ещё. В данном случае во всей этой конструкции сейчас есть один существенный изъян - хоть МК спит, но таймер продолжает работать, пока подключено питание. Кнопку всё же придётся повесить на прерывание, чтобы будить МК при отключенном светодиоде. Это снизит потребление в выключенном состоянии.

Последний раз редактировалось omercury; 18.04.2011 в 00:02.
omercury вне форума  
Непрочитано 18.04.2011, 00:05  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Да вот у меня видно с алгоритмом как раз и проблема. Не программист я. Энергетик по образованию. Интересна тема микроконтроллеров. Стараюсь разбираться. Но вот видно сказывается отсутствие курсовых и т.д. на тему рисования алгоритмов ромбиками, кружочками и т.д.

Цитата:
Если хотите, разберём Ваш код.
Я конечно не против. Только там разбирать то толком нечего. Там похоже всё не правильно. Поэтому и не работает. Я уж и забыл про него.

Цитата:
И ещё. В данном случае во всей этой конструкции сейчас есть один существенный изъян - хоть МК спит, но таймер продолжает работать, пока подключено питание. Кнопку всё же придётся повесить на прерывание, чтобы будить МК при отключенном светодиоде. Это снизит потребление в выключенном состоянии.
Зачем вы меня расстроили... Пускай я потом бы удивлялся что аккумулятора не на долго хватает. Хотя... 4 шт. по 3700 мА*ч каждый... Я не знаю сколько должен фонарь пролежать чтобы МК его разрядил. Я конечно попробую переделать код. Но думаю это не возможно.

Цитата:
хоть МК спит, но таймер продолжает работать
А так не прокатит?
Код:
TCCR2=0x00;
#asm("sleep")

Последний раз редактировалось poligon_85; 18.04.2011 в 00:12.
poligon_85 вне форума  
Непрочитано 18.04.2011, 00:13  
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
oleg_harp, со своим вариантом не разбирались?
Вы насчёт мерцания? Да, это была низкая частота шим. При 7,8 kHz получалось 30Hz. В Proteus не мог этого увидеть. Пришлось спаять. Увеличил частоту ШИМ в 4 раза. Мерцание исчезло. Других проблем не было.
oleg_harp вне форума  
Непрочитано 18.04.2011, 00:19  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
И ещё. В данном случае во всей этой конструкции сейчас есть один существенный изъян - хоть МК спит, но таймер продолжает работать, пока подключено питание. Кнопку всё же придётся повесить на прерывание, чтобы будить МК при отключенном светодиоде. Это снизит потребление в выключенном состоянии.
Дык... ещё в начале сказал
Цитата:
В такой задаче прерывания и нафиг не впёрлись, разве что только выходить из сна... Всё остальное в цикле по флагам...
... и таймера тоже...
st_1 вне форума  
 

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

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

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:15.


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