Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.04.2010, 12:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
Сообщение от Amator1
|
А как насчет скобок для функции if(a==0x0A)
|
Так они там и не нужны, для одной операции скобки ставить не обязательно.
a++;
if(a==0x0A) a=0;
|
|
|
|
02.04.2010, 14:02
|
|
Прохожий
Регистрация: 30.12.2008
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
Сообщение от AJScorp
|
Так они там и не нужны, для одной операции скобки ставить не обязательно.
a++;
if(a==0x0A) a=0;
|
Я именно так и делаю при записи в одну строку, при переносе строки - ставлю скобки.
|
|
|
|
02.04.2010, 15:50
|
|
Прописка
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
Сообщение от Amator1
|
Я именно так и делаю при записи в одну строку, при переносе строки - ставлю скобки.
|
Но компилятор не выполнит условие, только если сразу будет ";" стоять.
А если компилятор перевод строки считает за ";", то это хреновый компилятор...
|
|
|
|
03.04.2010, 09:03
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
родные!
раз уж с Вашей помощью нашол концы ,воодушившись теперь разыгрываю всякие варианты и вот
появились такие соображения.
Как Я понял, если счетчик не использует програмную установку промежуиочного значения
и считает только по заложенному в него коэффициенту деления, то это считается аппаратный счет и в этом случае в промежутке между выходними сигналами при прерывании можно выполнить любую команду не опасаясь потери точночти.
Для МЕГИ 8 ,например, можно таки использовать TIMER 0 ,подцепить таки кварц 4096,
выбрать коэф. деления предделителя 64, а самого счетчика 256, и тут прерывания будет происходить через каждые 4096000/64/256=250Гц т.е. каждые 1/250=4мс и значит в этом промежутке можно сделать 4000/0,244=16393 (или пусть половину)операции в секунду, сохраняя
при этом точно интервал 4 мс.
Я правильно рассуждаю или опазорился перед учителями?
Спасибо.
|
|
|
|
03.04.2010, 09:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,428
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
Правильно.
|
|
|
|
03.04.2010, 12:28
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
новая находка!
Чип, Atmega 8, кварц 32 768, промежуток прерываня timer2 1сек, внутренный систеиный генератор 4 Мгц. Написал программу с целью дабится преобладания промежутка 1сек.
Компилятор CVAVR показал что занято 39% eeprom и 55% flash, ведь это значит что количество
инструкйии далеко от цифры 1 000 000 .тем не менее как только дашел до такого количество
операции ,программа стала прерыватся с периодом 1 сек и естественно не выполняется.
уменьшу программу опять работает.
Из за чего это может происходить вроде количество инстпукцтт не так уж большой????
Спасибо.
|
|
|
|
04.04.2010, 01:44
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
нашолся выход.
всю программу перенес из обработчика прерывания на функцию
WHILE ,оставив только счетчик секунд и все заработала .объяснить не могу, но может кому то это информация пригодится.
Спасибо.
|
|
|
|
04.04.2010, 18:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
Сообщение от begun
|
объяснить не могу
|
Делайте прерывания как можно короче. Взводите флаг или работайте со счетчиком(++\--) А уже в цикле основной программы проверяйте этот флаг или делайте действие в зависимости от состояния счетчика. Таймер не зависит от того, выполняется какая то программа или нет, он тикает сам по себе(если мы его включили).
|
|
|
|
05.04.2010, 08:04
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
очередной раз большое спасибо,иду дальше.
|
|
|
|
07.04.2010, 13:23
|
|
Гражданин KAZUS.RU
Регистрация: 18.07.2006
Сообщений: 870
Сказал спасибо: 231
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: Отработка секундного импульса на AVR
друзья!
вчем моя ошибка?
Взял Atmega8.
установил внешний кварц 16384 кгц ,выставил фьюзы соотвтствующие. использую TIMER1 в режиме сравнения ,
ставлю предделитель на 1024 и далее записываю в регистре OCRA1 3E80 Hex т.е. делю на 16 000,
на выходе OC1A ,по идее, должен был получить 0,5 гц так как 16384000/1024=16000
и 16000/16000=1,
но частота получается гораздо ниже,
примерно один перепад за 6-7 секунд.
смодулеровал в proteus , получил тоже самое, хотя осциллограф proteus показывал нормальный результат.
Прмогите пожалуйсто разобратся.
Привожу код;
#include ‹mega8.h›
void main(void)
{
-----
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x40;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x3E;
OCR1AL=0x80;
OCR1BH=0x00;
OCR1BL=0x00;
------
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
------
while (1)
{
// Place your code here
};
}
Спасибо
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:25.
|
|