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

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

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

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

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

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

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

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

Сообщение от Saadov Посмотреть сообщение
Посмотрите в Helpe CVAVR, нужно сначала разрешить сон - sleep_enable()
Да вообще-то и файл ‹sleep.h› наверно тут лишний! Только что обратил внимание - микроконтроллер ведь отправляется в спячку ассемблерной командой
PHP код:
#asm("sleep") 
Думаю, дело в том, что разрешение на "спячку" просто не установлено в соответствующем регистре!
У ATtiny13A это регистр MCUCR, если я не ошибаюсь! Так вот, чтобы мелкосхема могла "крепко засыпать" (уходить в POWER DOWN MODE) нужно написать
PHP код:
MCUCR=0x30
Я просмотрел весь код и нашел такую строку:
PHP код:
MCUCR=2;    //Rising Edge generate interrupt 
Вот теперь сижу думаю...
Реклама:
prosto_andriy вне форума  
Непрочитано 08.02.2015, 23:49  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
нашел такую строку:
Ну таки да, реакция на внешнее прерывание по положительному перепаду на соответствующем пине. Другая "побудка" происходит каждый раз по переполнению таймера, далее идёт опрос кнопки, если пришло время, то включение/выключение либо изменение периода ШИМ, а после этого опять здоровый сон (но не крепкий) до следующего переполнения таймера. Когда срабатывает пятнадцатиминутная задержка, отключается таймер и МК переходит в сон.
Внешнее прерывание задействовано именно для пробуждения МК из отключенного состояния после таймаута. Программно ничего не оптимизировалось в плане энергопотребления. Попробуйте принудительно отключить все устройства внутри МК, перевести все выводы в высокоимпедансное состояние, использовать драйвер "люстры" с активным "0".

Да, из powerdown МК выводится только аппаратным сбросом, собакой и внешним прерыванием по уровню (а не по перепаду) - как раз Ваш случай.
omercury вне форума  
Непрочитано 09.02.2015, 00:05  
Saadov
Почётный гражданин KAZUS.RU
 
Аватар для Saadov
 
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
Saadov на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Да вообще-то и файл ‹sleep.h› наверно тут лишний! Только что обратил внимание - микроконтроллер ведь отправляется в спячку ассемблерной командой
Вам шашечки или ехать?
‹sleep.h›
...
sleep_enable();
powerdown();

Цитата:
void sleep_enable(void)
this function enables entering the low power consumption modes.
Цитата:
void powerdown(void)
this function puts the AVR chip in the powerdown mode.
Prior to using this function, the sleep_enable function must be invoked to allow entering the low power consumption modes.
In this mode the external oscillator is stopped.
The AVR can wake up only from an external reset, Watchdog time-out or external level triggered interrupt.
Хотите #asm("sleep")?
Настройте режимы сна
Миниатюры:
Нажмите на изображение для увеличения
Название: Sleep Tiny13A.JPG
Просмотров: 24
Размер:	141.5 Кб
ID:	75580  

Последний раз редактировалось Saadov; 09.02.2015 в 00:08.
Saadov вне форума  
Непрочитано 09.02.2015, 00:12  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

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

Сообщение от STM32F0 Посмотреть сообщение
Может наоборот?
Дайте поумничать-то?

А и правда, их всё-таки есть возможность в Hi-Z поставить...
omercury вне форума  
Непрочитано 09.02.2015, 02:31  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от omercury Посмотреть сообщение
... использовать драйвер "люстры" с активным "0".
Впервые о таком слышу! Объясните пожалуйста, что Вы имеете в виду, если не сложно!
Сообщение от omercury Посмотреть сообщение
...из powerdown ... внешним прерыванием по уровню (а не по перепаду) - как раз Ваш случай.
Я заменил стоку:
PHP код:
MCUCR=2
на
PHP код:
MCUCR=0x30
Теперь ATtiny13A наконец-то стала "засыпать" (уходить в Power Down Mode) после заданного времени на авто-отключение подсветки! Но вот "просыпаться" она никак не желает! Ни от коротких нажатий, ни от длинных!
Уровень ведь при нажатии кнопки на порту PINB.1 меняется с 1 на ноль! Почему же тогда микроконтроллер не просыпается???

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

Сообщение от prosto_andriy Посмотреть сообщение
Впервые о таком слышу! Объясните пожалуйста, что Вы имеете в виду, если не сложно!
Имел в виду, что включается уровнем "0", а выключается "1". Инверсный вход.


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

