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

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

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

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

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

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

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

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

poligon_85, Вторая ножка светодиода осталась на "земле"? Если да, то вот изменённый исходник. Этот вариант запоминает яркость светодиода при выключении, а при включении её восстанавливает. Если при выключенном фонаре долго удерживать кнопку, регулировка начинается с нуля. Всё свободное время МК спит.

PHP код:
.............................
//Сканирование кнопки
void    key_scan(void)
{
............................
    
KeyEXE 0;                 //Запрет опроса кнопок   
    #asm("sleep")               //Усыпляем МК
}
....................
// Time/Counter 2 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz *4 = 31.25kHz
// Mode: Fast PWM top=0xFF
// OC2 output: Inverted PWM
ASSR=0x00;
TCCR2=0x7C;//6C;//6F; 
Изменил режим таймера и добавил спящий режим.
m8_PWM+Key.zip
Реклама:
omercury вне форума  
Непрочитано 16.04.2011, 13:00  
oleg_harp
Прописка
 
Регистрация: 25.08.2007
Сообщений: 193
Сказал спасибо: 11
Сказали Спасибо 57 раз(а) в 33 сообщении(ях)
oleg_harp на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от poligon_85 Посмотреть сообщение
Не понимаю ваш исходник... Что делает функция bright_ch () ?
О! Вы мало спали. Это не моя функция и не мой исходник. Вы уже запутались Мой исходник приложен. Кстати, если не трудно, проверьте в реале!
Вложения:
Тип файла: rar Kazus.rar (57.8 Кб, 52 просмотров)
oleg_harp вне форума  
Непрочитано 16.04.2011, 13:08  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Цитата:
Таймер 2 занимается генерацией ШИМ, зачем там:
Не только. Чтобы не использовать второй таймер - TIMER0, я сделал тактирование от того же TIMER2. Он же всё равно уже работает.
В прерывании таймера только устанавливается флаг разрешения опроса кнопок. Реально компилятор ещё сохранил SREG, но сделал это правильно(на мой взгляд) - в регистр.
PHP код:
;interrupt [TIM2_OVFvoid Time2_ovf_isr(void)
;
_Time2_ovf_isr:
    
ST   -Y,R30
    IN   R30
,SREG
//Разрешение опроса кнопок
    
SET
    BLD  R2
,0
    OUT  SREG
,R30
    LD   R30
,Y+
    
RETI 
omercury вне форума  
Непрочитано 16.04.2011, 13:10  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от poligon_85 Посмотреть сообщение
Не понимаю ваш исходник... Что делает функция bright_ch () ?
Bright Change - изменение яркости. Все имена стараюсь давать со смыслом.
Эта функция изменяет яркость. Можно было сделать и в цикле опроса кнопок, но так нагляднее.
omercury вне форума  
Непрочитано 16.04.2011, 13:11  
poligon_85
Временная регистрация
 
Аватар для poligon_85
 
Регистрация: 11.04.2011
Сообщений: 54
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
poligon_85 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

И опять же, почему:
Код:
// Time 0 overflow interrupt service routine
// раз в 8 mS
interrupt [TIM2_OVF] void Time2_ovf_isr(void)
{ 
    KeyEXE = 1;          //Разрешение опроса кнопок
}
Если таймер занимается генерацией ШИМа.
poligon_85 вне форума  
Непрочитано 16.04.2011, 13:47  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Давайте тогда буду объяснять, почему так, а не как-то иначе с самого начала.
Функция main(). С неё начинает работать программа. Сначала идёт инициализация, а в конце есть бесконечный цикл
Код:
 While(1);
В нём МК дальше и будет крутиться, пока чего-нибудь не произойдёт. В нашем случае пока не сработает прерывание работы МК по переполнению счётчика таймера2.

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

main(); While(1); - это я понимаю. Получается у нас таймер 2 и ШИМ генерирует и интервалы считает?????

Просто я подсчет интервалов на Таймере 0 пытался сделать.

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

Сообщение от poligon_85 Посмотреть сообщение
Получается у нас таймер 2 и ШИМ генерирует и интервалы считает?????
Конечно! Зачем использовать 2 таймера для простейшей задачи?
По функциям объяснять?

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

Сообщение от omercury Посмотреть сообщение
По функциям объяснять?
Ну если не сложно... Ну вот такой тяжелый случай

Итак, стаботало прерывание таймера.

KeyEXE = 1; - зафиксировали это.

Запустили сканирование кнопок key_scan();

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

Случай нормальный.
PHP код:
//Изменение яркости свечения(коэф. заполнения ШИМ)
void    bright_ch(void)
{
    
b_count++;                //Инкремент счётчика задержки
    
if  (b_countPWM_del)    //Если досчитали
    
{                    
        
OCR2--;              //Меняем скважность
        
b_count 0x00;        //Сброс четчика
    
}

Эта функция меняет коэффициент заполнения ШИМ. В нашем случае каждый одиннадцатый вход в неё. (#define PWM_del 0x0A)
PHP код:
//Сброс переменных
void    clr_var(void)
{
    
count 0;          //Сбросили счётчик задержки срабатывания кнопки
    
b_count 0;        //Сбросили счётчик задержки шага изменения PWM   
    
KeyNew 0;         //Сбрасываем флаг      
    

Здесь всё понятно. Обнуляются переменные.

Чтоб не многопостить, дописываю сюда.

Последний раз редактировалось omercury; 16.04.2011 в 14:28.
omercury вне форума  
 

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

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

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


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