16FUSB или софтварный USB на младших PIC-ах

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

16FUSB или софтварный USB на младших PIC-ах

Post by Tronix »

Никто не пробовал юзать https://code.google.com/p/16fusb/? Это вроде как софтварный USB 1.1 стек на PIC16F628.

И там же очень интересный пример, DirectIO : по USB можно читать-писать 8 бит данных, два бита контроля. И еще есть бит статуса - только чтение. Итого практически халявное преобразование USB <-> parallel interface.

Я хочу его использовать для 16F819, с ходу код не собрался для 819 - ругается на UDATA, мол не лезет куда-то там в какой-то банк, на UDATA_OVR.. Надо разбираться. Автор вроде утверждает, что код использует только основной банк памяти, а в остальные не лезет.. Если у кого вдруг под рукой есть MPASM, может посмотрите, поможете скомпилить для 819?
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Интересный пример, в первый раз вижу...
А может тебе для оригинального теста и попробовать на самОм PIC16F628, а потом уже переносить?

И что-то я не понял, как со стороны PC посылать байты...

fhandler = OpenUSBport as file(.... )

и начинаем зашвыривать байты в этот файл что ли?
iLavr
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Честно - я пока в пример на хосте (винде) даже не смотрел. Я думал там обычные процедуры типа SendByte и тд.. Там есть демонстрашка на VisualC, там галочками биты отмечаешь и кнопка Send или Read...

Хочется все-таки под 819 собрать - какая разница-то по сути? У 819 разве что UART нет, но он тут и не нужен. По памяти - одинаково вроде. Просто 819 у меня давно лежит, куда применить - не знаю.

Вообще, конечная цель - прикрутить YM2149F к USB. У синтезатора как раз 8 бит - данные и два управляющих сигнала BC1 и BDIR. Ну есть еще RESET, с ним пока я не решил окончательно. На первое время можно рубильник (кнопку) прикрутить, на крайняк.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Там просто помимо D+ и D- еще на одной ноге через диод отлавливаются то ли начало то ли конец импульса (не вникал особо), и это RB2. Итого под USB занято не две, а три ноги порта B. А бит статуса походу автор отвел на RA5, он же MCLR. Насколько помню именно из-за этого (MCLR) в PIC16 таких серий он (RA5) только на чтение. Наверное по этому бит статуса только на чтение. Неплохо было бы их поменять местами, RB2 и RA5, что бы высвободить третий контрольный бит на чтение-запись.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Tronix wrote:Хочется все-таки под 819 собрать - какая разница-то по сути?
По сути-то разница обычно небольшая... но её-то и надо тщательно отследить, чтобы заработало.

Я уже больше года как купил себе PIC16F628-х, но так до сих пор и не перенёс на них свой
собственный проект с PIC16F84А, даром, что сам я весь код свой хорошо знаю.

А вот с пол-пинка в лоб - у меня на PIC16F628 так и не заработало...
iLavr
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Купил седня PIC16F628A пару. Думаю не кварц прицепить, а генератор собрать на 74hc04 или вообще генератор в корпусе таком металлическом заюзать (нечаянно обнаружил в распайке). Тем самым освобожу один пин МК, нужный мне для RESET на ямаху.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Спаял строго по схеме, кроме кварца. Его заменил на кварцевый генератор 24MHz. Изменил конфиг на ExtOSC. Включил - работает. Попросил драйвера, дал ему драйвер по ссылке с проекта, установился на x64 без проблем. Запустил демонстрашку, поигрался записью байт - все работает отлично. Единственное о чем нужно помнить - RA4 open drain, туда выведен один из двух битов управления. Его нужно обязательно подтянуть к питанию, иначе не будет высокого уровня.

Щаз цепляю его к YM2149, потом нужно будет запилить третий бит управления на высвободившуюся ногу RA6 (CLKOUT), чтоб было три управляющих сигнала. Ну и потом написать обертку для плеера ZXTunes
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Tronix wrote:Запустил демонстрашку, поигрался записью байт - все работает отлично.
А в обратку - в РС - он какие-то биты может вернуть? Ну типа BUSY для LPT ?
iLavr
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Lavr wrote:
Tronix wrote:Запустил демонстрашку, поигрался записью байт - все работает отлично.
А в обратку - в РС - он какие-то биты может вернуть? Ну типа BUSY для LPT ?
Конечно может, для этого есть как раз статусный пин (RA5). Он только на чтение, ибо RA5 в этом семействе input only. Так же можно читать и байт данных, и два бита управления. Если использовать внешний тактовый генератор заместо кварца, то высвобождается еще один пин RA6. Его тоже можно и читать и писать, только нужно немножко библиотеку подправить (в процессе).
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Вощем прикрутил YM2149F к сабжу, работает оооочень медленно, к сожалению :( Запись звука получается такой:

https://soundcloud.com/tronix286/joke-o ... by-surgeon

В то время, когда обычный LPT вполне справлялся.

Попробовать выкинуть ответ от контроллера к хосту? Он там вроде ACK высылает потом после передачи. Мне он не критичен. Так же выкинуть все, что связано с чтением. Мне нужна только запись. Попробую, но похоже - не взлетело, хотя я и надеялся. Придется юзать с аппаратным USB.

Либа имеет право на жизнь, но увы, только для совсем медленных девайсов, когда скорость передачи не важна - только лишь бы дошло. Дойдет, но долго.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Может его разогнать еще в двое, нафиг. Читал где-то, что PICи гонятся тока в путь. 48MHz вместо дефолтных 20MHz меня бы думаю устроило.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Как думаете, нельзя на простой логике умножить тактовый сигнал 24MHz надвое, чтоб получить 48MHz?
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

Значит задал ему TRISы сразу после включения и потом нигде не меняются, а то он в каждой процедуре записи устанавливал направление. Так же выкинул из кода все, что относится к чтению и записи 4-битных ниблов. Оставил только WriteByte и WriteCtrl. Чуть стало побыстрее, но глобально ситуацию конечно не изменило :(
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Tronix wrote:Как думаете, нельзя на простой логике умножить тактовый сигнал 24MHz надвое, чтоб получить 48MHz?
Можно, но это не простая логика нужна, а что-то типа 1531...

Image

А ты можешь сделать такой опыт - посылать ему в цикле только код и инверсию
этого кода и посмотреть максимальную частоту на выходе?
iLavr
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Post by Tronix »

В смысле слать бит 1 затем 0 затем 1 и тд? Можно в принципе, могу даже наверное осциллографом замерить, но это среди рабочей недели как время будет.

PS: Разогнать не получилось - там обработка USB завязана на высчитанные предварительно машинные такты. Увеличиваем частоту - все расчеты сдвигаются -> устройство перестает опознаваться компом.