Пара вопросов по МК AVR

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Koldyn
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт апр 14, 2011 22:32:11

Re: Пара вопросов по МК AVR

Сообщение Koldyn »

Спасибо конечно, но я пока не всё понял что вы написали. Только начинаю писать на Си и по этому не все операторы знаю, буду разбираться.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Пара вопросов по МК AVR

Сообщение YS »

Что конкретно непонятно? Сразу бы и спросили.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
Koldyn
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт апр 14, 2011 22:32:11

Re: Пара вопросов по МК AVR

Сообщение Koldyn »

ISR (INT0_vect) вот эта строчка мне не известна.

do - это я так понимаю цикл, но вот в чём его отличие от while?

while (INT_PORT & INT0_PINMASK); на сколько знаю while это цикл, но здесь не вижу фигурных скобок, тогда вопрос что делает эта строка? Правда то что в круглых скобках мне тоже не понятно!

something_worthwhile(); И эта строка мне тоже не известна!

И ещё бы освежить в памяти зачем нужны флаги внешних прерываний.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Пара вопросов по МК AVR

Сообщение YS »

ISR (INT0_vect) вот эта строчка мне не известна.


Это объявление прерывания по INT0 в стиле WinAVR.

do - это я так понимаю цикл, но вот в чём его отличие от while?


Циклом является конструкция

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

do
{

/*Тело цикла*/

}while (/*Условие*/);


Отличие от простого while в том, что условие проверяется после выполнения тела цикла. Таким образом, тело цикла выполнится как минимум один раз.

то что в круглых скобках мне тоже не понятно!


Это проверка того, что кнопка нажата. Макросом INT_PORT я символически обозначил порт, на каотором кнопка, INT0_PINMASK - битовую маску ножки, к которой подключена кнопка, т.е., ножки INT0.

something_worthwhile(); И эта строка мне тоже не известна!


Ну, так я символически обозначил ваш полезный код. "Something worthwhile" в переводе с английского - "что-то полезное (стоящее)". :)

Хороший тон - давать функциям/переменным/макросам говорящие англоязычные имена. Привыкайте к этому.

INT_PORT -> INTerrupt PORT
INT0_PINMASK -> mask of INT0 pin
ISR -> Interrupt Service Routine

И так далее. "Something worthwhile" я уже переводил.

И ещё бы освежить в памяти зачем нужны флаги внешних прерываний.


Флаг внешнего прерывания - бит в специальном регистре, который отвечает за вызов. Если его установить, то обработчик будет вызван сразу, как только это станет возможным. Этот бит обычно устанавливается аппаратурой.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
Koldyn
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт апр 14, 2011 22:32:11

Re: Пара вопросов по МК AVR

Сообщение Koldyn »

Отличие от простого while в том, что условие проверяется после выполнения тела цикла. Таким образом, тело цикла выполнится как минимум один раз.


Не знаю на счёт того когда условие проверяется, может я не понимаю о чём речь, но то что while по середине цикла не остановится это факт, я для этого в прерывании присваиваю переменной отвечающей за задержку 0, ибо если не присвоить и нажать кнопку, он обработает прерывание, добавит к переменной единицу, следовательно условие не будет соответствовать, но он всё равно выполнит цикл до конца и только потом выполнит тот цикл который соответствует условию. То есть хотя бы раз, как вы говорите, цикл выполнит даже while! Собственно в этом и была вся загвоздка, мы с товарищем очень долго не могли понять как нам правильно сделать кнопку, очень быстро разобрались прерыванием и условием в циклах, но срабатывать сразу она не хотела, нажимали, и цикл менялся только тогда, когда тот, во время которого была нажата кнопка не доходил до конца, со временем нас осенило в обработчике выставлять прерывание 0,чтобы остаток цикла прочитывался быстро, незаметно для глаз человека, а в начале каждого цикла переменной присваивалось нужное значение задержки.
Аватара пользователя
Koldyn
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт апр 14, 2011 22:32:11

Re: Пара вопросов по МК AVR

Сообщение Koldyn »

Ааа... Я кажется понял. Тот что у вас сходу выполнит, а потом сравнить в конце цикла, а просто while, если в самом начале не совпало не будет выполнять, но если уже начал то до конца всё же доделает. Так?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Пара вопросов по МК AVR

Сообщение ibiza11 »

