roboforum.ru

Технический форум по робототехнике.

Внешние прерывания Atmega8

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Внешние прерывания Atmega8

Сообщение bond » 23 июн 2008, 15:31

Вообщем то сабж.Уже намучался с прерыванием =( по INT0 .
Вот код.Посмотрите пожалуйста в чем ошибка.Регистры настроенны таким образом,что прерывание срабатывает по нсподаещему фронту на INTO.Как я понимаю нисподающий фронт это изменение сигнала с "лог 1" до "лог 0".Правильно?И собственно код: компилятор WinAvr.Проверял в Proteus'e;
Код: Выделить всёРазвернуть


#include <avr/io.h>
#define F_CPU 8000000UL
#include <avr/interrupt.h>
#include <avr/signal.h>

// External Interrupt 0 service routine
INTERRUPT(SIG_INTERRUPT0)
{
PORTB ^=0xff;
}

void main(void)
{
PORTB=0x00;
DDRB=0xFF;
GICR|=0x40;
MCUCR=0x02;
GIFR=0x40;

sei();

while (1)
      {

      };
}



bond
 
Сообщения: 5
Зарегистрирован: 23 июн 2008, 15:24

Re: Внешние прерывания Atmega8

Сообщение Master » 23 июн 2008, 16:56

А ты уверен что нужно писать не так
Код: Выделить всёРазвернуть
#asm("sei")


Добавлено спустя 2 минуты 1 секунду:
И это может эту ножку порта нужно настроить как вход, а не как выход?
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Внешние прерывания Atmega8

Сообщение bond » 23 июн 2008, 17:00

Код: Выделить всёРазвернуть
 error: invalid preprocessing directive #asm


:cry: и не компилиться
bond
 
Сообщения: 5
Зарегистрирован: 23 июн 2008, 15:24

Re: Внешние прерывания Atmega8

Сообщение avr123.nm.ru » 23 июн 2008, 17:46

bond писал(а):Уже намучался с прерыванием

http://avr123.nm.ru/03.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Внешние прерывания Atmega8

Сообщение Kartush » 23 июн 2008, 22:47

2avr123.nm.ru У Вас отличный курс,но на мой взгляд про прерывания стоит подкинуть пару примеров - уже готовых простейших программ, чтобы быстрее понималось))Например: мигает светодиод,при нажатии кнопки мигает 5 раз другой светодиод, и снова начинает мигать первый.
Kartush
 
Сообщения: 47
Зарегистрирован: 26 мар 2008, 20:11
Откуда: Украина. Херсон.
ФИО: Дмитрий

Re: Внешние прерывания Atmega8

Сообщение bond » 23 июн 2008, 22:58

Да,совершенно согласен,я прочитал курс от корочки до корочки,все отлично понятно,вообщемто все азы я узнал из курса,но с прерываниями вышла небольшая проблема.У меня будет небольшая просьба ко всем участникам данного форума:пожалуйста напишите простой пример внешнего прерывания,в WinAvr и простую схемку в Proteus,мне очень поможет,да и думаю другим новичка.Заранее большое спасибо.
bond
 
Сообщения: 5
Зарегистрирован: 23 июн 2008, 15:24

Re: Внешние прерывания Atmega8

Сообщение avr123.nm.ru » 23 июн 2008, 23:54

Kartush писал(а):2avr123.nm.ru У Вас отличный курс,но на мой взгляд про прерывания стоит подкинуть пару примеров - уже готовых простейших программ, чтобы быстрее понималось))


Дак вы внимательно посмотрите ! Там и есть готовый для симуляции пример с двумя кнопками на прерывания.

bond писал(а): просьба ко всем участникам данного форума:пожалуйста напишите простой пример внешнего прерывания,в WinAvr и простую схемку в Proteus,мне очень поможет,да и думаю другим новичка.


У меня там (на стр. 3 курса) пример для CVAVR и VMLAB.

А вам нужно там посмотреть как объявлять обработчик прерывания в WinAVR.

И еще по WinAVR - viewtopic.php?f=2&t=3928
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Внешние прерывания Atmega8

Сообщение Kartush » 24 июн 2008, 11:09

avr123.nm.ru писал(а):
Kartush писал(а):2avr123.nm.ru У Вас отличный курс,но на мой взгляд про прерывания стоит подкинуть пару примеров - уже готовых простейших программ, чтобы быстрее понималось))


Дак вы внимательно посмотрите ! Там и есть готовый для симуляции пример с двумя кнопками на прерывания.

Согласен,пример есть. Но если кто-то уже ссимулировал работу прерываний и теперь хочет вернуться в реальность. Какую программу ему прошивать? В примере дана программа под симулятор. Что именно нужно тогда изменить?
Kartush
 
Сообщения: 47
Зарегистрирован: 26 мар 2008, 20:11
Откуда: Украина. Херсон.
ФИО: Дмитрий

Re: Внешние прерывания Atmega8

Сообщение avr123.nm.ru » 24 июн 2008, 11:31

Ни чего менять не нужно. Просто прошить .hex в МК и подключить кнопки через резисторы 240-750 Ом и для индикации светодиоды через резисторы 470-750 Ом.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Внешние прерывания Atmega8

Сообщение Kartush » 24 июн 2008, 11:34

Спасибо, будем разбираться.
Kartush
 
Сообщения: 47
Зарегистрирован: 26 мар 2008, 20:11
Откуда: Украина. Херсон.
ФИО: Дмитрий

Re: Внешние прерывания Atmega8

Сообщение bond » 24 июн 2008, 12:21

Опять же.Сделал все как написанно в курсе,тольок не работает...
Код: Выделить всёРазвернуть



#include <avr/io.h>
#define F_CPU 8000000UL
#include <avr/interrupt.h>
#include <avr/signal.h>


// External Interrupt 0 service routine
ISR(SIG_INTERRUPT0)
{
PORTB ^=0xff;
}

void main(void)
{
PORTB=0x00;
DDRB=0xFF;
GICR|=0x40;
MCUCR=0x02;
GIFR=0x40;
sei();


while (1)
      {

      };
}




bond
 
Сообщения: 5
Зарегистрирован: 23 июн 2008, 15:24

Re: Внешние прерывания Atmega8

Сообщение Kip » 10 июл 2008, 16:41

Проверьте по ходу программы, устанавливается ли у вас бит I в регистре SREG? Например в VMlab это можно легко сделать.

sei(); - это фигня какая-то, сделайте лучше вот так: SREG |= (1 << 7);

[
Kip
 
Сообщения: 4
Зарегистрирован: 10 июл 2008, 16:14

Re: Внешние прерывания Atmega8

Сообщение blindman » 10 июл 2008, 16:48

Kip писал(а):sei(); - это фигня какая-то, сделайте лучше вот так: SREG |= (1 << 7);

Это че еще за новости?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Внешние прерывания Atmega8

Сообщение Kip » 10 июл 2008, 16:58

blindman писал(а):Это че еще за новости?


Разве это новости?
Бит 7 в регистре SREG отвечает за прерывания. Если установлен-разрешены глобально, если не-то нет.
Kip
 
Сообщения: 4
Зарегистрирован: 10 июл 2008, 16:14

Re: Внешние прерывания Atmega8

Сообщение blindman » 10 июл 2008, 17:07

Для меня новость, что sei это "фигня". Может порадовать этой новостью разработчиков контроллера? Наверно, по твоему фигня также и то, что твой код будет исполняться в 3 раза дольше? И то, что тот, кто будет потом читать твой код, должен помнить, что I это именно седьмой бит?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3