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

Таймер В Atmega8 Или 16


svip

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

Приветю.Вот не могу понять что мне записывать В TCCR0 если мне нужна задержка 1 минуту?

Если не сложно напишите пожалуйста всё формулы для вычесления этих значений,и что куда записывать.У меня частота 12000000

001 - частота кварца - 12 000 000 герц / 256 = 46875 герц

010 - частота кварца/8 = 1500000 / 256 = 5859,375 герц

011 - частота кварца/64 = 187500 / 256= 732,421875 герц

100 - частота кварца/256 =46875 / 256 =183,10546875 герц

101 - частота кварца/1024 = 11718,75 / 256= 45,7763671875 герц

если записываем TCCR0=0b00000100; то получаем тиканье с частотой ~183 герца

тебе нужно 60 секунд -

183*60=10980 тика подождать

получаем

int p=0;

..........................

TCCR0=0b00000100;

.........................

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

if (p==10980)

{

// тут делаешь что тебе нужно и получаешь выполнение 1 раз за минуту

p=0;

}else p++;

}

P.S. но так можно расчитать под любую из деленных частот камня.

Удачи.

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

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

Спасибиже тебе огромное!!!Я понял как єто делать,теперь хочу сделать так чтоб таймер включался по нажатию на кнопку

Предполагаю что нужно делать так

Как я понял то здесь TIMSK=0x01; включается таймер PIND.4---кнопка

Значит я делаю вот так TIMSK=0x00;

А потом в теле пишу if(PIND.4==1)

{TIMSK=0x01;//вкл таймер}

Ещё есть предположение что нужно сделать переменную unsigned char v=0;

И делать такой код:

if(PIND.4==1)&&(v==0)

{TIMSK=0x01;//вкл таймер

v=1 }

Только чтото у меня не работает <_<

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

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

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

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

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

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

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

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

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

с таймерами разобрался, за что огромное Вам спасибо.

Может кто посоветует какую нибуть книжку (скачать) по программированию avr на си???

Специально для Вас. Очень неплохая книжка с массой примеров кода на С. Выложил тут: http://slil.ru/25000746

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

  • 1 месяц спустя...

Не могу разобраться ПОМОГИТЕ. юзаю 16 битный таймер в атмега 16. кварц 4 мегагерца

у меня 100 значений синусоиды и по каждому прерыванию таймера выдается одно значение.

нужно получить четыре синусоиды с частотой 0,05Hz 0,08Hz 0,12Hz 0,2Hz

0,05Hz - получил нормально (период 20 секунд) а с остальными проблема период увеличивается а не уменьшается.

расчитываю так:

Тактовая частота нашего контроллера (частота кварца): 4 МГц. Его период: 1/4000000 = 250 нс.

Максимальное значение таймера: 2^16 = 65535

250 нС * 65536 = 16,38 мс (маловато будет)

А если делить частоту кварца на 64 то получим 16,38мс*64=1,048с - то что надо. -> TCCR1B = 0b00000011 (TCCR1B=0x03)

период 250 нс * 64 = 16 мкс.

0,2 герца /16=12500имп 65535имп-12500имп=53035имп=CF2B TCNT1H = 0xCF TCNT1L = 0x2B

0,125 герца /16=7812имп 65535имп-7812имп=57723имп=E17B TCNT1H = 0xE1 TCNT1L = 0x7B

0,083 герца /16=5187имп 65535имп-5187имп=60348имп=EBBC TCNT1H = 0xEB TCNT1L = 0xBC

0,05 герца /16=3125имп 65535имп-3125имп=62410имп=F3CA TCNT1H = 0xF3 TCNT1L = 0xCA

вот кусок кода прошивки

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{ 
TCNT1H = 0xF3; 
TCNT1L = 0x7F; 

if (i>(len_data-2)) {i=0;}
koef=1; // сделал для настройки (амплитудную модуляцию убрал пока)
PORTD=((data[i]-a_center)/koef)+a_center;
i++;

if (k==(100))  // 
{   

 PORTB.3=~PORTB.3;  //это для мигания светодиода, чтобы можно было посчитать период
if (t==1){koef=20;}
if (t==2){koef=14;}
if (t==3){koef=8;}
if (t==4){koef=5;}
if (t==5){koef=3;}
if (t==6){koef=2;}	  


if (t==(7+(dlit*12))){koef=2;}	  
if (t==(8+(dlit*12))){koef=3;}	  
if (t==(9+(dlit*12))){koef=4;}
if (t==(10+(dlit*12))){koef=5;}
if (t==(11+(dlit*12))){koef=6;}
if (t==(12+(dlit*12))){koef=7;}
if (t==(13+(dlit*12))){koef=8;}
if (t==(14+(dlit*12))){koef=9;}
if (t==(15+(dlit*12))){koef=12;}
if (t==(16+(dlit*12))){koef=15;}
if (t==(17+(dlit*12))){koef=16;}
if (t==(18+(dlit*12))){koef=20;}

if (t==(18+(dlit*12)+(pause*12))) {t=1;} 

t++;		
k=0;
 }else k++;   

}

Что я делаю не так???

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

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

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

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

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

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

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

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

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

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

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