Посмотрел табличку в даташите ATtiny13A

Если выставлять биты по ней то для INT0 по низкому уровню там ведь должны стоять нули? Не так ли?
Поэтому я и поставил ноль в правой части
PHP код:
MCUCR=0x30
Ведь вывести ATtiny13 из "глубокой спячки" (то есть из POWER DOWN) можно только таким прерыванием (не считая ресета и сторожевого таймера)! Или я ошибаюсь?
И это прерывание работает только с выводом INT0 (это ведь B1), к которому и подключена кнопка
PHP код:
#define KeyPress    (!PINB.1)       //Вход кнопки
#define led_on      (PORTB.0) 
Так почему же оно не работает?
Миниатюры:
Нажмите на изображение для увеличения
Название: interrupt.jpg
Просмотров: 249
Размер:	27.0 Кб
ID:	75588  
prosto_andriy вне форума  
Непрочитано 09.02.2015, 12:16  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Сообщение от prosto_andriy Посмотреть сообщение
Если выставлять биты по ней то для INT0 по низкому уровню там ведь должны стоять нули? Не так ли?
Да, действительно так.

Сообщение от prosto_andriy Посмотреть сообщение
Или я ошибаюсь?
Нет, не ошибаетесь.

Сообщение от prosto_andriy Посмотреть сообщение
Поэтому я и поставил ноль в правой части
PHP код:
MCUCR=0x30
С младшим ниблом согласен.
Посмотрите пожалуйста внимательно, что именно Вы должны были туда записать, чтоб перевести МК в Power Down Mode, но не включать этот режим немедленно.
omercury вне форума  
Непрочитано 09.02.2015, 18:48  
prosto_andriy
Временная регистрация
 
Регистрация: 25.06.2013
Сообщений: 58
Сказал спасибо: 25
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
prosto_andriy на пути к лучшему
По умолчанию Re: Как отследить короткое и продолжительное нажатие кнопки в фонаре?

Насчет старшего полубайта я наконец-то понял
если написать так:
PHP код:
while (1)
      {    
            if  (
KeyEXE)
            {  
                
MCUCR=0x10;  //  бит "спящего режима" SE (Sleep Enable)  ставим в ноль, чтобы контроллер мог "проснуться"
                
key_scan();
            }  
            if  (
systemClock › secundes)
            {
                
systemClock 0;   
                                
PWM_on 1;
                                
led_on_off();       
                
TCCR0B=0;   //Disable timer
                
MCUCR=0x30;   // режим "глубокой спячки" POWER DOWN включен! 
                
GIMSK=0x40//Enable External Interrupt-0
                #asm("sleep")           //Усыпляем МК  
            
}
      }

то контроллер нормально просыпается при нажатии кнопки!!!

В общем, с авто-засыпанием и пробуждением проблема наконец-то решилась!
Однако я хочу сделать так, чтобы при подаче питания контроллер по умолчанию был в Power Down Mode и просыпался лишь при нажатии кнопки!
Написал вот так, но он не просыпается!!!
PHP код:
while (1)
      {    
          
MCUCR=0x30;
          
#asm("sleep")
            
if  (KeyEXE)
            {  
                
MCUCR=0x10;
                
key_scan();
            }  
            if  (
systemClock › secundes)
            {
                
systemClock 0;   
                                
PWM_on 1;
                                
led_on_off();       
                
TCCR0B=0;   //Disable timer
                
MCUCR=0x30;   // -----
                
GIMSK=0x40//Enable External Interrupt-0
                #asm("sleep")           //Усыпляем МК  
            
}
      }

Если добавить строку разрешающую прерывания:
PHP код:
while (1)
      {    
                
MCUCR=0x30;   // -----
                
GIMSK=0x40//Enable External Interrupt-0
                #asm("sleep")
            
if  (KeyEXE)
            {   
                
                
MCUCR=0x10;
                
key_scan(); 
                
             }  
            if  (
systemClock › secundes)
            {
                
systemClock 0;   
                                
PWM_on 1;
                                
led_on_off();       
                
TCCR0B=0;   //Disable timer
                
MCUCR=0x30;   // -----
                
GIMSK=0x40//Enable External Interrupt-0
                #asm("sleep")           //Усыпляем МК  
            
}
      } 
то происходит вообще непонятно что - контроллер то реагирует на кнопку, то нет : такое вчечатление, что он запутался
может кто-нибудь подскажет почему так происходит
prosto_andriy вне форума  
 

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

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

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


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