ИС-пытатель писал(а):
Ну, если фузы выставили правильно, то у Вас получается, что задержка реализует частоту 7,372800 MHz / 1024 (коэффициент деления таймера) / 1 (значение переменной Tim, с которой сравниваете) = 7200 герц. А так как у Вас используются 2 задержки для 1 цикла, то результирующая частота = 7200 / 2 = 3600 Гц. Уменьшайте коэффициент деления таймера и подбирайте Tim нужную частоту
С delay_ms не интересно.)) Хотелось именно с таймером попробовать. А вот как правильно предделитель настроить я и не понял. Собственно о том и вопрос был. Фьюзы хазамы в прикреплении. спс
В даташите смотрите. )) Обычно Т2 - асинхронный (3-е исполнение), а Т0 - исполнения 1 или 2. 1 - урезанное исполнение, таймер может работать только в режиме Normal. А 2 исполнение - со вкусностями.
Столкнулся с одной непоняткой при отладке с помощью JTAG ICE.Програмка такая записать значение TCNT1H и 1L и вывести на экран.
TCNT1H=0;
TCNT1L=0;
_delay_us(1000);
f=TCNT1H;
l=TCNT1L;
x=( f<<8 )+l;
LCD_Goto(0,1);
vivod_zifer(x);
Смотрел в отладке не выполняется f=TCNT1H (asm IN r16,0x2d пишу в IARe) Что интересное TCNT1L записывается в регистр, а TCNT1H нет.В отладке Avr Simulator все идет.Еще заметил если записать сверху TCNT1H=1; то и в f пойдет 1. В чем причина подскажите.
Freerider как вы круто обучаетесь) отладчик да на иаре)))
Для выполнения цикла записи 16-битного регистра первым должен
быть загружен старший байт значения, который помещается в регистр
TEMP. При последующей записи младшего байта он объединяется с
содержимым регистра TEMP, и оба байта одновременно (в одном и том же
такте) записываются в 16-битный регистр.
Если требуется изменить
несколько 16-битных регистров таймера/счетчика, а старшие байты всех
записываемых значений одинаковы, то загрузку старшего байта достаточно
выполнить только один раз.
Для выполнения цикла чтения 16-битного регистра первым должен
быть прочитан младший байт. При его чтении содержимое старшего байта
помещается в регистр TEMP. При последующем чтении старшего байта
возвращается значение, сохраненное в регистре TEMP. Исключение
составляют только регистры сравнения OCR/7A/B/C, при чтении которых
регистр TEMP не задействуется.
Например если чип работает на частоте 8МГц и мне необходима частота ШИМа 25Кгц.
То можно настроить 16 битный таймер (Timer 1) чтоб он тикал до 320 и потом таймер сбрасывался ?
Поскольку у Atmega 48 два регистра сравнения на каждый таймер то первый регистр сравнения ставим 320, а второй будет принимать динамические значения от 0 до 320. И он будет связан с выходом OC1B. Таким образом ШИМ будет от 0 до 320 по дискретизации и частота будет 25КГц.
По мне, у T1 mega48 есть такой режим, описанный в DS.
FAST_PWM_48.GIF
Замечу, что работа без защитных интервалов сопряжена с непреодолимыми глюками. Т.е. задавать значения сравнения 0 и 320 можно, но работать будет некорректно.
Что то не понимаю в какие регистры что я должен написать?
Конечно есть и другое решение проблемы запустить ШИМ на первом таймере в режиме 9 бит и часто микроконтролера 12,8 Мегагерц установить, но тогда нужно ставить кристал.
Добрый день! Столкнулся с проблемой: таймер не выходит на прерывание.
Написал такой код для работы с таймером (atmega 8, avr studio 6.2):
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
int i;
TCCR1B = (0<<CS12)|(0<<CS11)|(1<<CS10);
TIFR = (1<<TOV1);
TIMSK |= (1<<TOIE1); // разрешить прерывание по переполнению таймера счетчика
TCNT1 = 65500;
sei();
while(1)
}
В файле Disassembly в ассемблерном коде вижу запрет на глобальные прерывания, хотя я в коде его не ставил. Возможно я что-то не так прописал в директивах препроцессора.
Пожалуйста, помогите уже два дня с этим мучаюсь.