Comments 35
Спасибо, то что надо.
Весьма полезный материал, спасибо!
Признаюсь — половину не понял, но заинтересовал результат и удивительно короткий путь для его получения. Думал все в разы сложнее. Спасибо, думаю Ваш пост стал моим стимулом покопать в сторону программирования МК поглубже, научиться новому!)
То что нужно, первая + эта статья. Спасибо!
Повозился с драйверами нестандартных устройств еще под Досом.
Даже тот же Паскаль пользовал, только asm писал в процедурах.
Там было намного сложнее с отладкой (голова на 99% инструмент).
Но под виндой уже «не потянул» — пару лет не было нормальной инфы по встраиванию драйвера в список оборудования. Пришлось переходить на готовые аналоги — уже как черный ящик.
Вижу, что ничего страшного. Спасибо, лампа настроения работает :)
Даже тот же Паскаль пользовал, только asm писал в процедурах.
Там было намного сложнее с отладкой (голова на 99% инструмент).
Но под виндой уже «не потянул» — пару лет не было нормальной инфы по встраиванию драйвера в список оборудования. Пришлось переходить на готовые аналоги — уже как черный ящик.
Вижу, что ничего страшного. Спасибо, лампа настроения работает :)
А не могли бы для ну совсем валенков написать как собрать на коленке программатор и что делать, если «всё собрал по схеме, но ничего не работает».
У вас не заработала ни одна из двух схем простейших программаторов? Или просто заранее хочется знать причину возможной неудачи?
В своё время делал по «простейшим схемам» программатор для ATTiny, так ничего и не заработало. Поэтому заранее хочу знать обо всех подводных камнях.
UFO just landed and posted this here
Простейший программатор для ATTiny насколько я помню — это просто выводы с LPT порта + резисторы. «Схема» которую очень сложно заставить не работать ) Вы делали что-то подобное?
Да все возможные ошибки не перечислить. Возможно все: от непропая, до несовместимости компа с софтом.
Собрать схему программатора, вставить МК, подключить к ПК.
Запустить софт, указать тип программатора, нажать кнопку Hardware test. МК должен определиться корректно.
Открыть .hex файл бутлоадера, нажать Program all, затем Verify All.
Если ошибок не обнаружено — значит все получилось.
Мне будет гораздо проще помочь вам в конкретной проблеме (если они возникнут), нежели писать пошаговую инстукцию на простейшие действия.
Попробуйте. Ну, а если вам жалко времени — купите готовый заведомо рабочий программатор. К примеру, PicKit2.
Собрать схему программатора, вставить МК, подключить к ПК.
Запустить софт, указать тип программатора, нажать кнопку Hardware test. МК должен определиться корректно.
Открыть .hex файл бутлоадера, нажать Program all, затем Verify All.
Если ошибок не обнаружено — значит все получилось.
Мне будет гораздо проще помочь вам в конкретной проблеме (если они возникнут), нежели писать пошаговую инстукцию на простейшие действия.
Попробуйте. Ну, а если вам жалко времени — купите готовый заведомо рабочий программатор. К примеру, PicKit2.
UFO just landed and posted this here
Есть, только не так прозрачно.
Открытие порта и назначение параметров: (в argv[1] — имя порта /dev/ttyUSB1 например)
Все, порт открыт.
Дальше через write писать в fd.
signal_handler_IO — функция коллбека типа:
Она вызывается всегда когда приходит новый текст.
wait_flag — флаг, которым можно контролировать пришел ответ от девайса или нет.
После записи write нужно делать ожидание ответа.
Конечно можно прикрутить таймауты.
Может, конечно, есть и библиотеки, упрощающие задачу.
Открытие порта и назначение параметров: (в argv[1] — имя порта /dev/ttyUSB1 например)
#include <fcntl.h>
#include <termios.h>
#include <linux/types.h>
#include <sys/signal.h>
int fd;
bool wait_flag=true;
struct sigaction saio;
...
fd=open(argv[1],O_RDWR | O_NOCTTY | O_EXCL);
saio.sa_handler = signal_handler_IO;
sigemptyset(&saio.sa_mask); //saio.sa_mask = 0;
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,NULL);
fcntl(fd, F_SETOWN, getpid());
fcntl(fd, F_SETFL, FASYNC);
termios options;
tcgetattr(fd, &options);
cfsetispeed(&options,B19200);
cfsetospeed(&options,B19200);
options.c_iflag &= ~IGNPAR;
options.c_iflag &= ~CSTOPB;
options.c_oflag = 0;
options.c_lflag = 0; //ICANON;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 1;
options.c_cflag |= (CS8 | CLOCAL | CREAD | CRTSCTS);
Все, порт открыт.
Дальше через write писать в fd.
signal_handler_IO — функция коллбека типа:
void signal_handler_IO (int status)
{
int rnum=read(fd,buf,100); // читать 100 символов в буфер из порта, читать нужно с избытком, в rnum будет реальное количество прочитанного
...
wait_flag = false;
}
Она вызывается всегда когда приходит новый текст.
wait_flag — флаг, которым можно контролировать пришел ответ от девайса или нет.
После записи write нужно делать ожидание ответа.
while (wait_flag==true);
wait_flag=true;
Конечно можно прикрутить таймауты.
Может, конечно, есть и библиотеки, упрощающие задачу.
Qt не имеет модуля для работы с USB устройствами. Можете посмотреть libusb.
вот бы теперь тоже самое, только для Cortex M3
В избранное.
А без serial нельзя обойтись?
Например, чтобы вообще не ставить драйвер, сделать обмен с устройством через HID.
Например, чтобы вообще не ставить драйвер, сделать обмен с устройством через HID.
Можно, но будет заметно сложнее. Пример для AVR — 1010.co.uk/avrhid.html
www.lvr.com/hidpage.htm тут для разных процессоров (в том числе и пиков).
Сам работал с вот этим примером: www.obdev.at/products/vusb/automator.html
Всё довольно просто. Самое сложное в HID — сгенерить правильный дескриптор. А сама работа с USB — может быть как аппаратной, так и с программной эмуляцией.
Сам работал с вот этим примером: www.obdev.at/products/vusb/automator.html
Всё довольно просто. Самое сложное в HID — сгенерить правильный дескриптор. А сама работа с USB — может быть как аппаратной, так и с программной эмуляцией.
На аппаратном USB не сильно сложнее будет, а по вашей ссылке опять же софтверный USB, где основная сложность как раз в части firmware.
Можно обойтись и без CDC. И даже без HID.
Если захотеть, можно сделать очень многое.
Но я решил для начала рассмотреть самый простой в реализации, а не удоный для пользователя вариант.
Если захотеть, можно сделать очень многое.
Но я решил для начала рассмотреть самый простой в реализации, а не удоный для пользователя вариант.
Для большей устойчивости связи все-таки рекомендуется использовать такое подключение к USB:
Думается эта схема для контроллеров, где USB реализуется софтверно (VUSB для AVR напрмиер), а значит и порты ввода/вывода работают на логических уровнях 5V. Тогда правда стоит или занижать питание (если контроллер позволяет) или ставить стабилитроны как у вас в схеме, т.к напряжение на дифф. паре около 3V.
В этом МК явно есть аппаратный USB судя по подписям ножек, а значит и напряжения выдаются соответствующие.
В этом МК явно есть аппаратный USB судя по подписям ножек, а значит и напряжения выдаются соответствующие.
Прежде всего необходимо заглянуть в даташит на используемый МК. Повторю линк: PIC18F2455/2550/4455/4550
Data Sheet.
Более 400 страниц полезной информации, там можно найти всю необходимую информацию до последних мелочей.
И про подключение USB там есть:
Data Sheet.
Более 400 страниц полезной информации, там можно найти всю необходимую информацию до последних мелочей.
И про подключение USB там есть:
Не дописал…
Сразу видно, что в МК содержится собственный регулятор 3.3в, потому не требуется ни внешнего, ни мороки с диодами и резисторами.
Так же на схеме видно, что можно использовать внешний регулятор, но нужно обязательно отключить внутренний. Тем самым (я предполагаю) освободится 14 нога МК, на которой сейчас висит конденсатор.
Сразу видно, что в МК содержится собственный регулятор 3.3в, потому не требуется ни внешнего, ни мороки с диодами и резисторами.
Так же на схеме видно, что можно использовать внешний регулятор, но нужно обязательно отключить внутренний. Тем самым (я предполагаю) освободится 14 нога МК, на которой сейчас висит конденсатор.
Как я понимаю в данном ПИКе просто встроено что-то типа FTDI232? Или USB полностью софтверный?
Недавно собирался старый комп собрать ради ком порта. Теперь буду с USB работать)
Спасибо!!!
Спасибо!!!
Спасибо большое. Мне очень помог материал.
Разрабатываю цифро-анаолговое устройство.
Планирую использовать USB для управления и получения тестовых данных.
Разрабатываю цифро-анаолговое устройство.
Планирую использовать USB для управления и получения тестовых данных.
Sign up to leave a comment.
Создаем простейшее usb-устройство для общения со своей программой