Перейти к содержанию

Расчет Таймера Timer0 В Attiny13 - Счетчик Секунд


kalexi

Рекомендуемые сообщения

Нужно считать секунды в attiny13, что-то не разберусь.

Работать должен от внутреннего 1МГц генератора.

Работать будет по 10ч. Разброс к концу работы в ~15мин приемлем.

Считаю так:

Частота: 1МГц

Предделитель = 8

Частота прерываний = 1МГц / 8 = 125кГц

Значит: OCR0A = 0x7D;

Код:

interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
 TCNT0=0x00;
 TIMER++;
}
//***
TCCR0A=0x00; 
TCCR0B=0x01;
TCNT0=0x00;  
OCR0A=0x7D;  
OCR0B=0x0;  

GIMSK=0x00;  
MCUCR=0x00; 

TIMSK0=0x04;

ACSR=0x80;
ADCSRB=0x00;
#asm("sei")
//***
while (1)
 {
   if (TIMER > 10000) PORTB.4 = 1;
 };

В результате существенная ошибка, через 20 сек - 3сек.

Изменено пользователем kalexi
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

TCCR0B=0x01;

Предделения нет, т.е. таймер тактируется от 1 МГц.

Изменено пользователем Zer

Пока в груди моей бьётся мотор, надежда есть на чистый бензин...

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Частота прерываний = 1МГц / 8 = 125кГц
А Вы не берёте в расчёт то, что таймеру надо ещё считать ? Т.е. частота 125 Кгц это не частота прерываний, а частота тактирования таймера !
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

И потом, кто в прерывании контекст сохранять будет?

И процедурку проверки "if (TIMER > 10000) PORTB.4 = 1;" надо вставить в прерывание.

как объявлен "TIMER" ?

Таймер нулевой - 8-ми битный а значит прерывание возникать будет с частотой 1Мгц / 8 / 256 = 488 Гц (примерно).

значение счетчика надо ограничивать, если по-хорошему.

т.е. в прерывании надо сделать так: if (TIMER > 10000) PORTB.4 = 1 else TIMER++

Так же можно вообще избавится от прерываний! Просто в бесконечном цикле проверять бит прерывания от таймера - если оно установлено, то прокрутить алгоритм приращения счетчика и проверки его значения а затем сбросить признак прерывания.

А вообще, если это единственная функция контролелра - стоит подумать не сделать ли ЭТО на обычных счетчиках? две 561ИЕ10 и получаем 16-битный делитель, или использовать 512ПС1 - это тоже делитель специально для таймеров, при помощи него получают секундные импульсы но понизив частоту задающего генератора и выставив максимальный коэфициент деления можно получить временной интервал порядка 20 минут, дополнить 561ИЕ10 - получаем многие часы...

Так же можно приспособить 561ИЕ12, 561ИЕ18 ...

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Таймер нулевой - 8-ми битный а значит прерывание возникать будет с частотой 1Мгц / 8 / 256 = 488 Гц (примерно).

Я тоже так сперва подумал... Обратите внимание на источник прерывания. Если бы по TIM0_OVF, то было-бы всё верно, но настраивать пришлось бы иначе.

Пока в груди моей бьётся мотор, надежда есть на чистый бензин...

Ссылка на комментарий
Поделиться на другие сайты

Хм, и правда... а какой смысл? Только сложностей добавится... ведь пока в прерывании обнулишь таймер, пройдет некоторое время - уже погрешность...

Да и вообще, зачем тут такая точность - достаточно считать переполнения таймера, досчитываешь до 488 - это будет секундный интервал, а дальше можно наращивать счетчики каскадно, или одним двоичным(что менее наглядно).

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Благодарю за ответы, щас в протеусе усе работает нормально, но как стал прошивать МК, появилась проблема. Повидимому внутренний тактовый генератор работает не на той частоте. Даже pause_ms(10 000) дает не 10 сек, а около 1-2сек.

Как должны быть установлены фьюзы для него, чтобы delay_ms(1000) делала задержку в 1сек? Что-то в даташите не понял((

На данный момент настроено так:

post-91660-0-15124000-1310472775_thumb.gif

Ссылка на комментарий
Поделиться на другие сайты

Ты когда пишешь программу там задается константа/директива тактовой частоты процессора, по которой корректируются все задержки. Вот её надо крутить! Обычно это не то что задается в настройках проекта, хотя бывает по-всякому.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...