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

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

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

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

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

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

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

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

Сообщение от urry Посмотреть сообщение
Нарисуйте кружочки, как оно из одного в другое переходит и от чего.
Ииии??????
Миниатюры:
Нажмите на изображение для увеличения
Название: Фрагмент.jpg
Просмотров: 52
Размер:	104.6 Кб
ID:	20618  
Реклама:
poligon_85 вне форума  
Непрочитано 15.04.2011, 23:10  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

EEPROM убрал. Вставил Ваши значения. Вот код(убрал всё лишнее):
PHP код:
#include ‹mega8.h›

#define shortkey  0x3C    //80 . Константа - минимум для короткого нажатия
#define longkey   0xFE    //240. Константа - минимум для длинного нажатия
#define PWM_del   0x0A    //15.  Константа задержки изменения яркости
#define PWM_start 0xFA    //125. Константа. Стартовое значение яркости

unsigned char   tmpPWM PWM_start
unsigned char   count 0;      //Счетчик времени удержания кнопки
unsigned char   b_count 0;    //Счетчик задержки изменения яркости
bit     KeyEXE;                     //Флаг опроса кнопок
bit     KeyNew;                     //Флаг нового нажатия
bit     PWM_on;                     //Флаг признака включения фонаря

#define KeyPress    (!PINB.0)       //Вход кнопки
#define led_on      (PORTB.3)

//Изменение яркости свечения(коэф. заполнения ШИМ)
void    bright_ch(void)
{
    
b_count++;
    if  (
b_countPWM_del)
    {                    
        
OCR2--;  
        
b_count 0x00;
    }
}
//Сброс переменных
void    clr_var(void)
{
    
count 0;          //Сбросили счётчик задержки срабатывания кнопки
    
b_count 0;        //Сбросили счётчик задержки шага изменения PWM   
    
KeyNew 0;         //Устанавливаем флаг      
    
}
//Включение/выключение фонаря
void    led_on_off(void)
{
    if  (
PWM_on)                //Если флаг установлен (включен)
    
{    
        
tmpPWM OCR2;  
        
OCR2=0xFF;              //Гасим свет
        
PWM_on 0;             //Сбросили флаг
    
}
    else                        
//А если выключен - включить
    
{     
        
OCR2=tmpPWM;//PWM_start;         //Включаем
        
PWM_on 1;             //Установили флаг 
    
}
}

//Сканирование кнопки
void    key_scan(void)
{
    if  
KeyPress                //Если кнопка нажата
    
{   
        if (
KeyNew)             //Если флаг установлен 
        
{                                          
            
count++;
            if  (
countlongkey//Если длинное нажатие
            
{                                 
                
bright_ch();    //Начинаем менять компаратор ШИМ
                
count--;        //Декремент счетчика(увеличивать-то его больше никчему)
                
PWM_on 1;
            }                   
//Выход
        

        else
        {   
            
KeyNew 1;         //Устанавливаем флаг
        
}                       //Выход
    
}   
    else                        
//Если кнопка не нажата  
    
{                                                
        if (
KeyNew)             //Если флаг установлен 
        
{                
            if (
countlongkey)  //Если меньше длинного
            
{      
                if (
countshortkey//Если больше минимального
                
{                     
                    
led_on_off();   //Включаем/выключаем фонарь
                
}               //Иначе - Это был дребезг
            
}
        }                       
        
clr_var();              //Сброс переменных
    
}                           //Выход  
    
KeyEXE 0;                 //Запрет опроса кнопок
}

interrupt [TIM2_OVFvoid Time2_ovf_isr(void)

    
KeyEXE 1;          //Разрешение опроса кнопок
}

void main(void)
{
// Input/Output Ports initialization
PORTB=0x09;
DDRB=0x08;
// Port C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;//0x04;     //off
TCNT0=0x00;
// Clock value:  31.25kHz
ASSR=0x00;
TCCR2=0x6C;//6F;
TCNT2=0x00;
OCR2=0xFF;

// Time(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;

// Global enable interrupts
#asm("sei")

while (1)
      {
            if  (
KeyEXE)
            {  
                
key_scan();
            }
      }

Вот hex
m8_PWM+Key.hex.txt
Видео снимать?

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

Залил приаттаченный хекс. При кратковременном нажатии светодиод чуть тускнеет (полностью не гаснет), повторное нажатие - включается на полную. И так по кругу. При удержании меняется яркость.

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

Фьюзы какие?Нажмите на изображение для увеличения
Название: Fuse.jpg
Просмотров: 50
Размер:	61.0 Кб
ID:	20636
Этот запоминает состояние перед выключением.m8_PWM+Key.hex.txt

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

Вот фьюзы:
Миниатюры:
Нажмите на изображение для увеличения
Название: 15.04.2011__23-49-14.jpg
Просмотров: 48
Размер:	52.9 Кб
ID:	20638  
poligon_85 вне форума  
Непрочитано 15.04.2011, 23:55  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

У Вас тактовая 1 MHz...
даже так.
CKOPT = 1 сделайте. У Вас стоит внешний кварц меньше 1 MHz...

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

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

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

Сделал CKOPT = 1, всё то же самое

Это не имеет отношения к частоте.
Цитата:
When CKOPT is programmed, the Oscillator output will oscillate a full rail-to-rail swing on the output. This mode is suitable when operating in a very noisy environment...
....
For resonators, the maximum frequency is 8 MHz with CKOPT unprogrammed and 16 MHz with CKOPT programmed.
Т.е. CKOPT = 0 при работе с сильными помехами вокруг и при работе на макс. частоте. Так что всё правильно у меня выставлено было.

Последний раз редактировалось poligon_85; 16.04.2011 в 00:58.
poligon_85 вне форума  
 

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

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

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, время: 14:28.


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