Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Вс апр 15, 2012 18:18:14
Практики ради начал делать часы на Тини2313 и писать прошу. Прошивка написана, но даже в протеусе с внешним 8МГц кварцем врет. За 10 минут отстали на 2 секунды. Часы тикают по прерыванию 0 таймера. Делитель таймера=256. Во всех функциях прерывания разрешены. Вывод на ЛСД. Что не так-то? Вот код, связанный с прерыванием:
- Код:
void main(void)
{
asm("sei");
TCNT0=0;
OCR0A=250;
TCCR0B|=(1<<CS02);
TCCR0B&=~((1<<CS01)|(1<<CS00));
TIMSK=1;
}
#pragma vector=TIMER0_COMPA_vect
__interrupt void Timercomp(void)
{
TCNT0=0;
takt++;
if(takt==125)
{
takt=0;
second++;
}
if(second==60)
{
second=0;
minute++;
}
if(minute==60)
{
minute=0;
hours++;
}
Последний раз редактировалось
Pika4u Вс апр 15, 2012 19:48:51, всего редактировалось 1 раз.
Вс апр 15, 2012 18:59:13
Что в Протезе врёт,то это ещё ни о чём не говорит,т.к. Протез симулирует не в реальном времени.В железе тоже врёт?Можно немного поигратса с кондёрами заземляющими кварц.Я всегда старась запускать на максимально возможно частоте,для большей точности временных интервалов.
Вс апр 15, 2012 19:08:24
Я просто нажимал Pause и сверял показания на часах Протеуса и схеме
В железе проверял только работоспособность, точность проверю позже-детали завтра придут.
Вс апр 15, 2012 19:27:47
TCCR0A = (1<<WGM01);//Clear Timer on Compare Match (CTC) mode, автоматом будет TCNT0=0; при достижении TCNT0=OCR0A=250
#pragma vector=TIMER0_COMPA_vect
__interrupt void Timercomp(void)
{
TCNT0=0;// можно будет удалить.
Вс апр 15, 2012 19:32:08
Хм, спасибо за совет. Ща погоняю в Протеусе. А остальные настройки(TCCR0B) надо убирать?
Вс апр 15, 2012 19:33:06
Сам же и отвечу. Не надо.
Вс апр 15, 2012 19:36:57
Ждём испытаний в железе.Я однажды в часы на на пик16ф628 вписал термометр и календарь. В пихнул всё это в Протез запустил и ужаснулся что они отстают от системных. До дописывания термометра и календаря они не отставали,временные интервалы я не менял. Собрал в железе и заметил что они идут точно. Появилась гипотеза,что чем больше кода Протез 'жуёт' тем сильнее тормозит.Допишите туда ещё чегонибуть и отставать будет сильнее.
Вс апр 15, 2012 19:40:50
- Код:
TCCR0B|=(1<<CS02);
TCCR0B&=~((1<<CS01)|(1<<CS00));
TCCR0B=(1<<CS02); //можно просто так
TIMSK =(1<<OCIE0A); //Timer/Counter0 Output Compare Match A Interrupt Enable
Вс апр 15, 2012 19:44:26
Да ведь TIMSK так и выставлен(раз прерывание работает).
- Код:
TIMSK=1;
Вот что у меня. А насколько мне известно, OCIE0A-это и есть 1-ый бит TIMSK.
Вс апр 15, 2012 19:47:55
Не увидел в первом посте..
Вс апр 15, 2012 19:49:20
Добавил. у кого есть ещё идеи по поводу отставания?
Вс апр 15, 2012 20:34:46
нужно выставить OCR0A=249;//с 0.. по 250 получается 251 значений
Пн апр 16, 2012 14:38:59
Хм...Спасибо! Помогло! За 37 минут ни на секунду не отстали!
Пт май 18, 2012 19:52:17
Мяу уважаемые коты! Подскажите плиз такой вопрос: Делаю сейчас часы на тиньке 2313
http://habrahabr.ru/post/38443/ . Побродив по инету обратил внимание на то, что везде в часах на тиньке 2313 стоит обычный кварц, а можно ли поставить именно часовой? Хочу сделать точные часы, а не +/- хз сколько.
Пт май 18, 2012 20:42:34
Cricket2107 писал(а):Мяу уважаемые коты! Подскажите плиз такой вопрос: Делаю сейчас часы на тиньке 2313
http://habrahabr.ru/post/38443/ . Побродив по инету обратил внимание на то, что везде в часах на тиньке 2313 стоит обычный кварц, а можно ли поставить именно часовой? Хочу сделать точные часы, а не +/- хз сколько.
Можно , почему же нельзя . Есть такой генератор у MAXIM DS32KHZ с точностью от +/- 1 сек/год или +/-0.5 сек/год там разберётесь почему . Подаете частоту на вход T1 выбранного Вами таймера и вперёд - пишите прогу. Кстати основной кварц при этом обязан быть на своём месте , не обязательно тот что в ссылке, но быть должен.
Пт май 18, 2012 20:44:15
Cricket2107 писал(а): Побродив по инету обратил внимание на то, что везде в часах на тиньке 2313 стоит обычный кварц, а можно ли поставить именно часовой? Хочу сделать точные часы, а не +/- хз сколько.
вот такие
http://ryaskin65.narod.ru/Project03/Project03.htmlВ устройстве использованы часы реального времени DS1307N
Датчика температуры DS18B20 я не подключал, поэтому показывают только время.
Работают точно.
Пт май 18, 2012 20:49:13
Понятно для начала попробую запустить на обычном на 8 МГц, если точность хода будет отстой переделаю с этим генератором.
Последний раз редактировалось
Cricket2107 Пт май 18, 2012 20:54:09, всего редактировалось 1 раз.
Пт май 18, 2012 20:53:16
Введите програмную корректировку времени, есть часы реального времени со встроенным термокомпенсированным кварцевым резонатором DS3231.
Всеравно, рано или позно отключат питания и время сбросится, а с микросхемой часов на батарейке, будет работать.
- Вложения
-
- DS3231.pdf
- (373.12 KiB) Скачиваний: 656
Вс май 20, 2012 20:47:19
Насчет кварца. Он у тебя 8.000.000 или 8.388.608? Со вторым значительно удобнее.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.