Как стать автором
Обновить

Комментарии 35

Спасибо, то что надо.
Весьма полезный материал, спасибо!
Признаюсь — половину не понял, но заинтересовал результат и удивительно короткий путь для его получения. Думал все в разы сложнее. Спасибо, думаю Ваш пост стал моим стимулом покопать в сторону программирования МК поглубже, научиться новому!)
То что нужно, первая + эта статья. Спасибо!
Повозился с драйверами нестандартных устройств еще под Досом.
Даже тот же Паскаль пользовал, только asm писал в процедурах.
Там было намного сложнее с отладкой (голова на 99% инструмент).
Но под виндой уже «не потянул» — пару лет не было нормальной инфы по встраиванию драйвера в список оборудования. Пришлось переходить на готовые аналоги — уже как черный ящик.
Вижу, что ничего страшного. Спасибо, лампа настроения работает :)
А не могли бы для ну совсем валенков написать как собрать на коленке программатор и что делать, если «всё собрал по схеме, но ничего не работает».
У вас не заработала ни одна из двух схем простейших программаторов? Или просто заранее хочется знать причину возможной неудачи?
В своё время делал по «простейшим схемам» программатор для ATTiny, так ничего и не заработало. Поэтому заранее хочу знать обо всех подводных камнях.
НЛО прилетело и опубликовало эту надпись здесь
Простейший программатор для ATTiny насколько я помню — это просто выводы с LPT порта + резисторы. «Схема» которую очень сложно заставить не работать ) Вы делали что-то подобное?
Я уже точно не помню, но наверняка что-то похожее. Откуда мне знать, почему она не заработала.
Да все возможные ошибки не перечислить. Возможно все: от непропая, до несовместимости компа с софтом.

Собрать схему программатора, вставить МК, подключить к ПК.
Запустить софт, указать тип программатора, нажать кнопку Hardware test. МК должен определиться корректно.
Открыть .hex файл бутлоадера, нажать Program all, затем Verify All.
Если ошибок не обнаружено — значит все получилось.

Мне будет гораздо проще помочь вам в конкретной проблеме (если они возникнут), нежели писать пошаговую инстукцию на простейшие действия.

Попробуйте. Ну, а если вам жалко времени — купите готовый заведомо рабочий программатор. К примеру, PicKit2.
НЛО прилетело и опубликовало эту надпись здесь
Есть, только не так прозрачно.
Открытие порта и назначение параметров: (в 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;

Конечно можно прикрутить таймауты.

Может, конечно, есть и библиотеки, упрощающие задачу.
НЛО прилетело и опубликовало эту надпись здесь
Так это уже код прошивки самого контроллера. Это уже не gcc насколько я понимаю, тут нужен свой компилятор. С этим не сталкивался, я писал работу с портом — только софтверную часть.
Думаю, найдется какой-то компилятор для линукса.
Посмотрел, JAL, который использует автор статьи, есть и для линукса.
Цитата с сайта:
Lastest release files (JALv2 2.4n):

README.txt
archive/README.txt
Binaries (win32 and linux with chipdef files)
archive/jalv24n.zip
Sources
archive/jalv24nsrc.zip
Qt не имеет модуля для работы с USB устройствами. Можете посмотреть libusb.
вот бы теперь тоже самое, только для Cortex M3
Перейдёте на другой МК — снова будете спрашивать где взять программу? Давайте уж как-нибудь сами, ладно.
Все-таки нашел время осмотреться…
А ведь в этом (изучение Cortex M0/M3) есть смысл.

Закажу себе для начала немного, может понравится лучше пиков (а то привыкну еще, потом не оттащить будет =) ).
А без serial нельзя обойтись?
Например, чтобы вообще не ставить драйвер, сделать обмен с устройством через HID.
Можно, но будет заметно сложнее. Пример для AVR — 1010.co.uk/avrhid.html
www.lvr.com/hidpage.htm тут для разных процессоров (в том числе и пиков).
Сам работал с вот этим примером: www.obdev.at/products/vusb/automator.html
Всё довольно просто. Самое сложное в HID — сгенерить правильный дескриптор. А сама работа с USB — может быть как аппаратной, так и с программной эмуляцией.
На аппаратном USB не сильно сложнее будет, а по вашей ссылке опять же софтверный USB, где основная сложность как раз в части firmware.
Можно обойтись и без CDC. И даже без HID.
Если захотеть, можно сделать очень многое.

Но я решил для начала рассмотреть самый простой в реализации, а не удоный для пользователя вариант.
Для большей устойчивости связи все-таки рекомендуется использовать такое подключение к USB:
Думается эта схема для контроллеров, где USB реализуется софтверно (VUSB для AVR напрмиер), а значит и порты ввода/вывода работают на логических уровнях 5V. Тогда правда стоит или занижать питание (если контроллер позволяет) или ставить стабилитроны как у вас в схеме, т.к напряжение на дифф. паре около 3V.
В этом МК явно есть аппаратный USB судя по подписям ножек, а значит и напряжения выдаются соответствующие.
Прежде всего необходимо заглянуть в даташит на используемый МК. Повторю линк: PIC18F2455/2550/4455/4550
Data Sheet
.
Более 400 страниц полезной информации, там можно найти всю необходимую информацию до последних мелочей.

И про подключение USB там есть:

Не дописал…

Сразу видно, что в МК содержится собственный регулятор 3.3в, потому не требуется ни внешнего, ни мороки с диодами и резисторами.

Так же на схеме видно, что можно использовать внешний регулятор, но нужно обязательно отключить внутренний. Тем самым (я предполагаю) освободится 14 нога МК, на которой сейчас висит конденсатор.
Как я понимаю в данном ПИКе просто встроено что-то типа FTDI232? Или USB полностью софтверный?
Данный пик имеет аппаратный usb.
Недавно собирался старый комп собрать ради ком порта. Теперь буду с USB работать)
Спасибо!!!
Спасибо большое. Мне очень помог материал.
Разрабатываю цифро-анаолговое устройство.
Планирую использовать USB для управления и получения тестовых данных.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории