Страница 151 из 628

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 14:43:44
AI_Disable
DJ_Kiridza, Ваятеле тут можно посоветовать что-то конкретное. Под ваше описание подойдёт любая мега, главное чтоб у неё ног хватало и памяти. А АЦП, уарт, подтяжка и т.п. есть у всех.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 14:47:22
DJ_Kiridza
Про меги понятно, немного гуглом пробежался, я про аналоги среди PIC-ов например...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 15:00:37
AI_Disable
PIC-ам такая как у AVR производительность и арсенал периферии, в данном диапазоне цен, только снится.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 15:15:53
DJ_Kiridza
Ок, пасиб, тогда вопрос снимаю...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 18:21:52
Wereww
AI_Disable писал(а):Дак я об этом и говорю. Фьюз SCOPT как рас существует для того, чтобы "повесить" эти кондёры, но "изнутри" контроллера, а не снаружи.
Спасибо, попробуем :)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 20:58:00
ploop
Господа, мне снова требуется ваш совет. ATmega48
Нужен опрос пяти кнопок + программный антидребезг. Проблема в том, что делать задержки непозволительно - в основном цикле каждый такт в дефиците.
Есть такая идея: в прерывании таймера опрашиваем кнопки, если нажата одна, то увеличиваем состояние соответствующего ей регистра (придётся задействовать 5 регистров - думаю взять R10-R15). Когда значение в регистре достигнет определённого значения - выставляем флаг в еще одном регистре (как бы регистре состояния кнопок).

В основном цикле просто проверяем состояние флагов, т.е. не тратим лишние такты.
Смущает количество тактов уже внутри прерывания, хотя всё равно, выигрыш в скорости должен буть ощутимым, т.к. прерывание должно быть примерно 1/32 от тактовой (мне с него еще меандр надо снять на одну из ног)...

Вообще, как это правильно реализуется?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 21:14:05
AI_Disable
Не находите, что лучше использовать таймер для реализации задержек? Плюс к тому: сколько длится основной цикл? Если он меньше 0.1с, то можно его использовать как задержку...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 21:16:57
*Trigger*
Есть две команды:

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

