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

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

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

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

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

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

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

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

Спасибо за код! Подскажите, пожалуйста, где в нем теперь этот режим сна изменяется (какая это строка)? К сожалению, в программировании я «чайник», поэтому многие казалось бы очевидные для Вас вещи мне непонятны!
Тестировал и старый и новый код на Attiny13A и обнаружил в них одинаковый «баг» - контроллер «пропускает» первое короткое нажатие кнопки! Я несколько раз пробовал уменьшать значения в строке
PHP код:
#define shortkey  0x80    //80 . Константа - минимум для короткого нажатия 
Дошел даже до значения 0x10, и все равно первое нажатие контроллер словно не замечает! На второе и т.д. реагирует (вкл./выкл.) светодиод! Непонятно почему так происходит?
И ещё мне интересно, можно ли все-таки сделать так, чтобы при включении контроллер по умолчанию был в режиме Power Down и выходил из него только после нажатия кнопки, включающей подсветку???

То есть алгоритм примерно такой:

Подача питания --› контроллер сразу уходит в Power Down
Если кнопка нажата --› выход из спящего режима и включение подсветки
Повторное нажатие --› выкл. подсветки и уход в «спячку» снова.
Реклама:
prosto_andriy вне форума  
Непрочитано 11.02.2015, 00:04  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
где в нем теперь этот режим сна изменяется (какая это строка)?
MCUCR=0x20; //Idle Mode interrupt by level
в обработке внешнего прерывания.

Сообщение от prosto_andriy Посмотреть сообщение
И ещё мне интересно, можно ли все-таки сделать так, чтобы при включении контроллер по умолчанию был в режиме Power Down и выходил из него только после нажатия кнопки, включающей подсветку???
Чтоб не переписывать инит, вынес "колыбельную" в отдельную подпрограмму.
Ловите.

Сообщение от prosto_andriy Посмотреть сообщение
То есть алгоритм примерно такой:
Подача питания --› контроллер сразу уходит в Power Down
Если кнопка нажата --› выход из спящего режима и включение подсветки
Повторное нажатие --› выкл. подсветки и уход в «спячку» снова.
А давайте я вам подскажу как, а Вы сделаете сами?
Так же интересней.
Вложения:
Тип файла: zip t13_PWM+Key.zip (2.5 Кб, 28 просмотров)
omercury вне форума  
Сказали "Спасибо" omercury
prosto_andriy (11.02.2015)
Непрочитано 11.02.2015, 01:50  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
А давайте я вам подскажу как, а Вы сделаете сами?
Так же интересней.
Да, Вы правы!

Попробовал новый код! Теперь контроллер действительно «засыпает» сразу же при включении! «Просыпается» от прикосновения к кнопке и потребляет в таком режиме около 3мА!!! Затем, если кнопку не трогать, через заданное время опять «засыпает»!

