Технический форум

Технический форум (http://www.tehnari.ru/)
-   Микропроцессоры (http://www.tehnari.ru/f115/)
-   -   Часы на ATmega-8A (http://www.tehnari.ru/f115/t104392/)

Dima223 23.09.2015 19:18

Часы на ATmega-8A
 
Начал осваивать микроконтроллеры. решил реализовать часы на семисегментном индикаторе. В результате часы отстают на 15сек каждую минуту. Мог увеличить период и подстроить, но шли бы они не совсем точно. Попробовал реализовать используя ассинхронный режим и часовой кварц (пока только Proteus). Результат - снова отставания на 15 сек каждую минуту.
Думаю проблема или в Протеусе или в программе индикации "Prog2"
Знаю что написано коряво (и не смотрите на комменты), но долго думал и так ошибку и не нашел.
Интересный факт, что реализовав часы 3-мя способами остается это отставание.
Подскажите пожалуйста, буду очень благодарен.
Компилятор IAR. Файл протеуса в архиве в папке Prot
"https://yadi.sk/d/pLgsBu4VjGu9t"

Azziop 24.09.2015 01:38

Не понятно, часы реализованы в железе, или только в симуляторе?

grelly 24.09.2015 09:01

Цитата:

TIFR &=~(1<<6); //cbroc flag prerivania
по даташиту флаг сбрасывается логической единицей:
Цитата:

TOV2 is cleared by hardware
when executing the corresponding interrupt Handling Vector. Alternatively, TOV2 is
cleared by writing a logic one to the flag.
кварц какой?

на первый взгляд все правильно

Dima223 24.09.2015 09:32

Цитата:

Сообщение от Azziop (Сообщение 1162956)
Не понятно, часы реализованы в железе, или только в симуляторе?

В симуляторе.

Dima223 24.09.2015 09:34

Цитата:

Сообщение от grelly (Сообщение 1162968)
по даташиту флаг сбрасывается логической единицей:
кварц какой?

на первый взгляд все правильно

Кварц 32768 Гц. Оно и без строки сброса флага так и работало. Я ее потом добавил когда искал проблемы и не помогло.

grelly 24.09.2015 11:33

ну если смотреть по времени симуляции в протеусе все правильно работает. скорее всего это тормоза самого симулятора.

Dima223 24.09.2015 17:20

Цитата:

Сообщение от grelly (Сообщение 1162991)
ну если смотреть по времени симуляции в протеусе все правильно работает. скорее всего это тормоза самого симулятора.

И правда. Почему я туда раньше не посмотрел....
Спасибо огромное.

grelly 24.09.2015 17:57

Цитата:

Сообщение от Dima223 (Сообщение 1163044)
Спасибо огромное.

да незачто) нашел пару ошибок в своем коде пока курил даташит)

Dima223 26.09.2015 14:05

DDRC &=~(1<<0);//button 1
PORTC |=(1<<0);

temp=TESTBIT(PINC,0);
if ((temp==0)&&(temp1==1))
{
hour++;
}
temp1=temp;
Добавил кнопку для часов (ножка PC0). Она работает, т.е. добавляет +1 час
Добавил кнопку для минут (ножка PC1). Грубо говоря та же программа, одно действие, но вот она не работает и все
DDRC &=~(1<<1);//button 2
PORTC |=(1<<1);//

t=TESTBIT(PINC,1);
if ((t==0)&&(t1==1))
{
hour++;
}
t1=t;

Помогите пожалуйста

grelly 26.09.2015 16:35

а симулятора нет? глянь что возвращает TESTBIT(PINC,1); скорее всего вернет 2(а точнее 0b10)


Часовой пояс GMT +4, время: 10:59.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.