Страница 1 из 1
Внешние прерывания и подача питания
Добавлено: Пн окт 20, 2014 12:53:54
sirha
Всем привет должно ли срабатывать внешние прерывание как токо включил микроконтроллер?
Код: Выделить всё
#include <tiny13.h>
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTB.0=1;
}
void main(void)
{
MCUCR=0x00;
GICR=0x40;
PORTB=0x02;
DDRB=0x01;
#asm ("sei");
while(1);
}
или это глюк протеуса???
когда подаю питание на attiny сразу горит светодиод
кстати можно ли вешать кнопку без подтягивающего резистора в реальном железе ?
Re: Внешние прерывания и подача питания
Добавлено: Пн окт 20, 2014 13:42:17
Pink-Pank
Попробуйте перед разрешением прерываний сбросить регистров флагов внешних прерываний.

Дело, скорее всего, в том, что флаги в регистре устанавливаются не зависимо от того, разрешили Вы прерывания или нет. И вполне может случится так, что Вы прерывание разрешили, а событие уже когда-то было.

Оно и сработает.
Кнопки можно подтягивать и внутренними резисторами. Необходимо помнить, что их номинал колеблется от 30 до 100 кОм. поэтому здесь все зависит от конкретного применения. если контроллер работает в сильной помеховой обстановке, то возможны будут произвольные срабатывания. В этом случае лучше подтянуть их через внешние резисторы меньшим сопротивлением (5-10 кОм).
или это глюк протеуса???
Это скорее Ваше огромное желание как можно быстрей что-то сделать, за полным отсутствием желания сначала разобраться как это работает.
Торопитесь... Куда?
Re: Внешние прерывания и подача питания
Добавлено: Пн окт 20, 2014 18:30:53
sirha
Pink-Pank писал(а):Попробуйте перед разрешением прерываний сбросить регистров флагов внешних прерываний.
если контроллер работает в сильной помеховой обстановке, то возможны будут произвольные срабатывания. В этом случае лучше подтянуть их через внешние резисторы меньшим сопротивлением (5-10 кОм).
или это глюк протеуса???
Это скорее Ваше огромное желание как можно быстрей что-то сделать, за полным отсутствием желания сначала разобраться как это работает.
Торопитесь... Куда?
Насамом деле вы правы я тороплюсь))),но я хочу и раобраться быстрее и чтото сделать
бывает наоборот хочеться токо раобраться- человек настроения))
Вообщем прерывания перестали срабатывать в в начале при подаче питания как токо я подключил внешний резистор (все это в протеусе).
У меня когда я управлял двигателем -транзистор+ релюшка- то были ложные срабатывания как ра внешних резисторов не было- это может быть и-за этого?
а сбросить флаги внешних это вы имеете ввиду так?:
Код: Выделить всё
#include <tiny13.h>
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTB.0=1;
}
void main(void)
{
MCUCR=0x00;
GICR=0x00; // к сбросу
PORTB=0x02;
DDRB=0x01;
GICR=0x40; //прерыва нияразрешены
#asm ("sei");
}
когда вот так написал все заработало без внешнего резистора , но это токо в эмуляторе))):
Код: Выделить всё
PORTB=0x02;
DDRB=0x01;
MCUCR=0x00;
GICR=0x40;
Re: Внешние прерывания и подача питания
Добавлено: Пн окт 20, 2014 19:05:27
Pink-Pank
Внимание! Сначала делаете подтяжку.
И ТОЛЬКО ПОСЛЕ ЭТОГО делаете сброс флагов.
Иначе сброс не будет иметь смысла.
Программу свою проанализируйте! Вы сначала разрешаете прерывания, а уж потом делаете подтяжку. Какой уровень у Вас на ножке, пока Вы ее не подтянули? НЕ знаете? Никто не знает. А Протеус считает, что было событие.

Большой шанс, что прерывание сработает непреднамеренно. Когда внешний резистор - нужный уровень изначально присутствует ДО настройки прерываний.
Re: Внешние прерывания и подача питания
Добавлено: Пн окт 20, 2014 20:47:58
sirha
Pink-Pank писал(а):Внимание! Сначала делаете подтяжку.
И ТОЛЬКО ПОСЛЕ ЭТОГО делаете сброс флагов.
Иначе сброс не будет иметь смысла.
Ничего не понимаю почему GICR = 0b111111;
сброс флагов это их включение ????,а причем тут PORTB.1=1? у меня же PORTB.0
Re: Внешние прерывания и подача питания
Добавлено: Пн окт 20, 2014 22:08:40
Pink-Pank
не
GICR, а
GIFR. Вы не внимательны.
Сброс производится записью единицы. Читайте мануалы. Вы ленивы.
причем тут PORTB.1=1? у меня же PORTB.0
Вы опять не внимательны. кнопка у Вас заведена на порт B1.
Это включение внутреннего подтягивающего резистора к этой ноге. (Естесственно, если она настроена на вход)