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

 
 
 
Reply to this topicStart new topic
> Прерывание ATmega128, Не работает
Инж
сообщение Apr 19 2007, 07:57
Сообщение #1





Группа: Новичок
Сообщений: 13
Регистрация: 5-04-07
Пользователь №: 26 780



Привет всем любителям AVR.
Впервые в своей жизни решил настроить прерывание и как вы думаете?
НЕПОЛУЧИЛОСЬ :-)
Подскажите кто может в чем проблема. Код приведен ниже.
Работаю в ICC AVR.
#include <iom128v.h>
#include <macros.h>
#include "PU_v1.h"

unsigned char EVENT_REG=0;

void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x10; //m103 output only
DDRC = 0x10;
PORTD = 0x01;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x01;
DDRG = 0x1F;
}

//Watchdog initialize
// prescale: 2048K

void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}



#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
PORTG|=BIT(Led_ERR);
EVENT_REG|=BIT(Ena_SER_DATA);
while (EVENT_REG&BIT(Ena_SER_DATA))
{
PORTG|=BIT(0);
delay3us();
delay3us();
PORTG&=~BIT(0);

EVENT_REG&=~BIT(Ena_SER_DATA);
}
}



void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
XDIV = 0x00; //xtal divider
XMCRA = 0x00; //external memory
port_init();
watchdog_init();

MCUCR = 0x00;
EICRA = 0x03; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x01;
TIMSK = 0x00; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}


void delay3us(void)
{
unsigned int i=0;
for (i=0;i<48;i++)
{
NOP();
}
}


void main(void)
{
init_devices();
while(1)
{
WDR();
PORTG|=BIT(Led_RUN);
}
}
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Apr 19 2007, 08:43
Сообщение #2


Местный
***

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



Проверьте fuse m103 (режим эмуляции меги103). Он установлен изначально производителем. Вообще говоря, хрен знает, что делает мега128 при обращении к регистрам которых нет в 103 в этом режиме.
Go to the top of the page
 
+Quote Post
Инж
сообщение Apr 19 2007, 08:51
Сообщение #3





Группа: Новичок
Сообщений: 13
Регистрация: 5-04-07
Пользователь №: 26 780



Цитата(VladimirYU @ Apr 19 2007, 09:43) *
Проверьте fuse m103 (режим эмуляции меги103). Он установлен изначально производителем. Вообще говоря, хрен знает, что делает мега128 при обращении к регистрам которых нет в 103 в этом режиме.


Фузы лично прошивал. Режим 103 убрал.
А в коде проблем нет?
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Apr 19 2007, 09:14
Сообщение #4


Местный
***

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



В инициализации того что связано с прерыванием INT0 ничего криминального не увидел. Может быть ты в прерывания попадаешь первый раз, а потом виснешь в цикле while и не можешь оттуда выйти. Устанавливай какую-нибудь ногу в прерываниях в 1, а в фоне сбрасывай в 0 и посмотри.
Go to the top of the page
 
+Quote Post
Инж
сообщение Apr 19 2007, 09:28
Сообщение #5





Группа: Новичок
Сообщений: 13
Регистрация: 5-04-07
Пользователь №: 26 780



Цитата(VladimirYU @ Apr 19 2007, 10:14) *
В инициализации того что связано с прерыванием INT0 ничего криминального не увидел. Может быть ты в прерывания попадаешь первый раз, а потом виснешь в цикле while и не можешь оттуда выйти. Устанавливай какую-нибудь ногу в прерываниях в 1, а в фоне сбрасывай в 0 и посмотри.


Если я захожу в прерывание то у меня засвечивается светодиод. Этого я не вижу. в цикле тоже не висну. Ставил значение порта принудительно 0 и циклично при этом входил и выходил из прерывания но этот способ игнорирует внешнее прерывание и работает по своему усмотрению.
Go to the top of the page
 
+Quote Post
nss
сообщение Apr 19 2007, 09:47
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 15-03-06
Пользователь №: 15 277



А у вас достаточны условия генерации прерывания int0.
Имею ввиду что за сигнал идет на ногу PD0 (INT0).
Криминал в коде пока не заметил.
Go to the top of the page
 
+Quote Post
Инж
сообщение Apr 19 2007, 10:18
Сообщение #7





Группа: Новичок
Сообщений: 13
Регистрация: 5-04-07
Пользователь №: 26 780



Цитата(nss @ Apr 19 2007, 10:47) *
А у вас достаточны условия генерации прерывания int0.
Имею ввиду что за сигнал идет на ногу PD0 (INT0).
Криминал в коде пока не заметил.


По даташиту прочитал не менее 50 нс
Я задаю 1мкс длительность отрицательного импульса
А период примерно 600 мкс
Go to the top of the page
 
+Quote Post
rumit2000
сообщение Apr 19 2007, 10:55
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 16-03-07
Из: Москва
Пользователь №: 26 228



Цитата(Инж @ Apr 19 2007, 11:18) *
По даташиту прочитал не менее 50 нс
Я задаю 1мкс длительность отрицательного импульса
А период примерно 600 мкс

А нет варианта что светодиод мигает, но очень быстро, есть возможность осцилой поглядеть?


--------------------
Быстро, Дёшево, Качественно-выбери любые 2 пункта
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 19 2007, 11:08
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(rumit2000 @ Apr 19 2007, 10:55) *
А нет варианта что светодиод мигает, но очень быстро, есть возможность осцилой поглядеть?

Судя по программе должен мигать со скважностью 100.
Можно и не увидеть.
Go to the top of the page
 
+Quote Post
Инж
сообщение Apr 19 2007, 11:16
Сообщение #10





Группа: Новичок
Сообщений: 13
Регистрация: 5-04-07
Пользователь №: 26 780



Все ребята. Я нашел причину.
Извините за невнимательность.
Хреновая дорожка на плате была как раз по INT0
Пропаял и все заработало
Спасибо что откликнулись.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 19 2007, 11:25
Сообщение #11


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ещё раз убеждаюсь, что программирование это наука о контактах. wink.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:49
Рейтинг@Mail.ru


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