реклама на сайте
подробности

 
 
> Прерывания и странное явление с подтяжкой
endasm
сообщение Aug 31 2012, 21:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 9-07-12
Пользователь №: 72 673



Изучаю прерывания в AVR и на отладочной плате собрал кое-какую схемку на ATmega16:

Собственно говоря на ней изображена сама проблема - подтянутые резисторами по 1к ножки прерываний INT0 и INT1 ведут себя совершенно пр-разному: прерывание INT0, как я догадываюсь, срабатывает постоянно и "спасает" если только подтянуть ножки прерывания INT0 напрямую к +5v без резистора - тогда второе прерывание INT1 нормально работает. Так же через ножку прерывания INT0 течет довольно большой ток и напряжение на резисторе подтяжки проседает до 0,7в. В чем проблема? Может у меня бракованный\палёный МК ? (Код прилагается ниже)
CODE
#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 1000000UL
#include <util/delay.h>

int main(void)
{
DDRB=0b11111111; // настройка PORTB на выход
GICR=(1<<INT0|1<<INT1); // разрешаем прерывания для INT0 и INT1
MCUCR&=~(1<<ISC10|1<<ISC00|1<<ISC01|1<<ISC11); // настройка срабатывания прерывания по "0" на INT0 или INT1

sei(); // глобальное разрешение прерываний
while(1);
}

ISR(INT0_vect) // прерывание по INT0
{
cli(); // "0" в 8-ой бит регистра SREG - глобальное запрещение прерываний
PORTB=0b00000001;
_delay_ms(500);
PORTB=0b00000000;
sei(); // "1" в 8-ой бит регистра SREG - глобальное разрешение прерываний
}

ISR(INT1_vect) // прерывание по INT1
{
cli(); // "0" в 8-ой бит регистра SREG - глобальное запрещение прерываний
PORTB=0b00000010;
_delay_ms(500);
PORTB=0b00000000;
sei(); // глобальное разрешение прерываний
}


Сообщение отредактировал IgorKossak - Sep 5 2012, 12:20
Причина редактирования: [codebox] для длинного кода!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
endasm
сообщение Sep 1 2012, 06:33
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 9-07-12
Пользователь №: 72 673



Проверил: в той точке всё равно держится 0,7 v и от ресета не меняется.
Go to the top of the page
 
+Quote Post
ae_
сообщение Sep 1 2012, 07:17
Сообщение #3


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Отключите от PORTD2 все провода, кнопки, резисторы... всё отключите. Отключите питание и проверьте мультиметром в режиме прозвонки диодов PORTD2 на GND и VCC в обоих полярностях.
Также прозвоните 2-3 других вывода PORTD, показания сравните с PORTD2. Если последний заметно отличается в меньшую сторону - МК неисправен.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 23:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016