Справится ли AVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Вт фев 24, 2009 17:32:38
Откуда: г. Ижевск

Сообщение Mosfett »

Имеем Atmega8535 с кварцем 11.0592 Мгц.
Задача обработка сигнала с оптического энкодера (2048 имп/об, Fmax- 160кГц Канал А заведен на INT0, который настроен на прерывание по спаду) с выдачей результата на ком порт (возможно в будущем потребуется Modbus RTU).
Так вот, справится ли AVR с такой задачей? Или лучше сразу медленно ползти в сторону ARM?
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 361
Зарегистрирован: Ср янв 21, 2009 00:45:33

Сообщение Lonleystranger »

Программно организованный стек справится с выдачей в порт, чтение по прерыванию (и анализ тоже), еще будет свободное пространство кода основной программы (в промежутках вывода в порт, можно анализ прерываний сделать). Если частоты не будет хватать (в чем я сильно сомневаюсь), можно MEGA8-PU-16 (16MHz). Еще многое зависист от того как программу построите,старайтесь применять оптимизацию на скорость, поменьше работать с ОЗУ, побольше с регистрами и применять операторы, которые 1 такт занимают, тогда 160КГц проанализировать и вывести в порт-легко.
Человек умный - объяснит
Глупый - будет разбрасываться умными словами.
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

А каким методом хотите определять направление вращения ?
Делал что-то подобное очень давно на таком же кварце и контроллере и тоже с оптическим датчиком уперся в скорость ~25кГц .
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Вт фев 24, 2009 17:32:38
Откуда: г. Ижевск

Сообщение Mosfett »

OBIVAN писал(а):А каким методом хотите определять направление вращения ?
Делал что-то подобное очень давно на таком же кварце и контроллере и тоже с оптическим датчиком уперся в скорость ~25кГц .
Ну что то вроде этого:

interrupt [EXT_INT1] void ext_int1_isr(void) // Прерывание по спаду фронта
{

if (!PIND.6&!PIND.3) //если PD.3 и PD.6 = 0
{
count_enc++; //прибавим 1 к счетчику импульсов
#asm("reti")
};
if (!PIND.3|PIND.6) //если !PD.3 или PD.6 =1
{
count_enc--; //вычтем 1 из счетчика импульсов
};
#asm("reti") //выход из прерывания

Даже работает :) Еще нужно добавить обработку индексной метки.

Еще такой вопрос - какую длину буфера TXD сделать? На выходе float .2f.
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

Lonleystranger писал(а):поменьше работать с ОЗУ, побольше с регистрами
А типа регистры не в этой же памяти находятся? или доступ к ним быстрее чем к другим ячейкам ОЗУ?
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

По-моему, занимать такой задачей ARM - это из пушки по воробьям. Но скорости атмеги для этой задачи, в такой формулировке, действительно, может не хватать. Может изменить условия? Скажем, направление вращения распознавать мелкой логикой снаружи м/к, а импульсы подсчитывать счетчиком (по одному входу - наращивать, по другому - уменьшать), и раз в nn миллисекунд слать накопленное их количество наружу. Поскольку счет импульсов будет реализован аппаратно, с такой задачей атмега справится.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Может попробовать разогнать Мегу 8 хотябы до 20...24мгц ???
Изображение
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

__Alexander писал(а):
Lonleystranger писал(а):поменьше работать с ОЗУ, побольше с регистрами
А типа регистры не в этой же памяти находятся? или доступ к ним быстрее чем к другим ячейкам ОЗУ?
С регистрами можно работать напрямую, а для обработки значений в ОЗУ их сначло нужно оттуда скопировать(перед этим адрес ячейки ОЗУ нужно положить в регистровую пару) в те же самые регистры, поработать с ними и обратно положить.
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3268
Зарегистрирован: Вс июл 23, 2006 01:32:05
Откуда: г.Москва

Сообщение VIRGO »

Yellow Tiger писал(а): Скажем, направление вращения распознавать мелкой логикой снаружи м/к, а импульсы подсчитывать счетчиком (по одному входу - наращивать, по другому - уменьшать), и раз в nn миллисекунд слать накопленное их количество наружу.
Есть микросхема, содержащая квадратурный декодер и 24 разрядный счётчик с 8 разрядной шиной для чтения. Тип точно не помню, надо порыться (был у меня даташит). В своё время, мне было лениво искать эту микросхему и я сделал на ПЛИС.
Но вообще, можно ограничиться одним квадратурным декодером на двух корпусах логики. Два сигнала на выходе: "счёт" и "направление".
(точность будет 2048 Х 4 = 8192 отсчётов на оборот )
R3Dio 73!
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

VIRGO писал(а):Есть микросхема, ... Тип точно не помню, надо порыться...
Порыться, действительно, не помешало бы! :))) Если эта штука ещё и доставабельна, то она будет очень кстати во многих случаях... 8)
Друг Кота
Аватара пользователя
Сообщения: 3268
Зарегистрирован: Вс июл 23, 2006 01:32:05
Откуда: г.Москва

Сообщение VIRGO »

Yellow Tiger писал(а):Порыться, действительно, не помешало бы! :))) Если эта штука ещё и доставабельна, то она будет очень кстати во многих случаях... 8)
Ну вот, вернулся с Митинского радиорынка, (предыдущий пост писал утром перед выездом), немного отдышусь и пороюсь.

ЗЫ (На хардах у меня бардак многолетний), но думаю, найду.
R3Dio 73!
Друг Кота
Аватара пользователя
Сообщения: 3268
Зарегистрирован: Вс июл 23, 2006 01:32:05
Откуда: г.Москва

Сообщение VIRGO »

Вот, кажется она. Только она 16 битная (это я на ПЛИСе 24 битную делал), хотя, если порыться , то может есть и другие аналогичные микрухи с большей разрядностью.

Разбил архив. (больше 256Кб вложение не проходит)
Вложения
hctl20000.part1.rar
(187.5 КБ) 254 скачивания
hctl20000.part2.rar
(116.01 КБ) 292 скачивания
R3Dio 73!
Друг Кота
Аватара пользователя
Сообщения: 3268
Зарегистрирован: Вс июл 23, 2006 01:32:05
Откуда: г.Москва

Сообщение VIRGO »

Вот схемка квадратурного декодера на логике.

Вторая схема для более высоких скоростей. (добавлены триггеры во избежание пропуска отсчётов, но думаю, при 160 Кгц это не потребуется).
Вложения
QuadratureDecoder2.gif
(2.23 КБ) 844 скачивания
QuadratureDecoder_waveform.gif
(2.13 КБ) 833 скачивания
QuadratureDecoder1.gif
(1.59 КБ) 1000 скачиваний
R3Dio 73!
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

При заданных условиях, между каждым импульсом от энкодера успеет пройти примерно 70 тактов, при этом мин. 8-10 тактов уйдет на обработку прерывания, т.е. остается около 60 тактов, или 60 однотактных команд, для вывода в USART больше чем достаточно
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3268
Зарегистрирован: Вс июл 23, 2006 01:32:05
Откуда: г.Москва

Сообщение VIRGO »

Пардон! Нашел микруху, про которую писал LS7166 - 24 битная...
На предмет доставаемости и покупаемости не знаю...
Вложения
LS7166.pdf
(102.15 КБ) 481 скачивание
R3Dio 73!
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Вт фев 24, 2009 17:32:38
Откуда: г. Ижевск

Сообщение Mosfett »

Я думаю внешний декодер стоит делать если только нужен режим х4. А если не нужен этот режим то и так довольно просто декодируется:

interrupt [EXT_INT1] void ext_int1_isr(void) // INT1 Mode: Falling Edge
{
if (!PIND.3&!PINA.0)
{
count--;
}
else
count++;

}

count = signed long int.



Если заводить сигналы на счетчик, учитывая то что он 16 битный а число на выходе нужно скажем от -20000 до +20000 то код получится куда больше

Может я не прав?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 361
Зарегистрирован: Ср янв 21, 2009 00:45:33

Сообщение Lonleystranger »

__Alexander писал(а):А типа регистры не в этой же памяти находятся? или доступ к ним быстрее чем к другим ячейкам ОЗУ?
Сами посчитайте- загрузить в 16 разрядный регистр (Х,У,или Z) адрес ОЗУ (LDI,2 такта), Прочитать данные из ОЗУ в регистры 2 такта(LD)и провести операцию (n-количество тактов), и записать назад, еще 4 такта, а так на каждой операции вычисления экономите по 8 тактов процессора. Только надо четко разграничить регистры, я так всегда делал, если программа не очень сложная, экономится до 20% времни проца
Человек умный - объяснит
Глупый - будет разбрасываться умными словами.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

VIRGO, спасибо за информацию, но цена у этого агилента какая-то неадекватная (ок. 800 рэ!), уж лучше на малой интеграции делать... :)))
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

Я делал на обычной логике, направление определялось на ней, выходы были подключены на два внешних прерывания ,писал на asm , была передача на ком. порт со скоростью 115 кб + динамическая индикация 11 знаков ,индикация находилась в основной цикле задержкой между зажиганием сегментов была передача на ком. ~25кГц как я писал выше все было прекрасно больше и появлялись пропуски .
Друг Кота
Аватара пользователя
Сообщения: 3268
Зарегистрирован: Вс июл 23, 2006 01:32:05
Откуда: г.Москва

Сообщение VIRGO »

Yellow Tiger писал(а):VIRGO, спасибо за информацию, но цена у этого агилента какая-то неадекватная (ок. 800 рэ!), уж лучше на малой интеграции делать... :)))
Не удивляюсь, с ценами порой происходит какая-то фантастика.
Ещё вариант: в некоторых PIC контроллерах старшего семейства есть встроенный аппаратный квадратурный декодер.
R3Dio 73!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»