так. тема о вопросах по МК AVR, а вопросы по Си.... почитайте Кернигана "Язык программирования Си"
Ставим плюсы: )
Аватара пользователя
Koldyn
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт апр 14, 2011 22:32:11

Re: Пара вопросов по МК AVR

Сообщение Koldyn »

Я вообще-то и сказал что буду разбираться, человек предложил помощь, что тут плохого?! Какая вам разница я буду читать книгу или задавать вопросы у получать ответы от того, кто предложил помочь?

Подскажите, плз, начинающему, как решить 2 вопроса:

1-й генерация AVR ATtiny2313, ATmega8 звука
2-й включение/отключение питания МК одной кнопкой, т.к. есть необходимость сделать один девайс, где надо реализовать так питание.

Тренируюсь в программировании МК на WinAVR


Это самое начало этой ветки. Что первый что второй вопрос затрагивает именно код, заливаемый в МК, не считая что второй вопрос, по сути то что мы обсуждаем, просто у меня МК другой! И ваше замечание имело бы место если бы Си вообще никак не касался МК AVR или бы было указано что пара вопросов по железу, пайке и установке МК AVR. Так как в программировании данных МК одним из используемых языком является Си и в шапке не указана работа только с железом паяльниками, бокарезами и т.п. то ваше замечание НЕ УМЕСТНО!!!!
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Пара вопросов по МК AVR

Сообщение YS »

Koldyn писал(а):Я вообще-то и сказал что буду разбираться, человек предложил помощь, что тут плохого?! Какая вам разница ...


ibiza11, между прочим, тоже ответил на Ваш вопрос и помогает Вам:

ibiza11 писал(а):
Koldyn писал(а):Так?

так.


СпойлерНе разгоняйте людей, старающихся Вам помочь. Тем более, что, если у Вас возникают вопросы при фразе "цикл с пост-условием", то теорию по собственно языку и основам алгоритмизации Вам таки еще читать и читать. ibiza11 указал Вам правильный курс, который указал бы и я, ответь я раньше. Именно, что вопрос про циклы - "книжный", для самостоятельного изучения. И Вам даже указали книгу, в которой про все это можно прочесть.


если бы Си вообще никак не касался МК AVR


Си никак не касается МК AVR. Это отдельный самостоятельный язык, на котором пишут под очень многие архитектуры. Более того, чтобы адаптировать Си, изначально не приспособленный к гарвардской архитектуре, для AVR, в AVR-GCC введены отклонения вроде PROGMEM, EEMEM и т.п.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Пара вопросов по МК AVR

Сообщение ibiza11 »

Koldyn, вместо написания этого сообщения лучше бы почитали основы Си. узнали бы чем отличаются конструкции while и do-while без лишних вопросов. Что за остервенелое чувство того, что кто-то вам должен это все рассказать?
Ставим плюсы: )
Аватара пользователя
Koldyn
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт апр 14, 2011 22:32:11

Re: Пара вопросов по МК AVR

Сообщение Koldyn »

На лицо недопонимание, по этому хочу извиниться если кого-то обидел!

ibiza11, между прочим, тоже ответил на Ваш вопрос и помогает Вам


Я и не говорил что он мне не помогал! В любом случае спасибо за помощь! И то что я в чём-то другом не согласен с ibiza11 ни в коем случае не означает что я неблагодарен за помощь. Но эта благодарность же не означает что я должен соглашаться с ним во всём! У меня есть своё мнение, и если я считаю что ibiza11 был в чём-то не прав то это ни как не отменяет того что он мне помог и я благодарен!

Си никак не касается МК AVR. Это отдельный самостоятельный язык, на котором пишут под очень многие архитектуры.


Вынужден не согласиться. Рас для МК пишут на Си, не важно с какими дополнениями и адаптациями, то он к ним всё таки относится. Или МК относятся к СИ. но это не суть важно. Вот к примеру топор или скажем колесо от велосипеда никак не относиться к МК, впрочем как и к Си. Я же не говорил что Си разработали исключительно для МК! Нет конечно же. Но заявлять что он ни как к ним не относиться... причём это ж не то что какой-то один уникум умудрился написать на Си что-то для МК в то время как никто больше такого не практикует. На нём пишут для МК и в очень больших объёмах! Добавлю что я не затрагивал какие-то нюансы языка не касающиеся МК, я ж не спрашивал как скомпелировать какую-то софтину написанную под винду!

вместо написания этого сообщения лучше бы почитали основы Си


