Страница 1 из 2
Attiny13 переход в Sleep по прерыванию
Добавлено: Сб май 08, 2010 15:17:23
artmasterpro
Народ подскажите, нужно сделать прогу с мигающим светодиодом чтобы, по нажатию кнопки светодиод тух и МК переходил в sleep. GJотом по внешнему прерыванию возвращался к жизни. Подскажите что я не так делаю.
Негде не могу найти нормального описания команд для CAVR везде только для AVR stodio и Win AVR. Приходиться все тыкать на угад. в итоге нервы и куча потраченного времени.
Был на 123avr.nm.ru - там черт ногу сломит, куча рекламы и ловиш нужный тебе текст.
Код: Выделить всё
#include <tiny13.h>
#include <delay.h>
#include <sleep.h>
// Declare your global variables here
unsigned char k;
void main(void)
{
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x40;
MCUCR=0x01;
GIFR=0x40;
DDRB=0b00011101;
PORTB=0;
// Global enable interrupts
#asm("sei")
k=0;
PORTB.0=0;
while (1)
{
PORTB.3=1 ;
delay_us (200);
PORTB.3=0;
delay_us (200);
};
}
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if (k==1) {
//sleep_disable()
;PORTB.0=1;k=0;} else {k=1;PORTB.0=1;
//sleep_enable(); powerdown ();
}
}
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Сб май 08, 2010 18:08:28
ooogo
по подробней опишите, что нужно и что куда подключено.
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Сб май 08, 2010 19:24:50
artmasterpro
к выводу INT0 подключена кнопка. На одну любую ногу порта светодиод. к примеру на PB0.
MK attiny13
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Сб май 08, 2010 20:28:18
ooogo
А зачем тогда прерывание на любое изменение уровня? Включите подтяжку, и установите прерывание по заднему фронту, кнопочку на землю, и флаг при выходе из спячки "1" при засыпании "0", в прерывании проверяйте его.
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Сб май 08, 2010 20:32:00
ooogo
Код: Выделить всё
if (k==1) {sleep_disable();PORTB.0=1;k=0;}
else
{k=1;PORTB.0=1;sleep_enable(); powerdown ();}
У Вас уже вроде все написано было, только с прерыванием разберитесь, и при объявлении k=1.
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Сб май 08, 2010 20:44:28
artmasterpro
Проверяю свой код в протеусе, тупит прерывание. Пока кнопка нажата - светодиод горит как отпустил все погасло. и в слип тоже не впадает я не пойму что не так в коде ?
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Сб май 08, 2010 23:04:31
ooogo
так если прямой ответ Вас не устраивает, то задаю наводящие вопросы.
1) Что у Вас на ножке INT0, когда кнопка отпущени и когда нажата?
2) При каких условиях возникает прерывание?
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Вс май 09, 2010 07:34:31
Neekeetos
artmasterpro писал(а):Проверяю свой код в протеусе, тупит прерывание. Пока кнопка нажата - светодиод горит как отпустил все погасло. и в слип тоже не впадает я не пойму что не так в коде ?
Неправильно то что ты усыпляешь МК из прерывания, а в этот момент сами прерывания запрещены. Так очевидно работать не будет, лучше сделать переменную флажок и менять ее в прерывании, а в основном цикле ее проверять и усыплять МК.
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Вс май 09, 2010 16:55:47
artmasterpro
про слип понял.
Вот во вложении файл в протеусе. Если не лень глянь - там слип отключен отдно прерывание но чегото не работает !
1) Что у Вас на ножке INT0, когда кнопка отпущени и когда нажата?
2) При каких условиях возникает прерывание?
прерывание возникает по изменению состояния ноги int0 - помоему по фронту
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Вс май 09, 2010 23:43:30
ooogo
artmasterpro писал(а):
прерывание возникает по изменению состояния ноги int0 - помоему по фронту
у Вас прерывание возникает при
любом изменении уровня на int0, вот и получается, что нажал на кнопку - возникло прерывание(выполнился код внутри), отжал кнопку - снова возникло прерывание (снова выполнился код внутри). Т.е. когда просто нажал на кнопку, то прерывание вызовится, как
минимум дважды , а если прибавить дребезг контактов ......
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Вс май 09, 2010 23:47:41
ooogo
В проге стоит частота 1 МГц, а в протеусе тактирование от внутреннего генератора 9,6 МГц с делением на 8 = нестыковочка?
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Пн май 10, 2010 10:32:57
artmasterpro
Вернул все как надо в настройках МК , тем не мение ничего не изменилось.

Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Пн май 10, 2010 13:13:09
ooogo
Открываешь даташит и читаешь раздел 9, точнее 9.3, особое внимание удили таблице 9-2. Если с англицким совсем трудно, то скачиваешь книгу Белова "Микроконтроллеры AVR в радиолюбительской практике" и читаешь там.
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Пн май 10, 2010 14:13:16
artmasterpro
C английским норма полная !
Увы в даташите
http://www.atmel.com/dyn/resources/prod ... oc1187.pdf
разделы не пронумерованы !
ЗА книгу спасибо скачал - читаю !
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Пн май 10, 2010 18:16:15
ooogo
Что значит не пронумерованы?

А я по твоему откуда нумерацию взял?
http://www.atmel.com/dyn/resources/prod ... oc2535.pdf
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Пн май 10, 2010 22:13:48
artmasterpro
Воот ! все верно в твоем нумерация есть - а открой мой тама нет !
Изменил код:
Код: Выделить всё
GIMSK=0b01000000;
MCUCR=0b00000000;
GIFR=0b00000000;
DDRB=0b00011101;
PORTB=0;
Теперь происходит следующее: при нажатии на кнопку светодиод загораеться и некаких действий при повторном нажатии не происходит !!!!!
т.е. потушить его не получаеться ))
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Пн май 10, 2010 22:59:48
ooogo
опиши словами, что ты хотел сделать!? Ты понимаешь, что такое передний фронт и задний фронт сигнала?
вот что у меня получилось
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Вт май 11, 2010 09:11:17
artmasterpro
Вот то что у тебя получилось, я и хотел сделать.
Передний фронт - это левая нарастающая импульса а задний фронт это правая спадающая.
Скажи в чем разница между твоей и моей прогой ?
Я просто хочу понять в чом ошибка была ?
Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Вт май 11, 2010 11:12:17
ooogo
artmasterpro писал(а):
Скажи в чем разница между твоей и моей прогой ?
Я просто хочу понять в чом ошибка была ?
Что бы понять, разложи управляющие регистры в двоичной форме и найди в даташите за что отвечает каждый бит, вот тогда поймешь и будешь знать где искать нужную информацию.

Re: Attiny13 переход в Sleep по прерыванию
Добавлено: Ср май 12, 2010 22:03:46
artmasterpro
все получилось спасибо. Щас возьмус за слип, постараюсь без повода не тревожить !