bin2bcd
bcd2bin
Какая из них переводит из двоичного в двоичнодесятичный, а какая и двоичнодесятичного в двоичный?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 21:27:09
AI_Disable
Ну, следуя логике,
bin2bcd - из двоичного в двоичнодесятичный
bcd2bin - из двоичнодесятичного в двоичный
:)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 21:30:19
*Trigger*
Спасибо.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 21:42:17
ploop
Не находите, что лучше использовать таймер для реализации задержек? Плюс к тому: сколько длится основной цикл? Если он меньше 0.1с, то можно его использовать как задержку...
Основной цикл чем меньше, тем лучше. Дело в том, что этот самый основной цикл будет не один, а несколько, в зависимости от режима работы.
Из этих самых режимов проблема только с одним: смысл его - пропустить через себя поток данных, т.е. тупо с трёх ног перекинуть состояние на другие три. Читаем биты, выставляем, зацикливаем. Но надо предусмотреть выход из этого режима - т.е. тот самый опрос кнопок.
Использовать таймер - вариант (благо их там три), но как? Так же в прерываниях?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 22:20:56
AI_Disable
ploop писал(а): Использовать таймер - вариант (благо их там три), но как? Так же в прерываниях?
Ну вариантов много, и каждый из них будет лучшим в том или ином контексте... Но, как минимум, могу предложить ничего не инкрементировать по сколько-то там раз, а использовать, например, CTC режим и записывать в OCR длинну необходимой паузы.
Т.е.: в месте, где надо проверять кнопку, проверяем её состояние; пишем значение в OCR; запускаем таймер; в прерывании, от этого таймера, снова смотрим состояние кнопки; если нажата устанавливаем флаг.
---
Блин, честно говоря не до конца понял ситуацию. Вы вообще не хотите ничего опрашивать в цикле? Даже флаги? Тогда, да, единственный вариант, засунуть всё в прерывание и установить его цикличность так, чтоб один цикл - достаточное время для антидребезга.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 22:55:14
ploop
Т.е.: в месте, где надо проверять кнопку, проверяем её состояние; пишем значение в OCR; запускаем таймер; в прерывании, от этого таймера, снова смотрим состояние кнопки; если нажата устанавливаем флаг.
Это одну. А остальные? :)
Блин, честно говоря не до конца понял ситуацию. Вы вообще не хотите ничего опрашивать в цикле? Даже флаги? Тогда, да, единственный вариант, засунуть всё в прерывание и установить его цикличность так, чтоб один цикл - достаточное время для антидребезга.
Нет, флаги проверять как раз нормально. Всего несколько лишних тактов. А вот опросить пять кнопок - уже дофига выйдет (там одних условных переходов не оберёшься).

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 23:12:40
ARV
имхо, как раз-таки надо "трансляцию уровней" делать по прерываниям (хоть по таймеру, хоть по запросу от пинов), а опрос кнопок тупо и неспеша делать в главном цикле... я для себя сделал некую заготовку для работы с кнопками, и пользуюсь ею уже давно - практически ни разу не возникало проблем с тем, чтобы отказаться от программных задержек для подавления дребезга и программного же опроса кнопок...

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 23:15:17
AI_Disable
ploop писал(а):Это одну. А остальные? :)
Если нужно опрашивать пять кнопок, а не одну, то тут уж ничего не поделаешь.
ЗЫ: Я так понимаю, тут попахивает ассемблером, так что отхожу... :)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Пн янв 24, 2011 23:35:55
ploop
ЗЫ: Я так понимаю, тут попахивает ассемблером, так что отхожу...
Дык это.. воняет уже :)
Я на нём пока и пишу. Ладно, спасибо за помощь.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт янв 25, 2011 03:06:26
ibiza11
согласен с ARV. Давно сделал заготовку по антидребезгу, правда кнопок было не так много, максимум 3, при этом никаких проблем с задержками девайса в целом не наблюдалось (значительных задержек).
Вот примерный алгоритм опроса кнопок:
1) принимаем условие: дребезг контактов 50мс.
2) заводим на каждую кнопку одну переменную в памяти (ОЗУ) для счета циклов
обращаемся к ней командами lds и sts
3) заводим на каждую кнопку по 2 флага. первый флаг - флаг того, что был факт нажатия кнопки (либо помеха),
второй флаг - флаг необходимости выполнить действие
4) заводим таймер на прерывания каждые 50мс/100*=500мкс (100* для примера, имеем в виду, что макс значение байта 255,
так чтобы, если дребезг останется, можно было увеличить количество циклов)
5) см. блок схему опроса кнопки (ставляется в обработчик прерывания)
Изображение
флаг факта нажатия - это и есть первый флаг.
действия "по нажатию" и "по отпусканию" кнопки использовать на выбор, второй флаг я использую здесь, если действие длинное. Далее в основном цикле опрашиваю флаг и выполняю действие. Если же действие типа "установить единичку на выводе ХХ, порта YY", то не заморачиваюсь со вторым флагом, а выполняю действие прямо здесь, в прерывании.
Вроде все объяснил, как надо. Есть еще вопросы? :)

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт янв 25, 2011 07:51:29
ploop
Спасибо, ibiza11
Примерно такой же алгоритм я и описал. Только собирался делать опрос не в прерывании, а по мере надобности.

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт янв 25, 2011 15:36:15
DJ_Kiridza
Для Атмеги16-8AU, если работать от внутреннего генератора, максимальная частота 8, если убрать фузу деления на 8, так? на сколько это точные и честные 8? можно положится на эту частоту или если нужна болие-мение точность - то лучше внешний кварц?

Re: Мелкие вопросы по МК и ПЛИС.

Добавлено: Вт янв 25, 2011 15:55:30
ploop
С завода этот фьюз включен, т.е. реальная частота - 1МГц. Если снять, то будет 8
А вот точность зависит от многих факторов - напряжение питания, температура, фаза луны... Но в принципе, смотря для чего. Если не нужны жесткие тайминги то вполне можно использовать без кварца.