Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.05.2011, 14:30
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Таймеры
Не как не могу разобраться с таймерами .... Надо чтоб с частотой 25000 срабатывало прерывание, больше прерываний в системе нет!!. Кварц 8000000 поидеи делитель на 8 и считам до 40. Но загоняю в протеус ставлю делитель 1024, моргает порт не равномерно.... Уже устал читать про шим который мне не нужен.... И не как понять не могу совпадение А и Б чем они отличакються???? Заранее спасибо.....
Смотрю в дебаггере вроде все ОК, только в TCNT1=0x02, по старту таймера а потом все ок 42.... Попробывать на железе надо..... Скорее всего так протеус обрабатывает... ТОлько вот почему при старте таймера он сразу в прерывание залетает????
ISR (TIMER1_COMPA_vect)
{
TCNT1=0x00;
if(test ==0)
{PORTA = 0XFF;test=1;}
if(test ==1)
{PORTA = 0X0;test=0;}
}
int main(void)
{
/// ***настраиваем порты ввода-вывода
DDRA = 0xFF;
/// ***Настраиваем таймер
TCCR1A = 0x00;
TCCR1B = (0 ‹‹ CS12)|(1 ‹‹ CS11)|(0 ‹‹ CS10)|(1 ‹‹ WGM12); //предделитель clk/8, режим таймера СТС
TCNT1=0x00;
OCR1A=40; // выбор коэффициента деления
TIMSK=(1 ‹‹ OCIE1A); // разрешение прерывания по совпадению
temp=0b00000000; // Присвоение начального значения
asm ("sei"); // Разрешение прерываний
while (1) {}; // Бесконечный цикл
}
Последний раз редактировалось bass1981; 16.05.2011 в 16:10.
|
|
|
Сказали "Спасибо" bass1981
|
|
|
17.05.2011, 07:26
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Таймеры
ISR (TIMER0_OVF_vect)
{
//TCNT1=0x00;
if(test ==0)
{
PORTA = 0XFF;test=1;
TCNT0 = 0xFF-40;return;
}
if(test ==1)
{
PORTA = 0X0;test=0;
TCNT0 = 0xFF-40;return;
}
}
int main(void)
{
DDRA = 0xFF;
//TCCR0 |= _BV(CS01); //Запускаем таймер с пределителем 8
TCCR0 =(0‹‹CS02)|(1‹‹CS01)|(0‹‹CS00);//clk/8
//TCCR0 =(1‹‹CS02)|(0‹‹CS01)|(1‹‹CS00);//clk/8
TIMSK = (1‹‹TOIE0);// Разрешаем прерывание по переполнению
TCNT0 = 0xFF-40;
sei (); // Разрешаем глобальные прерывания МК
// далее бесконечный цикл программы. МК будет спать и ждать прерывания.
while(1)
{
asm("nop");
}
}
Все решено ..... Накосячил в прерывании... тест = 1 и потом сравнение естественно проходит..... Ну блин !!!!! Всем спасибо. Настроил 0 таймер на переполнение.....
|
|
|
Сказали "Спасибо" bass1981
|
|
|
17.05.2011, 07:30
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Ну, во-первых, у вас процедура
Сообщение от bass1981
|
Не как не могу разобраться с таймерами .... Надо чтоб с частотой 25000 срабатывало прерывание, больше прерываний в системе нет!!. Кварц 8000000 поидеи делитель на 8 и считам до 40. Но загоняю в протеус ставлю делитель 1024, моргает порт не равномерно.... Уже устал читать про шим который мне не нужен.... И не как понять не могу совпадение А и Б чем они отличакються???? Заранее спасибо.....
Смотрю в дебаггере вроде все ОК, только в TCNT1=0x02, по старту таймера а потом все ок 42.... Попробывать на железе надо..... Скорее всего так протеус обрабатывает... ТОлько вот почему при старте таймера он сразу в прерывание залетает????
ISR (TIMER1_COMPA_vect)
{
TCNT1=0x00;
if(test ==0)
{PORTA = 0XFF;test=1;}
if(test ==1)
{PORTA = 0X0;test=0;}
}
|
обработки прерываний сама по себе некорректно написана. И потом, зачем вы сбрасываете TCNT1 в ноль, если у вас установлен режим CTC?
|
|
|
|
17.05.2011, 07:33
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Ну, а как же с режимом
Сообщение от bass1981
|
Все решено ..... Накосячил в прерывании... тест = 1 и потом сравнение естественно проходит..... Ну блин !!!!! Всем спасибо. Настроил 0 таймер на переполнение.....
|
по совпадению? Грабли-то остались? Или нет?
|
|
|
|
17.05.2011, 15:08
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Ну, а как же с режимом
Сообщение от Bill
|
по совпадению? Грабли-то остались? Или нет?
|
Заработало !!!!! В протеусе ок..... Я во втором посте ответил выложив рабочий код......Только с дебаггером разобрался мля... Ну заодно научился пользоваться дебаггером..... Я просто ранше прожил на 8051..... Там был старый дебаггер и какойто программатор сам паял..... Прошло года 4-5, сейчас купил стк-500 и вспоминаю все.... Спасибо что откликнулись....
|
|
|
Сказали "Спасибо" bass1981
|
|
|
17.05.2011, 15:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Таймеры
Код:
|
ISR (TIMER0_OVF_vect)
{
PORTA = ~PORTA;
TCNT0 += 0xFF-40;
} |
Весь обработчик.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо kison за это сообщение:
|
|
|
17.05.2011, 15:43
|
|
Гражданин KAZUS.RU
Регистрация: 01.09.2007
Сообщений: 898
Сказал спасибо: 278
Сказали Спасибо 57 раз(а) в 54 сообщении(ях)
|
Re: Таймеры
Сообщение от kison
|
Код:
|
ISR (TIMER0_OVF_vect)
{
PORTA = ~PORTA;
TCNT0 += 0xFF-40;
} |
Весь обработчик.
|
Спасибо, что то про инвентирование смекалки не хватило....
|
|
|
Сказали "Спасибо" bass1981
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:33.
|
|