roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 01:43

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: работа с таймером
СообщениеДобавлено: 14 фев 2012, 16:04 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
Добрый день!
Подскажите пожалуста как заставить таймер тикать 1 секунду и делать какое то действие после этого. Интересует формула расчета.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с таймером
СообщениеДобавлено: 14 фев 2012, 16:36 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Ну например.
16Мгц частота кварца
16-ти битный таймер.

Максимальный делитель в авр, если я правильно помню - 1024.
Т.о. самое медленное таймер может тикать 16000000/1024 = 15625 Гц - вот с такой частотой.

Что бы отсчитать 1 секунду нужно отсчитать соотв 15625 тиков. Т.о. если у нас прерывание по переполнению, то ставим начальное значение таймера в 65535-15625 = 49910 = 0xC2F6 в шестнадцатеричном представлении.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с таймером
СообщениеДобавлено: 14 фев 2012, 17:58 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
Что то слишком легко, но я попробую.
А от режима таймера не зависит формула расчета времени?
ПРосто все пишут по своему этот расчет :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с таймером
СообщениеДобавлено: 14 фев 2012, 19:30 
Не в сети

Зарегистрирован: 09 авг 2011, 17:15
Сообщения: 104
Откуда: Волжский
как удобнее так и пишут, можно на совпадение повесить, будет другая формула. Главное - принцип расчета от частоты кварца и предделителя таймера. Можно часовой кварц повесить, если сильно захотеть, тогда другая арифметика будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с таймером
СообщениеДобавлено: 21 фев 2012, 07:44 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
Привет друзья!
Я тут собираю кодовый замок и у меня возник вопрос, который я что то не могу решить.
Я ввожу данные в массив и когда он равен 4 символам я начинаю его проверять. Как вложить символы я понял, а вот как и прочитать не могу понять.
я тут просто накидал пример, тут все понятно с ним, я его для наглядности написал:
Когда буффер = 4 символам начинаю его читать, я знаю что его нужно читать в цикле типа for, а вот как не знаю, помогите пожалуйста!
Код:
ISR(USART_RXC_vect) {
unsigned char symbol = UDR;
unsigned char buffer[4];
uint8_t i = 0;
if (symbol=='q') {buffer[i]=symbol; i++;}
else if (symbol == 'w') {buffer[i]=symbol; i++;}
else if (symbol == 'e') {buffer[i]=symbol; i++;}
else if (symbol == 'r') {buffer[i]=symbol; i++;}
else if (i==4) {ReadBuffer();}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с таймером
СообщениеДобавлено: 21 фев 2012, 11:28 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
имхо
лучше читать в глобальный буфер ... а в основном цикле проверять правильность данных.... плюс в вашем коде i увеличится только в случае UDR == 'q' в других случаях будет всегда 0....

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с таймером
СообщениеДобавлено: 24 фев 2012, 19:44 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
Привет всем !
Я пытаюсь запустить таймер0 на меге8 с частотой 8МГц, что то не получается. пересмотрел все, вроде всё верно... подскажите пожалуйста где ошибка. ПО идее когда проходит 32мс загорается светодиод... а он не хочет гореть:(
Код:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define CS00 0
#define CS02 2
#define TOIE0 0
#define TOV0 0
// Так как таймер0 тикает до значения 255, то >255 выставить нельзя
// Я выставляю значение 0xFA  равное 32мс.
// При подсчете до 0xFA вызывается прерывание и загорается светодиод
ISR(TIM0_OVF_vect) {
TCNT0=0xFA;
PORTD=0xff;
}
void init_timer0() {
TCCR0|=(1<<CS02)|(1<<CS00);
TIMSK|=(1<<TOIE0);
TIFR|=(1<<TOV0);
SREG|=(1<<7);
TCNT0=0xFA;
}

int main (void) {
init_timer0();
DDRD=0xff;
PORTD=0x00;
sei();
while(1) {}
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO