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

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

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

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

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

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

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

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

Сообщение от Dorgx7 Посмотреть сообщение
alexgap,если я убираю TCNT0=0x00 из тела прерывания проект полностью весит
Вы исходно запутались с таймером.
Ваш код инициализации:
Код:
TCCR0=0x03;
TCNT0=0x00;
OCR0=249;
TIMSK=0x03;
Первая строчка говорит, что вы будете работать с таймером в normal mode и К прескалера выбрали CLK/64.
И тут же в третьей строчке определяете значения регистра сравнения. Но он не будет работать, вы выбрали normal mode. Возможно, вы хотели mode CTC? Тогда первая строчка будет:
Код:
TCCR0 = 0x0B
Последняя строчка вообще никуда не годится. Вы разрешили одновременно ДВА прерывания! По переполнению таймера и по совпадению регистра сравнения. Уж если вы решили реагировать на совпадение, то строка должна выглядеть так:
Код:
TIMSK = 0x02;
Да и процедура обслуживания прерывания у вас применена по вектору переполнения. Уж не знаю, что вы и хотите. В настройках одно, в работе другое, а вектор опять не такой. Трудно понять, особенно если не знать частоту тактировки МК. Да мне оно особенно и не нужно. Для начала причешите мысли и программу. И не забудьте из тела обработчика (предварительно правильно назвав имя вектора) выбросить сброс счетчика, он лишний. mode CTC - clear on compare match - (очистка при достижении совпадения) сделает это сама.
С карндашом и бумагой просчитайте все константы настройки таймера, определите моду, определите вектор под эту моду и все получится.
Ну, а по поводу динамической индикации (попутно) замечу, что реализовывать ее в теле основной программы - моветон. Для этого вам надо организовать еще одно прерывание, специально под рефрешинг.
Успехов.
Реклама:
ut1wpr вне форума  
Непрочитано 01.12.2010, 02:14  
Dorgx7
Частый гость
 
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dorgx7 на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Вот перечитал даташит и переписал настройку таймера и прерывания:
/************************************************** ***
Chip type : ATmega16
Clock frequency : 16,000000 MHz
************************************************** ***/

#include ‹mega16.h›
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
PORTA ^=(1‹‹0) ;
}

void main(void)
{
DDRA=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCNT0=0x00;
OCR0=0xF9;
TCCR0=0x0B;

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

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

while (1)
{
// Place your code here

};
}
при остановке на строке "PORTA ^=(1‹‹0)";в proteus`е выдает время выполнения от 0.99994 до 1,00010

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

Сообщение от Dorgx7 Посмотреть сообщение
Подскажите насколько я правильно понял даташит и пойдет ли этот код для часов ?
Подойдет, вот только это всего лишь временной интервал. Чтоб получить НОРМАЛЬНЫЕ часы нужна еще индикация хоть какая нибудь, собственно часы и дата, процедуры установки времени и разные фенечки типа будильника. Так что начало как бы есть, осталось всего ничего - еще процентов 98 кода дописать
kison вне форума  
Непрочитано 01.12.2010, 09:50  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Сообщение от kison Посмотреть сообщение
Подойдет, вот только это всего лишь временной интервал. Чтоб получить НОРМАЛЬНЫЕ часы нужна еще индикация хоть какая нибудь, собственно часы и дата, процедуры установки времени и разные фенечки типа будильника. Так что начало как бы есть, осталось всего ничего - еще процентов 98 кода дописать
Слушайте kison-а, он мудер!
Вы сварганили ядро, теперь надо в его "заполнить". Вставляйте в тело обработчика счетчик единиц времени.
И готовьте второе прерывание - под динамическую индикацию. Рекомендую начать тоже с карандашика, бумаги и калькулятора. Да, не забудьте определиться с типом индикатора. От этого зависит вся процедура.
ut1wpr вне форума  
Непрочитано 01.12.2010, 10:27  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

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

Сообщение от omercury Посмотреть сообщение
Прошу пардона за мой французский - а нафиг второе прерывание? Не судьба из имеющегося динамичку запускать?
Для прихода понимания.
Безусловно все можно в одном, но пусть чел поймет, что и почем.
Не будем грузить сразу. А то увлечется и понаписывает в обработчике кодов аж на 1.1 мсек., потом будет глюки искать
Впрочем, он же в начале пути, волен выбирать.
ut1wpr вне форума  
Непрочитано 03.12.2010, 05:40  
Dorgx7
Частый гость
 
Регистрация: 04.02.2007
Сообщений: 43
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dorgx7 на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

вот cделал индикацию
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
if( ++ms == 1000){ ms = 0;
if( ++sec == 60 ){ sec = 0;
if( ++min == 60 ){ min = 0;
if( ++hour == 24 ) {hour = 0;
}}}}
PORTA=255;
PORTB=0;
if (++Dig==6){Dig=0;};
switch (Dig){
case 0: PORTB SET_B(0);PORTA=recode[(hour / 10)];break;
case 1: PORTB SET_B(1);PORTA=recode[(hour % 10)];break;
case 2: PORTB SET_B(2);PORTA=recode[(min / 10)];break;
case 3: PORTB SET_B(3);PORTA=recode[(min % 10)];break;
case 4: PORTB SET_B(4);PORTA=recode[(sec / 10)];break;
case 5: PORTB SET_B(5);PORTA=recode[(sec % 10)];break;
};
}
вроде все правильно но часики за 8ч отстают на 4 сек ((

Последний раз редактировалось Dorgx7; 03.12.2010 в 05:47.
Dorgx7 вне форума  
Непрочитано 03.12.2010, 09:46  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Сообщение от ut1wpr Посмотреть сообщение
Для прихода понимания.
Ну да. Сделает человек второе прерывание. Всё запустит. Вроде работает всё - красота! А потом окажется, что время убегает куда-то. Будет грешить на кварц - продали некачественный. Начнёт разбираться - и придёт понимание! Кварц ни при чём. Просто прерывания накладываются и сбивают логику работы программы. Это же AVR, а не MSC51. Контроллер прерываний урезан - нету в нём разделения по приоритетам. При приходе нескольких прерываний выбирается первое по списку... Потом следующее. НАДО тактировать от одного.
Сообщение от omercury Посмотреть сообщение
А то увлечется и понаписывает в обработчике кодов аж на 1.1 мсек.
А чтоб не увлекался - опять же подсказать надо. В прерываниях лучше ставить флаги, а расчеты оставить на основной цикл.
Оно понятно, что своими граблями да по своему лбу колотить - оно надёжнее. Запомнится лучше...

Последний раз редактировалось omercury; 03.12.2010 в 09:49.
omercury вне форума  
Непрочитано 03.12.2010, 10:14  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Сообщение от omercury Посмотреть сообщение
Контроллер прерываний урезан - нету в нём разделения по приоритетам. При приходе нескольких прерываний выбирается первое по списку...
Так нету или первое по списку? Если нет, то выбор рэндомайзный. Если по списку - то значит список есть и приоритеты расставлены. А нам остается только подстраиваться под них. Изменить их нам не дано.
Сообщение от omercury Посмотреть сообщение
В прерываниях лучше ставить флаги, а расчеты оставить на основной цикл.
Вопрос спорный. Я бы не был так категоричен. Смотря что выполнять. Если время реакции на выполнение функции вне прерывания по самому прерыванию не важно - тогда да. В противном случае всегда жмемся к началу обработчика...
ut1wpr вне форума  
Непрочитано 03.12.2010, 10:31  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Прошу помощи в освоении AVR под CV

Сообщение от ut1wpr Посмотреть сообщение
Так нету или первое по списку?
В начале памяти программ векторы прерываний. Если придут все сразу(ситуация невероятная, но теоретически возможная), кроме сброса, то будут обрабатываться по очереди - начиная с младшего адреса.
Сообщение от ut1wpr Посмотреть сообщение
Вопрос спорный. Я бы не был так категоричен. Смотря что выполнять. Если время реакции на выполнение функции вне прерывания по самому прерыванию не важно - тогда да. В противном случае всегда жмемся к началу обработчика...
Ежу понятно.
У ТС так и сделано - критичный ко времени расчет вначале.

Будем на словах ловить, или по-делу?
omercury вне форума  
 

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

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

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, время: 12:32.


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