Я собственно перед тем как писать то сообщение уже почитал как раз, и если вы не видели то ответил что понял в чём соль!

узнали бы чем отличаются конструкции while и do-while без лишних вопросов


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

Что за остервенелое чувство того, что кто-то вам должен это все рассказать?


Я ни где не требовал ничего мне объяснять и никого не заставлял, прежде чем спрашивать я почитал!!! Всё равно немного не понял, уточнил то что понял. Потом, просто перебирая мысли в голове до меня дошло то что мне толковали и я дабы не утруждать людей, ответил что понял, и что можно не разжевывать! И где же это
остервенелое чувство того, что кто-то вам должен это все рассказать
???

Ещё раз извиняюсь! Ни в коем случае не хотел никого обидеть и выказать не уважение, вроде написал аккуратно и без оскорблений, и однозначно благодарен за помощь, тем более, что уверен, ещё обращусь и не раз. Но просто стало обидно, я ведь читал и просто не понял, по этому и задал вопрос по тому что не понятно, а меня обвинили в невежестве! :(
Аватара пользователя
Koldyn
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт апр 14, 2011 22:32:11

Re: Пара вопросов по МК AVR

Сообщение Koldyn »

Предлагаю закончить эту полемику, ибо это уж точно не по теме данной ветки! ;-)
mechanical_lynx
Родился
Сообщения: 4
Зарегистрирован: Вс фев 10, 2013 02:30:00

Re: Пара вопросов по МК AVR

Сообщение mechanical_lynx »

Доброго времени суток! Подскажите, пожалуйста, можно ли с выходов микроконтроллера подавать синусоидальный сигнал? Это необходимо для управления фазами двигателя переменного тока
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Пара вопросов по МК AVR

Сообщение YS »

Если в МК есть ЦАП, то да.

Если в МК нет ЦАП (99% недорогих МК), то напрямую нет. Можно либо организовать ШИМ, либо запилить R-2R ЦАП.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
mechanical_lynx
Родился
Сообщения: 4
Зарегистрирован: Вс фев 10, 2013 02:30:00

Re: Пара вопросов по МК AVR

Сообщение mechanical_lynx »

Спасибо. А можно по-подробнее: как организовать это через ЦАП?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Пара вопросов по МК AVR

Сообщение ibiza11 »

:facepalm: прочитайте хотя бы что такое ЦАП.
Ставим плюсы: )
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Пара вопросов по МК AVR

Сообщение YS »

как организовать это через ЦАП?


Для управления двигателем ЦАП не особо нужен. Тем более, что силовые транзисторы гораздо эффективнее использовать в ключевом режиме. Вполне хватит ШИМа.

А так - загоняем в память массив синуса, сдвинутого в диапазон [0;255] (ради Бога, не пытайтесь работать в МК с вещественными числами и, тем более, вычислять синус в рантайме :))) ), заводим три счетчика, сдвинутые по значениям на 120°, один таймер заводим на генерацию ШИМ для трех каналов, второй - на генерацию интервалов дискретизации сигнала. Ну и вперед, по прерыванию от второго выводим данные по счетчикам из массива на ШИМ-каналы первого.

Это самый элементарный случай, естесственно. Для полноценного (с контролем оборотов, момента и т.п.) управления мотором нужно еще много других действий. Но тупо прокрутить мотор и так можно.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
mechanical_lynx
Родился
Сообщения: 4
Зарегистрирован: Вс фев 10, 2013 02:30:00

Re: Пара вопросов по МК AVR

Сообщение mechanical_lynx »

Спасибо за совет, YS. попробую выкрутиться
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Пара вопросов по МК AVR

Сообщение YS »

Да не за что. Поройте интернет, тема-то известная. Почитайте аппноуты по теме motor control.

Например, тут много полезного.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
cray3
Родился
Сообщения: 11
Зарегистрирован: Ср фев 20, 2013 15:40:48

Re: Пара вопросов по МК AVR

Сообщение cray3 »

Возможно ли на 8-битном таймере делать ШИМ с произвольным периодом? Или в 8-битном доступен только фиксированный набор делителей?

Еще вопрос.
У всех видов PWM есть режим "TOP = OCRn". Как им пользоваться и зачем он нужен? Сигнал на выходе меняется при совпадении с OCRn. А если счетчик будет считать только до OCRn, никакого совпадения и соотвественно ШИМ не получится.
Ответить

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