11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|
1 | |
AVR и USB22.12.2015, 09:50. Показов 552. Ответов 10
Метки нет (Все метки)
Здравтсвуйте!!
Возникла необходимость сборки железки на МК AVR.. Суть её-непрерывно подсчитывать импульсы по двум каналам и фиксировать значения на каждом из каналов каждые 500 мкс, путём передачи на хост сообщений посредством usb, причём момент передачи никак не должен отражаться на подсчёте.. Пробывал собирать на Atmega128 (МК): Завел на МК V-USB..два канала завел на ноги МК для внешнего тактирования двух таймеров, в прошивке на МК реализовал всё вышесказанное: таймеры считают импульсы и передают их количество по usb на хост.. И вот как раз, в последнем моменте возникла проблема.. в момент, когда контроллер передаёт значения через V-USB на хост, сбиваются значения таймеров.. я так понял, что проблема в прерываниях, которые использует V-USB.. Собственно вопрос, на какой AVR можно реализовать сие? Заранее большое количество искромётных спасиб!!)
0
|
22.12.2015, 09:50 | |
Ответы с готовыми решениями:
10
AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC HID Class на V-USB (статья USB для AVR. Часть 2.) USB для AVR. Часть 2. HID Class на V-USB USB -> AVR -> RS-485 |
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
22.12.2015, 10:19 | 2 |
ИМХО: Сказать: Атмел, давай до свидания! Взять stm32f072
Плюсы: 1 Дешевле 2. Производительней 3. Аппаратный USB 2.0 4. Таймеров до фига Минусы(я их не считаю минусами, но для начинающего) 1. Сложней 2. На русскоязычных форумах очень мало инфы 3. На F072 и на буржуйских не густо 4. Лутом плату тяжело сделать.
0
|
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
|
22.12.2015, 11:16 [ТС] | 3 |
Пробывали на rasbery с 500mhz с отсылкой информации через ethernet..
те же глюки.. Желательно конечно AVR так как код написан уже под него.. Есть такие МК как AT90USB.. Хотелось бы узнать ваше мнение..может сия микросхемина мне помочь??
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
22.12.2015, 11:31 | 4 |
не забывайте, что там ОС крутится и замете не реал тайм
не успел попробовать не чего про этот чип сказать.
1
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
22.12.2015, 11:50 | 5 |
Че-то как-то очень похоже на программную проблему. Например, при вычитке данных из регистров для их передачи. Покажите эту часть кода. Вы должны использовать буфер для отправки значения, а не читать значение таймера на ходу.
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
||||||
22.12.2015, 11:58 | 6 | |||||
Уважаемый Voland_ вот что имеет ввиду
1
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
22.12.2015, 12:36 | 7 |
примерно так ). Только желательно бы сделать переменной timer - 'volatile'.
поддерживаю. Хотя, возможно на высоких частотах тактования и вытянет - AVR ж можно до 20МГц тактовать. А это не 8 штатных...
0
|
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
|
|
22.12.2015, 12:56 | 8 |
согласен. Но то не код, а идея. Даже не идея, а патерн проектирования
Добавлено через 8 минут V-USB AVR в этом проекте кварц 12 мГц имеет сакральный смысл, так что 20 не прокатит без серьезной переделки кода. Добавлено через 8 минут , а можно схематично Вашу реализацию, я как раз сегодня получаю плату на stm32f072, проекта под неё нет, хочу "шаблончик" сделать на будущие.
0
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
22.12.2015, 13:41 | 9 |
Ну, у меня нет особого решения для передачи данных по USB. я брал решения из примеров от ST. Если не найдете, я закину, только ж у меня под 103ю и 105ю, а не 072ю ).
Не по теме: Я делал реализацию VCP, и там пришлось делать FIFO, причем особо выпендреный, потому что скорости на F103 в принципе хватало, но иногда он "отпадал". В итоге отказался в пользу другого решения, так и не разобравшись чья это проблема - стека в STM32 или какого-то железячного бага.
0
|
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
|
||||||
22.12.2015, 16:17 [ТС] | 10 | |||||
Витальич, Voland_,
происходит примерно следующее.. подсчёт организован на основании ещё одной задействованной ноги МК - если на ней 1, то счётчик считает импульсы по одному каналу, соответственно в обратном случае уже другой счётчик по другому..
Кварц на контроллере 16 mhz.
0
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
22.12.2015, 16:40 | 11 |
olegjan, присмотритесь к коду, который вам выложил г-н Витальич. Его вариант будет работать намного лучше, т.к. ваш алгоритм вообще непонятно что считает. В главном потоке можно использовать "циклы ожидания" while(...) по условию, не детерминированному по времени. Однако, остальная работа должна тогда выполняться в прерываниях. Если же это невозможно, то есть когда надо и "следить за входами" и "обрабатывать USB", этих циклов быть не должно - ограничьтесь структурами if(){...} и включите их набор в главный бесконечный цикл. Таким образом ни одна из подзадач не будет оставаться без внимания.
Но подход к задаче с использованием прерываний в вашем случае будет намного предпочтительнее. 500мкс - не так и много, с учетом того, что на 8 тактов проц тратит 1мкс. Для задач эмуляции интерфейса USB это критично.
2
|
22.12.2015, 16:40 | |
22.12.2015, 16:40 | |
Помогаю со студенческими работами здесь
11
AVR USB осциллограф USB для AVR Светофор AVR -- USB USB программатор AVR USB ИК приёмник на AVR V-USB на AVR ATmega32 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |