Просмотр этой темы:
1 анонимных пользователей
Студент
Зарегистрирован:
19.10.2010 14:49 Сообщений:
4
|
Помогите новичку пожалуйта разобраться с работой таймера. Пытаюсь на 128 atmege выдавать на ножку каждый тик таймера но не получается. Кварц на 16 мегагерц в коде предделитель таймера не использую
в итоге на ножке должен быть шим равный 63 наносекундам, а в итоге максимум чего я добился это 3,2 микросекунды. По расчетам и примерам которые я нашел в описания вроде все правильно делаю. Странное получается то что шим полученный у меня кратен тактированию в 32 килогерца. Хотя часовой кварц у меня отсутствует. Я эти ножки вообще не задействовал. Заранее огромное спасибо за помощь. P.S. (сильно не пинайте, каждый когда то начинает).
Отправлено: 19.10.2010 16:17
|
|
Модератор
Зарегистрирован:
26.01.2010 23:26 Из: Тирасполь
Сообщений:
3926
|
а настройки FUSE -битов и исходный код должна изучать бригада телепатов?
Отправлено: 19.10.2010 16:22
|
|
Студент
Зарегистрирован:
19.10.2010 14:49 Сообщений:
4
|
Использую avreal под линуксом
./avreal32 +mega128 -aa -o0 -p/dev/parport0 -e -w -v -fCKSEL=f,CKOPT=0,WDTON=0,BODEN=0,BLEV=0,BRST=1,BSIZ=0,EESV=1,SUT=2,BLB0=1,BLB1=2 avrTest.hex непосредственно сам текст: /* * main.c * * Created on: 20.10.2010 * Author: root */ #include <avr/eeprom.h> #include <avr/io.h> #include <avr/interrupt.h> #include <limits.h> int tyuio; ISR(TIMER0_OVF_vect) { TCNT0 = 213; if(!tyuio){ PORTC = 0x01; tyuio = 1; } else{ PORTC = 0x00; tyuio = 0; } } int main() { cli(); TCNT0 = 213; TCCR0 = 0x01; TIMSK |= (1<<TOIE0); MCUCR = 0x00; DDRC = 0xFF; sei(); for(;{ asm("wdr" } return 0; }
Отправлено: 20.10.2010 13:38
|
|
Модератор
Зарегистрирован:
26.01.2010 23:26 Из: Тирасполь
Сообщений:
3926
|
Ну маладец! у тебя между входами в прерывание 43 процессорных цикла, он явно не успевает обработать. для таких частот этот режим таймера не используют. Используй CTC с подключенной ногой OCR
Отправлено: 20.10.2010 14:52
|
|
Студент
Зарегистрирован:
19.10.2010 14:49 Сообщений:
4
|
Если можно то по подробнее.
Ничего не понял.
Отправлено: 20.10.2010 15:47
|
|
Абитуриент
Зарегистрирован:
20.10.2010 16:23 Из: Тирасполь
Сообщений:
2
|
Попробуй инициализировать Timer0 так:
TCCR0=0x29; TCNT0=0x7F; OCR0=0x00; А порт PORTB: PORTB=0x00; DDRB=0x10; Как сказал evildesign он у тебя будет в CTC режиме с подключенной ногой OCR, но ШИМ будет на PORTB.4, Такой частоты в твоей реализации тебе не добиться
Отправлено: 20.10.2010 16:37
|
|
Абитуриент
Зарегистрирован:
20.10.2010 16:23 Из: Тирасполь
Сообщений:
2
|
Вернее так:
TCNT0=0x00; OCR0=0x7F; Получишь ШИМ со скважностью 50%
Отправлено: 21.10.2010 1:16
|
|
Студент
Зарегистрирован:
19.10.2010 14:49 Сообщений:
4
|
к сожалению срочно кинули на другую работу
продолжу изыскания завтра. О результатах отпишу.
Отправлено: 25.10.2010 13:18
|
|