Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 26.11.2010, 22:53  
Dorgx7
Частый гость
 
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dorgx7 на пути к лучшему
По умолчанию Прошу помощи в освоении AVR под CV

Приветствую всех
начал разбираться с ATmega16-16pu кварц 16МГц. рушил сделать часики на 7ми сигментниках.
У меня возник вопрос как лучше как лучше считать время? сейчас использую вот такой код :
//////////////////////////////////////////////////////////
#include ‹mega16.h›
#include ‹delay.h›
interrupt [TIM0_COMP] void timer0_ovf_isr(void)
{
TCNT0=0x00;
//код прерывания
}

void main(void)
{
/* Reset WDT*/
#asm("wdr")
/* Turn off WDT */
WDTCR = 0x00;

TCCR0=0x03;
TCNT0=0x00;
OCR0=250;
TIMSK=0x03;
// Global enable interrupts
#asm("sei")
while (1)
{
//основная програма

}
}
//////////////////////////////////////////////////////////
часы заметно отстают в чем проблема ?
Заранее всем благодарен.
Реклама:
Dorgx7 вне форума  
Непрочитано 26.11.2010, 23:04  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Что бы таймер имел период в 250 тактов в OCR нужно грузить 250-1=249.
kison вне форума  
Непрочитано 26.11.2010, 23:05  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Часы наверно лучше на часовом кварце делать.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 27.11.2010, 00:40  
CodeNameHawk
Вид на жительство
 
Регистрация: 21.10.2009
Сообщений: 343
Сказал спасибо: 180
Сказали Спасибо 64 раз(а) в 56 сообщении(ях)
CodeNameHawk на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Я считаю секунды так
(Проц атмега16, кварц 11.0592 MHz)

Код:
unsigned int        iloscIteruptowTimer0;
unsigned long int time;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
 if (++iloscIteruptowTimer0 › 673) // Через каждые 673 срабатывания таймера увеличиваем  переменную  time на одну секунду
 {           
    iloscIteruptowTimer0 = 0;            // сброс    
    if (++time › 86399) time = 0;     // в сутках  24 h * 60 min * 60 sec = 86400 секунд, а -1 так как считаем от нуля
    for(i=0; i‹precision; i++)          // корректировка точности хода часов, "precision" хранится в еепром
    { 
       delay_us(20);
    }
 }  
}
Код:
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 172.800 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x03;
TCNT0=0x00;
OCR0=0x00;
После подбора значения "precision" часы за сутки идут секунда в секунду с часами компа.

Поправив, как писал kison, OCR0=249; ваш код тоже должен работать, но не ясно что вы делаете в прерывании и что в основной программе.

Последний раз редактировалось CodeNameHawk; 27.11.2010 в 00:58.
CodeNameHawk вне форума  
Непрочитано 27.11.2010, 11:31  
Dorgx7
Частый гость
 
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dorgx7 на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

"avr123-nm-ru" Да я конечно согласен что часы лучше делать на часовом кварце, но это если нужны просто часы.Если это устройство в котором необходима скорость выполнения и при этом нужны часы реального времени ?
вот полный код программы:Копия int01.txt.
Возник вопрос продолжает ли считать счетчик вовремя выполнения прерывания?
и как проверить точность счета?
//////////////////////////////
interrupt [TIM0_COMP] void timer0_ovf_isr(void)
{
TCNT0=0x00;
mS++;
if (mS==1000){s++;mS=0;};
if (s›9){Ds++;s=0;};
if (Ds›5){m++;Ds=0;};
if (m›9){Dm++;m=0;};
if (Dm›5){h++;Dm=0;};
if (h›9){Dh++;h=0;};
if (Dh›1){if (h›3){Dh=0;h=0;};};
}
/////////////////////////////

Последний раз редактировалось Dorgx7; 27.11.2010 в 11:35.
Dorgx7 вне форума  
Непрочитано 27.11.2010, 12:05  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

