AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

на мой взгляд с ними тоже)интереса ради проверьте кнопки на светодиодах
Работу кнопок я смотрю в еепроме как они прибавляют или отнимают.
можете четко сформулировать задачу, проблему и вопрос? как в армии - кратко и по существу?
после нажатия кнопок должна измениться частота на выходе ФАПЧ но этого не происходит

Код: Выделить всё

	// регистры сравнения 16 битный заносим AH старшую AL младшую часть переменной
	OCR1AH = (N >> 8) & 0x00FF;// Задаем новое значение коэффициента пересчета
	OCR1AL = N & 0x00FF;//записываем число для сравнения
это код в прерывании измененную переменную записываю для сравнения с ТССR таймера 1 и частота должна по идеи измениться.
Последний раз редактировалось bango Ср мар 28, 2018 10:49:10, всего редактировалось 1 раз.
Реклама
<!-- Yandex.RTB R-A-62247-3 --> <div id="yandex_rtb_R-A-62247-3"></div> <script type="text/javascript"> (function(w, d, n, s, t) { w[n] = w[n] || []; w[n].push(function() { Ya.Context.AdvManager.render({ blockId: "R-A-62247-3", renderTo: "yandex_rtb_R-A-62247-3", async: true }); }); t = d.getElementsByTagName("script")[0]; s = d.createElement("script"); s.type = "text/javascript"; s.src = "//an.yandex.ru/system/context.js"; s.async = true; t.parentNode.insertBefore(s, t); })(this, this.document, "yandexContextAsyncCallbacks"); </script>
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

bango писал(а):это код в прерывании измененную переменную записываю для сравнения с ТССR
как-то сложновато...

Код: Выделить всё

OCR1A = N;
режим таймера у вас правильно задан?

Добавлено after 13 minutes 7 seconds:
на выходе OC1A у вас должна появиться частота, равная поделенной на OCR1A частоте, поступившей на вход T1 - верно? на Т1 частота поступает? какая именно?
вы учитываете тот факт, что запись в OCR1A в обработчике происходит в время уже начатого цикла работы таймера, и, соответственно, на этот цикл не повлияет?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
гостевая2
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

режим таймера у вас правильно задан?
Настраивал таймер по описанию которое прикрепил с верху.
OCR1A = N;
этот же регистр 2х байтный если я ни чего ни путаю а у меня число от 1500 до 4000 примерно вот поэтому я его и делю на две части.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

bango писал(а):этот же регистр 2х байтный
так, как я написал - правильно.

Добавлено after 9 minutes 40 seconds:
да вот еще что...
я уж не знаю, насколько вы там сделали усекновение программы свей, но главный цикл в том файле, что вы выложили, полностью эквивалентен следующему:

Код: Выделить всё

while(1){
   Buton_save(); // Проверим состояние кнопки "Save" и сохраним переменные
   Buton_minys ();  // Проверка нажатия кнопки уменьшить
   Buton_plys();// Проверка нажатия кнопки увеличение
   if(FChangeFlag)
        {
	        TIMSK |= (1 << OCIE1A);   // Разрешаем прерывания по совпадению для модификации OCR1A
        }
}
кстати, запрещать прерывания по совпадению в обработчике прерывания по совпадению не надо
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

на выходе OC1A у вас должна появиться частота, равная поделенной на OCR1A частоте, поступившей на вход T1 - верно? на Т1 частота поступает? какая именно?
вы учитываете тот факт, что запись в OCR1A в обработчике происходит в время уже начатого цикла работы таймера, и, соответственно, на этот цикл не повлияет?
Вот где то тут истина я отвечу работа мешает думать.
Реклама
гостеваая 3
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

то есть я хочу сказать, что никакого изменения ваших переменных не происходит, так как сначала отрабатывает кнопка минус, а потом плюс, в итоге все остается, как и было. на нажатия кнопок ваша программа реагировать не будет - можете даже не припаивать их :)
сорри, даже не мог подумать, что у вас так занятно обработка кнопок сделана :) т.е. главный цикл на самом деле в if-ах не нуждается, но реакция на кнопки какая-то предусмотрена... поспешил с выводами
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ROMan2947
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб янв 23, 2016 00:59:59
Откуда: Чебоксары

Re: AVR studio в вопросах и ответах

Сообщение ROMan2947 »

[uquote="bango",url="/forum/viewtopic.php?p=3340666#p3340666"]этот же регистр 2х[/uquote]
даташит:
The following code examples show how to do an atomic write of the TCNT1 Register contents. Writing any of
the OCR1A/B or ICR1 Registers can be done by using the same principle.

Код: Выделить всё

void TIM16_WriteTCNT1 ( unsigned int i )
{
unsigned char sreg;
unsigned int i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Set TCNT1 to i */
TCNT1 = i;
/* Restore global interrupt flag */
SREG = sreg;
можно и как у вас написать,но разница на виду.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

ROMan2947 писал(а):но разница на виду
вы забываете, что OCR1A обновляется в обработчике прерывания, т.е. запрещать прерывания не надо. но в остальном вы правы - снов я поторопился, т.к. привык пользовать таймер в режиме Fast-PWM, когда доступ в OCR1x буфферизируется... и совсем забыл, что эта буфферизация активна не всегда.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

на выходе OC1A у вас должна появиться частота, равная поделенной на OCR1A частоте, поступившей на вход T1 - верно?
Да это вы верно поняли
на Т1 частота поступает? какая именно?
да поступает. точно не знаю надо посчитать, должна поступать в (Диапазон регулирования частоты: 100 - 300 кГц)
вы учитываете тот факт, что запись в OCR1A в обработчике происходит в время уже начатого цикла работы таймера, и, соответственно, на этот цикл не повлияет?
Пока я над этим не думал это хорошее замечание. и даже не знаю как это вообщем отразится.

По поводу опроса кнопок вы дали хорошие замечания вот что значит взгляд профи за это спасибо.
запрещать прерывания не надо
значит получается запрет прерывания убрать из опроса прерывания и вот этот код убрать

Код: Выделить всё

        if(FChangeFlag)
        {
	        TIMSK |= (1 << OCIE1A);   // Разрешаем прерывания по совпадению для модификации OCR1A
        }
а TIMSK вставить вот так я правильно понял?

Код: Выделить всё

int main(void)

TIMSK |= (1 << OCIE1A);   // Разрешаем прерывания по совпадению для модификации OCR1A
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

как-то так, да

честно говоря, я не понимаю, зачем обновлять OCR1A в обработчике прерываний? ведь если делать это в главном цикле, обработчик прерывания вообще не понадобится - пусть себе гонит меандр на выходе абсолютно аппаратно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

честно говоря, я не понимаю, зачем обновлять OCR1A в обработчике прерываний?
Я думал что так нужно делать. Дома попробую сделать так как вы сказали и завтра отпишусь.
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

у меня в протэусе кварц не правильно выставлен, пытаюсь понять как установить 16Мгц
вот что сейчас показывает осциллограф
Т1 = 6,7 нс = 1000\6,7 = 149,25 Мг
ОС1А = 30,4мс 100\30,4 = 3,2 Мг
ОС0А = 1020мс = 10\102 0,9 гц
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

в протеусе "нарисованный" кварц никак не влияет на поведение МК. чтобы изменить частоту "кварца" надо в свойствах МК задать тактовую частоту - хоть 100 МГц можно :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

Но даже если я кварц не выставил частота от кнопок должна меняться?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

по идее должна

проверьте проще: вместо главного цикла напишите

Код: Выделить всё

for(N=1000; N < 4000; N+=100) _delay_ms(300);
и посмотрите в течение нескольких секунд на выходную частоту, вообще не трогая кнопки - будет меняться или нет?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

По инструкции выставил 16 мг в протэусе.
Долно быть вот так
16000000/1024/250 = 62,5Гц
а у меня выходит вот так что за кварц стоит не пойму
f = 1/с
ОС0А = 500мс = 0,5с = 2 Гц предделитель 1024 делитель = 250
ОС0А = 126мс = 0,126с = 7,9 Гц предделитель 256 делитель = 250
ОС0А = 31мс = 0,031с = 32,2 Гц предделитель 64 делитель = 250
ОС0А = 4мс = 0,004с = 250 Гц предделитель 8 делитель = 250
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

фьюз CKDIV8 в протеусе как установлен?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

1101
Вложения
Fuse.png
(15.34 КБ) 248 скачиваний
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: AVR studio в вопросах и ответах

Сообщение ARV »

ну вот. фактическая частота тактирования у вас в 8 раз меньше, т.е. 2 МГц, а не 16. этот фьюз должен быть незапрограммирован, т.е. 1
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
bango
Открыл глаза
Сообщения: 52
Зарегистрирован: Вт май 05, 2009 17:32:50

Re: AVR studio в вопросах и ответах

Сообщение bango »

Выстовил как вы показали вот так получается
Вот так настроен счетчик
TCCR0B |= (1 << CS00);// CS = 101 - от внутреннего источника
TCCR0B |= (1 << CS02);// после пред делителя (15625)

OCR0A = M;// Задаем значение коэффициента пересчета 249
а частота получается
ОС0А = 31мс = 0,031с = 32 Гц предделитель 1024 делитель = 250
Ответить

Вернуться в «AVR»