|
Какой-то бред..., ...с прерыванием по таймеру |
|
|
|
Jan 2 2008, 10:34
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 29-12-07
Пользователь №: 33 732

|
AVR Mega8, 16МГц, среда разработки CVAVR v1.25.Делаю все по шаблону, как предлагает мастер. Пытаюсь создать прерывание по таймеру №0 каждые 64 мкс (15625 Гц). Вот текст программы: Цитата #include <mega8.h> #include <delay.h>
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
TCNT0=0x00; // сбросить счетчик таймера PORTB.0=0; // выставить на ножке "0" на период ~3...4 мкс delay_us (3); }
void main(void) {
PORTB=0x00; DDRB=0xFF;
PORTC=0x00; DDRC=0x7F;
PORTD=0x00; DDRD=0xFF;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 15,625 kHz TCCR0=0x05; TCNT0=0x00;
// Timer/Counter 1 initialization TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01;
// Analog Comparator initialization ACSR=0x80; SFIOR=0x00;
#asm("sei")
while (1) {
PORTB.0=1; //на ножке постоянная "1", прерывать ее каждые 64 мкс };
} Результат смотрю на осциллографе - хрен два! Постоянная единица, ничего не прерывается. Пробовал и так и эдак... И что я только не писал в обработчик прерывания - ничего не помогает. И запрещать прерывания там пробовал, и заново таймер реинициализировал... Разве что проскакивает этот самый ожидаемый "0" каждые примерно 5 секунд (определяю по взмаргиванию линии на осциллографе). И что это за бред...? Где моя ошибка?
Сообщение отредактировал HCHUNTER - Jan 2 2008, 10:37
|
|
|
|
|
 |
Ответов
|
Jan 5 2008, 09:04
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 28-09-07
Пользователь №: 30 914

|
Сори за офф, но решил не создавать новой темы, а спросить тут. Правильно ли я понимаю функционирование таймеров/счетчиков: Режим переполнения(overflow) - это когда таймеры считают синхроипульсы, и прерывание происходит когда MAX_COUNT-->0, при этом MAX_COUNT зависит от размерности таймера.
Режим совпадения(outcompare) - это когда в регистр OCR записывают MAX_COUNT, счетчик каждый такт сравнивает содержимое регистров OCR и TCNT, при равенстве происходит прерывание.
Режим захвата и сравнения - это когда состояние регистра TCNT сохраняется в регистре ICR по активному фронту ноги ICP, и для сравнения нам надо считывать ICR
Асинхронный режим - это когда источником синхроимпульсов является резонатор, подключенный к ногам TOSC1 и TOSC2
Режим генерации ШИМ - это отдельная тема
Режим подсчета внешних событий - это когда содержимое регистра TCNT увеличивается при...?? Не пойму, можно ли настраивать что бы работали на инкремент или декремент?
|
|
|
|
Сообщений в этой теме
HCHUNTER Какой-то бред... Jan 2 2008, 10:34 DASM Откуда 64 мкс насчитали ? 8e6/1024/256 - 30 Гц. У ... Jan 2 2008, 10:44 HCHUNTER Работаю от кварца, это совершенно точно.
Я такую п... Jan 2 2008, 10:49 DASM там таймер0 - 8 битный, перполнение будет когда 2... Jan 2 2008, 10:52 HCHUNTER а как же мне тогда правильно таймер проинициализир... Jan 2 2008, 11:16 DASM нет, или надо тогда переписывать TCNT0 не нулем в ... Jan 2 2008, 11:20 HCHUNTER Вобщем, сделал как сам же написал выше
TCCR0=0x05;... Jan 2 2008, 11:37 DASM А ну да, у Вас же 16 Мгц, а не 8, что-то зациклилс... Jan 2 2008, 11:38 HCHUNTER Да, конечно. В самой процедуре прерывания я тоже п... Jan 2 2008, 11:49 INT1 Кстати, писать столько нулей в инициализации порто... Jan 2 2008, 19:34 =AVR= Эээ... это по какому такому АНСИ СИ порты "и... Jan 2 2008, 19:44 IgorKossak Цитата(=AVR= @ Jan 2 2008, 21:44) Эээ... ... Jan 2 2008, 20:07 Aesthete Animus Лучше инвертировать по прерыванию таймера ножку по... Jan 2 2008, 20:03 HCHUNTER Цитата(Aesthete Animus @ Jan 2 2008, 23:0... Jan 2 2008, 20:36  SasaVitebsk Цитата(HCHUNTER @ Jan 3 2008, 00:36) Вот ... Jan 2 2008, 21:28  defunct Цитата(HCHUNTER @ Jan 2 2008, 23:36) Ведь... Jan 2 2008, 21:39 HCHUNTER ЦитатаЕсли вам нужно отмерять один "тик... Jan 2 2008, 22:08 =AVR= Как не знает? Даже сразу после того, как ему сказа... Jan 2 2008, 22:13 HCHUNTER э... туплю кажись... м-де... Jan 2 2008, 22:16 Dim_ON Помогите плиз разобраться с таймерами
Необходимо ч... Jan 4 2008, 17:59 Aesthete Animus Цитата(Dim_ON @ Jan 4 2008, 20:59) Помоги... Jan 4 2008, 22:20 zltigo Часть ветки перенесена сюда: http://electronix.ru/... Jan 4 2008, 18:45
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|