Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
1

AVR и USB

22.12.2015, 09:50. Показов 552. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравтсвуйте!!
Возникла необходимость сборки железки на МК AVR..
Суть её-непрерывно подсчитывать импульсы по двум каналам и фиксировать значения на каждом из каналов каждые 500 мкс, путём передачи на хост сообщений посредством usb, причём момент передачи никак не должен отражаться на подсчёте..

Пробывал собирать на Atmega128 (МК):
Завел на МК V-USB..два канала завел на ноги МК для внешнего тактирования двух таймеров, в прошивке на МК реализовал всё вышесказанное: таймеры считают импульсы и передают их количество по usb на хост..

И вот как раз, в последнем моменте возникла проблема..
в момент, когда контроллер передаёт значения через V-USB на хост, сбиваются значения таймеров..
я так понял, что проблема в прерываниях, которые использует V-USB..

Собственно вопрос, на какой AVR можно реализовать сие?
Заранее большое количество искромётных спасиб!!)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2015, 09:50
Ответы с готовыми решениями:

AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC
Люди помогите плз. не могу разобраться. приобрел этот чудный девайс (AVR AVRISP STK500 V3.0 USB...

HID Class на V-USB (статья USB для AVR. Часть 2.)
Здравствуйте. Решил перейти от библиотеки Libusb на HIDlibrary и как раз нашел эту статью. Но...

USB для AVR. Часть 2. HID Class на V-USB
Прочитал статью "USB для AVR. Часть 2. HID Ctoss на V-USB", решил собрать все по примеру и все...

USB -> AVR -> RS-485
Доброго всем времени суток! Понадобилось мне создать такой вот преобразователь из USB в RS-485....

10
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
Цитата Сообщение от olegjan Посмотреть сообщение
Пробывали на rasbery с 500mhz с отсылкой информации через ethernet..
не забывайте, что там ОС крутится и замете не реал тайм
Цитата Сообщение от olegjan Посмотреть сообщение
Есть такие МК как AT90USB..
не успел попробовать не чего про этот чип сказать.
1
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
22.12.2015, 11:50 5
Цитата Сообщение от olegjan Посмотреть сообщение
в момент, когда контроллер передаёт значения через V-USB на хост, сбиваются значения таймеров..
Че-то как-то очень похоже на программную проблему. Например, при вычитке данных из регистров для их передачи. Покажите эту часть кода. Вы должны использовать буфер для отправки значения, а не читать значение таймера на ходу.
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
22.12.2015, 11:58 6
Уважаемый Voland_ вот что имеет ввиду
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int Timer[5];
 
int __timer;
char flag = 0;
 
 
__interrupt void timer1_500()
{
 __timer = TIMER; //TIMER - регистры счетчика
TIMER = 0;
flag = 1;
}
 
 
void main
{
int count = 0;
 while(1)
  {
    if(flag == 1)
     {
      Timer[count++] = __timer;
    flag = 0;
     }
 
   Функция отправки данных();
  }
}
ИМХО: При ваших параметрах программный V-USB не потянет.
1
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
22.12.2015, 12:36 7
Цитата Сообщение от Витальич Посмотреть сообщение
имеет ввиду
примерно так ). Только желательно бы сделать переменной timer - 'volatile'.
Цитата Сообщение от Витальич Посмотреть сообщение
При ваших параметрах программный V-USB не потянет.
поддерживаю. Хотя, возможно на высоких частотах тактования и вытянет - AVR ж можно до 20МГц тактовать. А это не 8 штатных...
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
22.12.2015, 12:56 8
Цитата Сообщение от Voland_ Посмотреть сообщение
Только желательно бы сделать переменной timer - 'volatile'.
согласен. Но то не код, а идея. Даже не идея, а патерн проектирования

Добавлено через 8 минут
Цитата Сообщение от Voland_ Посмотреть сообщение
AVR ж можно до 20МГц
V-USB AVR в этом проекте кварц 12 мГц имеет сакральный смысл, так что 20 не прокатит без серьезной переделки кода.

Добавлено через 8 минут
Цитата Сообщение от Voland_ Посмотреть сообщение
примерно так
, а можно схематично Вашу реализацию, я как раз сегодня получаю плату на 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 или какого-то железячного бага.
а режим HS я не пробовал, т.к. не было железа, к сожалению. FS работал нормально, и на 105й и на 103й, хотя у них USB очень разные. Какой в STM32F072 USB - я не смотрел, он может отличаться и от этих двух озвученных, т.к. это М0 а не М3. М3 в этом плане круче, потому что у него больше каналов DMA и полнее реализованы интерфейсы.

0
11 / 11 / 1
Регистрация: 14.07.2014
Сообщений: 186
22.12.2015, 16:17  [ТС] 10
Витальич, Voland_,
происходит примерно следующее..
подсчёт организован на основании ещё одной задействованной ноги МК - если на ней 1, то счётчик считает импульсы по одному каналу, соответственно в обратном случае уже другой счётчик по другому..

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    while(1)
        {
        while (set_start_calc_pack)
        {
            TCNT1 = 0;
            while (PINE & _BV(DDE4)) usbPoll(); // Пока сигнал на PE4 не станет низким стоим на месте, возвращаем VUSB признак жизни
            us_pack [s_numer_buffer_us] = TCNT1;;
                s_numer_buffer_us++;
 
            TCNT2 = 0;
            while (!(PINE & _BV(DDE4))) usbPoll(); // Пока сигнал на PE4 не станет высоким стоим на месте, возвращаем VUSB признак жизни
            us_pack [s_numer_buffer_us] = TCNT2;
            s_numer_buffer_us++;
 
            if (s_numer_buffer_us == sizeof(us_pack)) s_numer_buffer_us = 0;
            }
все значения таймеров перед отправкой записываются в буфер V-USB, а потом отправляются вызовом метода V-USB..

Кварц на контроллере 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2015, 16:40
Помогаю со студенческими работами здесь

AVR USB осциллограф
Здравствуйте! Появилась задача сделать трехканальный USB-осциллограф для сбора данных с датчиков -...

USB для AVR
Здравствуйте. Прочитал статью USB для AVR. Часть 2. HID Ctoss на V-USB , скачал пример проекта,...

Светофор AVR -- USB
Есть светофор на три лампочки нужно управлять им через ЮСБ с компьютера под Линукс (!) как...

USB программатор AVR
Здравствуйте! Нашел USB программатор от МАСТЕР КИТ, может кто пользовался, как он в работе, удобен...

USB ИК приёмник на AVR
Конструкция с сайта медведа (http://avrdivices.ru/usb-ik-prymnik-na-avr) Хотел это чудо повторить...

V-USB на AVR ATmega32
Всем привет!) такое у меня случилось.. ставлю прошивку на AVR ATmega 32 c V-USB как HID...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru