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

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

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

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

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

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

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

 
Опции темы
Непрочитано 27.03.2010, 21:35  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Отработка секундного импульса на AVR

Друзья!

изучая таймеры решил отработать программу для получения секундных импульсов с целью дальнейшего ее использования при надобности.
Прошолся по форумам.
Взял Atmega 8 прицепил кварц 4096 кгц и провел казалось бы ординарные действия.
Использую TMR0 c предварительным делителем на 256 ,запускаю прерыване по переполнению,
записав в таймере число 0х38 т.е. 56 получаю преполнение через каждые 256-56=200 тактов и далее запускаю счетчик на 80.
и того получается 4096000/256/200/80=1гц
В PROTEUS к порту "В" подлкючил семисегментнй индикатор и наблюдал за секундным разрядом и сравнил его с секундами точного времени по интернету.
Так вот интернетовское время убежало вперед примерно на 2секунд в течение 2 минут.
В общем дает разброс .Только путем подбора коэффициентов удалось приблизится к секундам интернета.
Но Я не уверен правильно ли Я поступаю. Кто виноват; Я, PROTEUS или internet?
буду очень благодарен, если поможете разобратся в чем ошибка, почему не получается как у людей ,как оно должно быть? Вроде делаю как пишут на форумах.
Заранее благодарен.
Реклама:
begun вне форума  
Непрочитано 27.03.2010, 21:39  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

*телепатия включена
ошибка в 35 строчке кода
spballiance вне форума  
Непрочитано 27.03.2010, 21:57  
AndreiVV
Гражданин KAZUS.RU
 
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
AndreiVV на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

очень редко симулятор работает в реалтайме, а вы сравниваете его с часами из интернета
AndreiVV вне форума  
Непрочитано 27.03.2010, 22:05  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

Сообщение от begun Посмотреть сообщение
Использую TMR0 c предварительным делителем на 256 ,запускаю прерыване по переполнению,
записав в таймере число 0х38 т.е. 56 получаю преполнение через каждые 256-56=200 тактов и далее запускаю счетчик на 80.
Чего-то не то вы думаете Код в студию
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
alexgap вне форума  
Непрочитано 27.03.2010, 22:06  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

к сожалению на реально собранном макете было обсолютно тоже самое
Мне бы удоставерится от знатоков что мои рассуждения по поводу коэффицинтов деления правильные.
Спасибо.
begun вне форума  
Непрочитано 27.03.2010, 22:07  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

Сообщение от begun Посмотреть сообщение
Мне бы удоставерится от знатоков что мои рассуждения по поводу коэффицинтов деления правильные
Неправильные
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
alexgap вне форума  
Непрочитано 27.03.2010, 22:12  
begun
Гражданин KAZUS.RU
 
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
begun на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

Вот и код, конечно извеняюсь за ,может неоптимальность

/*Chip type : ATmega8
Program type : Application
Clock frequency : 4,096000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/

#include ‹mega8.h›
#include ‹delay.h›
char a;
char b;

char x;
void h(void) //ôóåêöèÿ äëÿ 7 ñåãìåíò èíäèêàòîðà
{
if(x==0)
PORTD=0x40;
if(x==1)
PORTD=0x79;
if(x==2)
PORTD=0x24;
if(x==3)
PORTD=0x30;
if(x==4)
PORTD=0x19;
if(x==5)
PORTD=0x12;
if(x==6)
PORTD=0x02;
if(x==7)
PORTD=0x78;
if(x==
PORTD=0x00;
if(x==9)
PORTD=0x10;
};

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

TCNT0=0xB0;
//----------------------------------

a++;
if(a==0x0A)
{
b++;
a=0;

};
//----------------------------------
if(b==0x14)
{


h();
x++;
a=0;
b=0;
if(x==0x0A)
{
a=0;
b=0;

x=0;

};
};




}


void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0xFF;
DDRB=0x00;

// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x04;
DDRC=0x7F;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x04;
TCNT0=0xB0;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{


};
}
begun вне форума  
Непрочитано 27.03.2010, 22:18  
vovaf
Частый гость
 
Регистрация: 08.11.2006
Сообщений: 13
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
vovaf на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

Использовав прерывание по переполнению и записью в счетчик начального значения Вы никогда не получите точного хода часов, смотрите даташит по вопросу вхождения в прерывания. В зависимости от выполнения текущей команды время вхождения может быть разным.
Для Вашей задачи предпочтительней взять часовой кварц на таймер2, тогда не придется устанавливать начальное значение счетчика, и работать можно как по прерыванию, так и по опросу флага о переполнении
vovaf вне форума  
Непрочитано 27.03.2010, 22:20  
spballiance
Вид на жительство
 
Регистрация: 13.02.2010
Сообщений: 372
Сказал спасибо: 12
Сказали Спасибо 15 раз(а) в 12 сообщении(ях)
spballiance на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

таймер 2 в асинхронном режиме и кварц на него 32КГц
иначе долбать на асме для точного подсчета всех инструкций
spballiance вне форума  
Непрочитано 27.03.2010, 22:33  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: отработка секундного импульса на AVR

Сообщение от spballiance Посмотреть сообщение
иначе долбать на асме для точного подсчета всех инструкций
В реальной железке еще и точно выводить частоту кварца
_guardianangel вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AVR JTAGICE MKII - проблемы firmware... Luxurious AVR 25 20.10.2014 10:50
На WinAVR + AVR Studio c CVAVR Vetal-soft Embedd С 87 03.03.2013 20:31


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


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