Но я решил сэкономить и этих насколько миллиампер ...
...и добавил в функцию «led_on_off(void)» созданную Вами подпрограмму «I_Want_Sleep();». Получилось так:
PHP код:
void    led_on_off(void)
{
    if  (
PWM_on)                //Если флаг установлен (включен)
    
{    
        
tmpPWM OCR0A;  
        
OCR0A=0xFF;              //Гасим свет
        
PWM_on 0;             //Сбросили флаг
        
I_Want_Sleep();       // переводим микроконтроллер в Power Down Mode
    
}
    else                        
//А если выключен - включить
    
{     
        
OCR0A=tmpPWM;//PWM_start;         //Включаем
        
PWM_on 1;             //Установили флаг   
    
}                                               

Однако компилятор почему-то не понимает, чего я хочу, и выдает что-то вроде «undefined symbol “ I_Want_Sleep ”»
Подскажите пожалуйста, что ему не нравится???
prosto_andriy вне форума  
Непрочитано 11.02.2015, 02:51  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Но я решил сэкономить и этих насколько миллиампер ...
...и добавил в функцию «led_on_off(void)»
Экспериментатор...
Мк-то будет уходить в powerdown, но заодно с собой и подсветку утянет, так как в этом режиме сна почти ничего не работает, даже основной генератор (у watchdog-а свой низкочастотный), собственно поэтому и внешнее прерывание по перепаду не детектируется. ШИМа уже не будет...
А сейчас МК спит всё свободное время в режиме Idle.

Сообщение от prosto_andriy Посмотреть сообщение
Подскажите пожалуйста, что ему не нравится???
Подпрограмма находится ниже по тексту, чем её вызов. Компилятор ещё не знает о её существовании.
Переместите её выше по тексту.
(ничего хорошего от этого не будет, но зато поэкспериментируете.
Миниатюры:
Нажмите на изображение для увеличения
Название: Image1.jpg
Просмотров: 32
Размер:	37.8 Кб
ID:	75668  
omercury вне форума  
Непрочитано 11.02.2015, 16:39  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
Подпрограмма находится ниже по тексту, чем её вызов. Компилятор ещё не знает о её существовании.
Переместите её выше по тексту.
Если поставить повыше то возникает проблема "яйца и курицы"! То компилятор жалуется, что он не знает о функции "I_Want_Sleep();", то о функции "led_on_off();"

Чтобы было нагляднее, почему так происходит:

PHP код:
void I_Want_Sleep(void)
{
        
systemClock 0;   
        
PWM_on 1;
        
led_on_off();       
    
TCCR0B=0;   //Disable timer
    
MCUCR=0x30//PowerDown Mode interrupt by level 
    
GIMSK=0x40//Enable External Interrupt-0
    #asm("sleep")           //Усыпляем МК  
}
//Включение/выключение фонаря
void    led_on_off(void)
{
    if  (
PWM_on)                //Если флаг установлен (включен)
    
{    
        
tmpPWM OCR0A;  
        
OCR0A=0xFF;              //Гасим свет
        
PWM_on 0;             //Сбросили флаг
        
I_Want_Sleep();       // переводим микроконтроллер в Power Down Mode
    
}
    else                        
//А если выключен - включить
    
{     
        
OCR0A=tmpPWM;//PWM_start;         //Включаем
        
PWM_on 1;             //Установили флаг   
    
}                                               

И как объяснить компилятору, что делать???
prosto_andriy вне форума  
Непрочитано 11.02.2015, 16:48  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

Сообщение от STM32F0 Посмотреть сообщение
Объявите прототипы функций.
Это оно конечно, НО:
Код:
void I_Want_Sleep(void)
{
        led_on_off();       
}

void    led_on_off(void)
{
        I_Want_Sleep();       // переводим микроконтроллер в Power Down Mode                                             
}
Интересно, через сколько микросекунд стек затрёт регистры?
omercury вне форума  
Непрочитано 11.02.2015, 22:31  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Если написать так:
PHP код:
void    led_on_off(void);

void I_Want_Sleep(void)
{
        
systemClock 0;   
        
PWM_on 1;
        
led_on_off();       
    
TCCR0B=0;   //Disable timer
    
MCUCR=0x30//PowerDown Mode interrupt by level 
    
GIMSK=0x40//Enable External Interrupt-0
    #asm("sleep")           //Усыпляем МК  
}
//Включение/выключение фонаря
void    led_on_off(void)
{
    if  (
PWM_on)                //Если флаг установлен (включен)
    
{    
        
tmpPWM OCR0A;  
        
OCR0A=0xFF;              //Гасим свет
        
PWM_on 0;             //Сбросили флаг
        
I_Want_Sleep();       // переводим микроконтроллер в Power Down Mode
    
}
    else                        
//А если выключен - включить
    
{     
        
OCR0A=tmpPWM;//PWM_start;         //Включаем
        
PWM_on 1;             //Установили флаг   
    
}                                               

...то вылазит сообщение "Linker warning .... function "I_Want_sleep" not used in data stack usage calculation due to possitive recursive calls
prosto_andriy вне форума  
Непрочитано 11.02.2015, 22:35  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

prosto_andriy, Посмотри пост omercury .
И поищи в гугль что значит рекурсия ...

А на досуге здесь почитай http://lurkmore.to/%D0%A0%D0%B5%D0%B...81%D0%B8%D1%8F
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 11.02.2015, 23:46  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Если написать
А если прочитать, что Вам написали?
Недалеко, на этой странице.

Вы читать-то умеете?
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, время: 18:22.


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