А можно сделать часики используя таймер_2 в асинхронном режиме,подключив к выводам TOSC1-TOSC2 часовой кварц.
Vov123 вне форума  
Непрочитано 27.11.2010, 13:37  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Сообщение от Dorgx7 Посмотреть сообщение
"avr123-nm-ru" Да я конечно согласен что часы лучше делать на часовом кварце, но это если нужны просто часы.Если это устройство в котором необходима скорость выполнения и при этом нужны часы реального времени ?
вот полный код программы:Вложение 15169.
Возник вопрос продолжает ли считать счетчик вовремя выполнения прерывания?
и как проверить точность счета?
//////////////////////////////
interrupt [TIM0_COMP] void timer0_ovf_isr(void)
{
TCNT0=0x00;
mS++;
if (mS==1000){s++;mS=0;};
if (s›9){Ds++;s=0;};
if (Ds›5){m++;Ds=0;};
if (m›9){Dm++;m=0;};
if (Dm›5){h++;Dm=0;};
if (h›9){Dh++;h=0;};
if (Dh›1){if (h›3){Dh=0;h=0;};};
}
/////////////////////////////
Уточнимся. Счётчик ЧЕГО продолжает считать? Счетчик таймера? Раз таймер не останавливают, значит считает.
Счетчик часов/минут/секунд лучше организовать на трех байтах.
Код:
if( ++ms == 1000){ ms = 0;
 if( ++sec == 59 ){  sec = 0;
  if( ++min == 59 ){  min = 0;
    if( ++hour == 23 ) hour = 0;
   }
  }
}
В теле программы данные для вывода легко преобразуются в ASCII:
Код:
time[0] = (hour / 10) + 30h;
time[1] = (hour % 10) + 30h;
time[2] = (min / 10) + 30h;
time[3] = (min % 10) + 30h;
time[4] = (sec / 10) + 30h;
time[5] = (sec % 10) + 30h;
или если нужно в дальнейшем перекодировать в семисегментный код по заданному массиву перекодировки recode[]:
Код:
time[0] = recode[(hour / 10)];
time[1] = recode[(hour % 10)];
time[2] = recode[(min / 10)];
time[3] = recode[(min % 10)];
time[4] = recode[(sec / 10)];
time[5] = recode[(sec % 10)];
Не рекомендую без особой надобности выкладывать тексты программ, в которых Вы запутались. Мало кто захочет расковыривать Ваши ошибки. Лучше задавайте конкретные вопросы по фрагментам, скорее получите ответ, и сами скорее овладеете "правописанием" программ.
А то получается по принципу: "Вот я наваял, а оно не работает. Хочу, чтобы работало!"
Успехов!
ut1wpr вне форума  
Сказали "Спасибо" ut1wpr
Dorgx7 (28.11.2010)
Непрочитано 27.11.2010, 14:10  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Сообщение от ut1wpr Посмотреть сообщение
Код:
if( ++ms == 1000){ ms = 0;
 if( ++sec == 59 ){  sec = 0;
  if( ++min == 59 ){  min = 0;
    if( ++hour == 23 ) hour = 0;
   }
  }
}
этот кусок ИМХО лучше так:
Код:
if( ++ms › 999){ ms = 0;
 if( ++sec › 59 ){  sec = 0;
  if( ++min › 59 ){  min = 0;
    if( ++hour › 23 ) hour = 0;
   }
  }
}
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Непрочитано 27.11.2010, 17:15  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Сообщение от picavr Посмотреть сообщение
этот кусок ИМХО лучше так:
Код:
if( ++ms › 999){ ms = 0;
 if( ++sec › 59 ){  sec = 0;
  if( ++min › 59 ){  min = 0;
    if( ++hour › 23 ) hour = 0;
   }
  }
}
Безусловно, так, принимая во внимание мою ошибку Сравнивать надо было с 60 и 24. Описка...
ut1wpr вне форума  
Непрочитано 28.11.2010, 08:20  
Dorgx7
Частый гость
 
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dorgx7 на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

ut1wpr, большое спасибо ваш код действительно намного легче читается да и по объему меньше.
Теперь вторая часть программы динамический вывод на 7сегментные индикаторы, как это правильно делается?
Dorgx7 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Прошу помощи с Металлоискателем korwin757 Поиск схем. Делимся схемами 16 22.11.2010 21:13
Свой планировщик для IAR под AVR Developer_ Микроконтроллеры, АЦП, память и т.д 3 16.07.2010 00:56
GSM реле (управлением звонком) прошу помощи Serjik10 Автоматика и аппаратура связи 7 28.02.2010 00:10


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot