Страница 1 из 1
Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 16:48:24
Tol19
Добрый день! Есть у меня одна задача для начинающего: сделать шестиканальный вольтметр с индикацией на HD44780 и передачей на ПК по USb. (схема прилагается - не плеваться, делал сам). Решил сразу писать на си (основы ассемблера знаю). Проблема в том что у меня получилось как бы два проекта: один чистый вольтметр на 6 каналов и индикацией (еле-еле справился), в второй передача данных по usb (нашел статью с разбором и исходником). В системе usb определяется как hid-устройство. Прошу помощи в объединении этих двух проектов и оптимизации кода, ибо сам не справился...
http://img.radiokot.ru/files/113737/med ... l61kq3.GIF
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 17:19:27
COKPOWEHEU
А на каком языке вы пытаетесь писать? Для usb-hid используется avr-gcc, да еще устаревший, а для вольтметра - cvavr что ли, к тому же, с кривым форматированием.
Выберите один язык (диалект) и напишите на нем.
Проблема в том что у меня получилось как бы два проекта
А мне кажется, что у _вас_ получилось не более 0.5 проекта: реализация usb-hid утащена с easyelectronics вообще без изменений, а в вольтметре больше половины занимают стандартные cvavr (или еще какие) библиотеки.
Таким образом, есть 3 варианта:
1. Ждать альтруистов
2. Идти в раздел "работа"
3. Разбираться. Вот в этом вам тут помогут, главное продемонстрируйте что готовы учиться.
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 17:30:45
Tol19
Мне все-таки ближе 3 вариант. Вольтметр написан под cvavr, и писать буду на нем. По сути чтобы реализовать usb-hid мне достаточно вместо 3 байт для передачи состояния светодиода сделать 6 для передачи значения каждого канала при опросе от ПК? Или лучше сделать 6 буферов, в которые писать значения каждого измерения, а затем, при опросе ПК их туда отправлять?
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 17:48:58
COKPOWEHEU
Tol19 писал(а):Мне все-таки ближе 3 вариант. Вольтметр написан под cvavr, и писать буду на нем.
Хорошо. А собрать usb-hid на нем удалось? Кстати, надеюсь, cvavr выбран не ради автоконфигуратора? А то он ужасен...
Tol19 писал(а):
По сути чтобы реализовать usb-hid мне достаточно вместо 3 байт для передачи состояния светодиода сделать 6 для передачи значения каждого канала при опросе от ПК? Или лучше сделать 6 буферов, в которые писать значения каждого измерения, а затем, при опросе ПК их туда отправлять?
Если я правильно помню (а смотрел я давно, так что запросто могу ошибаться), по стандарту передавать больше 8 байт за раз нельзя. АЦП в AVR-ках 10-битный, так что можно разделить 6 каналов на 2 посылки по 3 измерения. Например, 3 старших бита - номер канала, потом 3 бита пустых и 10 бит данных. Можно добавить oversampling и поднять точность до 13 бит, например, тогда пустого места в посылках не останется.
Опрашивать АЦП, наверное, лучше в прерывании.
На чем будете писать программу на стороне ПК и что она будет уметь делать?
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 17:54:26
Z_h_e
COKPOWEHEU писал(а):Если я правильно помню (а смотрел я давно, так что запросто могу ошибаться), по стандарту передавать больше 8 байт за раз нельзя.
Если Вы про HID, то ошибаетесь. А на счет V-USB я ничего не знаю.
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 18:09:45
КРАМ
COKPOWEHEU писал(а):
Если я правильно помню (а смотрел я давно, так что запросто могу ошибаться), по стандарту передавать больше 8 байт за раз нельзя.
Ошибаетесь.
Предел для HID USB - 64 байта за 1 кадр (1 мс) в одну сторону. То есть 64 кбайт/сек.
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 18:38:38
Tol19
USB-HID собрал, работает, с этим нет проблем. на easyelectronics для программы на ПК используют С++. Я попробую использовать C#. По сути, данное устройство является попыткой написать заново USB-осциллографа:
http://cxem.net/izmer/izmer77.php. В том случае, исходник программы был написан на C#, я оставил только работу с библиотекой связи с USB, остальное переписал с нуля используя компонент zedgraph. По сути ПК принимает от устройства буфер из точек, и соединяет их линией. В новом устройстве чуть-чуть другая задача: рисовать осцилограмму на ПК одновременно с 6 каналов на разных графиках, и контроллировать заданный уровень напряжения на канале. Если он становится меньше, на ПК выходит предупреждение. Вот ка-то в краткости так...
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 19:09:48
COKPOWEHEU
Спасибо что поправили.
Тогда можно слать все 6 каналов одним пакетом. Впрочем, 6 каналов по 10 бит это 60 бит или чуть менее 8 байт, так что и в 8-байтный пакет уложиться можно если сжимать.
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 20:20:34
Tol19
Тогда посоветуйте, пожалуйста, в каком направлении дальше двигаться
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вс ноя 06, 2016 21:14:47
COKPOWEHEU
Обработка АЦП и запись результатов в буфер.
По запросу хоста собирать их в пакет и выдавать по usb.
Раз в определенное время обновлять информацию на ЖК. Можно добавить условие, что информация в буферах должна измениться, но это уже к оптимизации.
В чем проблема-то?
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Вт ноя 08, 2016 20:06:09
Tol19
Проблема в том, что вольтметр собран под codevision, а вот usb-hid под avr studio. Помогите разобраться, как перенести вольтметр из codevision? Как прикрутить библиотеки к проекту?
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Ср ноя 09, 2016 00:09:16
COKPOWEHEU
Tol19 писал(а):USB-HID собрал, работает, с этим нет проблем.
То есть все-таки не собрали usb-hid в cvavr.
Помогите разобраться, как перенести вольтметр из codevision? Как прикрутить библиотеки к проекту?
В чем именно вопрос? Как добавить файл исходного кода к проекту, как вообще писать на Си или даташитовские способы работы с АЦП?
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Ср ноя 09, 2016 20:08:15
Tol19
Нет не получилось, так как вариант usb-hid под cvavr не сможет работать (вычитано на просторах сети), только в avrstudio. Поэтому я хочу в готовый код usb-hid дописать вольтметр и индикацию. И основная проблема в индикации, так как у меня не получается работать в avrstudio с библиотекой lcd.h от cvavr
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Ср ноя 09, 2016 20:12:01
ARV
Tol19 писал(а):основная проблема в индикации, так как у меня не получается работать в avrstudio с библиотекой lcd.h от cvavr
а вы не используйте библиотеки от CVAVR, а используйте библиотеки под AVR-GCC, например,
вот так
Re: Оптимизация кода и объединение двух проектов в один
Добавлено: Ср ноя 09, 2016 20:37:14
Tol19
Нашел один пример:
http://radioparty.ru/prog-avr/program-c ... on-lib-lcd Но студия вываливается с ошибками. Вот сам проект: