Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



PowerSave и INT1

Сообщений 1 страница 17 из 17

1

Добрый вечер, друзья.
Что то меня заклинило с энергосбережением
В режиме PowerSave должны увеличиваться два счетчика: по асинхр таймеру и по прерыванию INT1. По таймеру всё работает, а вот по INT1 нет

Код:
$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 80
$swstack = 80
$framesize = 100


Config Porta.4 = Output                                  
Led Alias Porta.4
Led = 0

Dim SCH_butt as Byte
SCH_butt = 0

Dim SCH_timer as Byte
SCH_timer = 0

'настраиваем на асинхронный режим==============================
Config Timer2 = Timer , Async = On , Prescale = 1024        'Просыпаемся
Enable Ovf2
On Timer2 Timer_2
Start Timer2

Config Int1 = Rising                                
On Int1 butt
Enable Int1
Gifr.7 = 1

Enable Interrupts

Do
Config Powermode = Powersave
Loop
End

Timer_2:
Incr SCH_timer
Return

'Прерывание от кнопки
butt:
Led = 1
Gifr.7 = 1
incr SCH_butt
Return

Int1 подтянут к земле и соединяется кнопкой к питанию. На Mege128 это работает.
Кто сталкивался может?

Отредактировано K_o_nstantin (2020-06-01 21:20:39)

0

2

pcint выводит из сна гляньте ДШ есть ли он

0

3

K_o_nstantin написал(а):

Int1 подтянут к земле и соединяется кнопкой к питанию.

У вас:
Config Int1 = Rising - прерывание по спаду уровня

Попробуйте:
Config Int1 = Falling - прерывание по нарастанию уровня

0

4

Yuriy.pv написал(а):

pcint выводит из сна гляньте ДШ есть ли он

У Mega16 PCINT нет...

0

5

K_o_nstantin написал(а):

Gifr.7 = 1

А это правильно? Насколько я помню у Меги16 GICR (General Interrupt Control Register).

0

6

Nord написал(а):

У вас:
Config Int1 = Rising - прерывание по спаду уровня

Попробуйте:
Config Int1 = Falling - прерывание по нарастанию уровня

Не так не так не работает. (на меге128 работает и так и так)

Отредактировано K_o_nstantin (2020-06-01 22:25:21)

0

7

Andrusha написал(а):

помню у Меги16 GICR (General Interrupt Control Register).

все верно

только по уровню
http://forumfiles.ru/uploads/0000/25/b8/733/t92518.png

Отредактировано Yuriy.pv (2020-06-01 22:26:18)

0

8

Andrusha написал(а):

А это правильно? Насколько я помню у Меги16 GICR (General Interrupt Control Register).

GIFR - это флаг очистить
Если не включать режим PowerSave, то всё работает кстати. Не работает именно во сне. Не просыпается Mega16 почему-то от INT1
И ещё, если держать кнопку, то после того как контроллер проснётся от асинхронного таймера, прерывание от кнопки срабатывает.

Отредактировано K_o_nstantin (2020-06-01 22:34:58)

0

9

вы проверяете по фронту или по уровню?

0

10

Yuriy.pv написал(а):

вы проверяете по фронту или по уровню?

По фронту.
Config Int1 = Rising

Не входит в прерывание именно во сне, хотя как я понимаю должен по INT1 и INT0 из любого сна выходить

Отредактировано K_o_nstantin (2020-06-01 22:43:13)

0

11

в дш написано п.3 по уровню

0

12

Yuriy.pv написал(а):

в дш написано п.3 по уровню

Спасибо, проглядел

0

13

Config Int1 = low level

Вот так всё работает, хоть и не удобно, но всё же лучше чем ничего. В плане пробуждения по фронтам Мега128 поинтереснее будет. Всем спасибо за помощь!

0

14

K_o_nstantin написал(а):

хоть и не удобно

Всё удобно, подвязываем кнопку к питанию через резюк и всё.
Если хочется гибкости, то просто уходим на ХМегу.

0

15

А вот мне до сих пор не всё понятно...  :blush:
Изначально (в #1):

K_o_nstantin написал(а):

Int1 подтянут к земле и соединяется кнопкой к питанию.

Следовательно, пока кнопка не нажата, на этой ножке МК - Low Level...

Установки прерывания:

K_o_nstantin написал(а):

Config Int1 = low level

Так на INTx при такой схемотехнике всегда будет Low Level, пока кнопку не нажмем ! :dontknow:

0

16

Nord написал(а):

А вот мне до сих пор не всё понятно...  
Изначально (в #1):

Следовательно, пока кнопка не нажата, на этой ножке МК - Low Level...

Установки прерывания:

Так на INTx при такой схемотехнике всегда будет Low Level, пока кнопку не нажмем !

Да, пришлось поставить инвертор на транзисторе, т.к. менять подтяжку кнопки мне недоступно

0

17

K_o_nstantin написал(а):

Да, пришлось поставить инвертор на транзисторе, т.к. менять подтяжку кнопки мне недоступно

"И вот почему у вас до сих пор головы не квадратные ?" (с) "Уральские Пельмени"
Без обид, плиз... ;)
Я не слышал, чтоб форумчане хвастались наличие хрустального шара... ;)

0