16FUSB или софтварный USB на младших PIC-ах
Moderator: Shaos
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
16FUSB или софтварный USB на младших PIC-ах
Никто не пробовал юзать https://code.google.com/p/16fusb/? Это вроде как софтварный USB 1.1 стек на PIC16F628.
И там же очень интересный пример, DirectIO : по USB можно читать-писать 8 бит данных, два бита контроля. И еще есть бит статуса - только чтение. Итого практически халявное преобразование USB <-> parallel interface.
Я хочу его использовать для 16F819, с ходу код не собрался для 819 - ругается на UDATA, мол не лезет куда-то там в какой-то банк, на UDATA_OVR.. Надо разбираться. Автор вроде утверждает, что код использует только основной банк памяти, а в остальные не лезет.. Если у кого вдруг под рукой есть MPASM, может посмотрите, поможете скомпилить для 819?
И там же очень интересный пример, DirectIO : по USB можно читать-писать 8 бит данных, два бита контроля. И еще есть бит статуса - только чтение. Итого практически халявное преобразование USB <-> parallel interface.
Я хочу его использовать для 16F819, с ходу код не собрался для 819 - ругается на UDATA, мол не лезет куда-то там в какой-то банк, на UDATA_OVR.. Надо разбираться. Автор вроде утверждает, что код использует только основной банк памяти, а в остальные не лезет.. Если у кого вдруг под рукой есть MPASM, может посмотрите, поможете скомпилить для 819?
-
- Supreme God
- Posts: 16676
- Joined: 21 Oct 2009 08:08
- Location: Россия
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Честно - я пока в пример на хосте (винде) даже не смотрел. Я думал там обычные процедуры типа SendByte и тд.. Там есть демонстрашка на VisualC, там галочками биты отмечаешь и кнопка Send или Read...
Хочется все-таки под 819 собрать - какая разница-то по сути? У 819 разве что UART нет, но он тут и не нужен. По памяти - одинаково вроде. Просто 819 у меня давно лежит, куда применить - не знаю.
Вообще, конечная цель - прикрутить YM2149F к USB. У синтезатора как раз 8 бит - данные и два управляющих сигнала BC1 и BDIR. Ну есть еще RESET, с ним пока я не решил окончательно. На первое время можно рубильник (кнопку) прикрутить, на крайняк.
Хочется все-таки под 819 собрать - какая разница-то по сути? У 819 разве что UART нет, но он тут и не нужен. По памяти - одинаково вроде. Просто 819 у меня давно лежит, куда применить - не знаю.
Вообще, конечная цель - прикрутить YM2149F к USB. У синтезатора как раз 8 бит - данные и два управляющих сигнала BC1 и BDIR. Ну есть еще RESET, с ним пока я не решил окончательно. На первое время можно рубильник (кнопку) прикрутить, на крайняк.
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Там просто помимо D+ и D- еще на одной ноге через диод отлавливаются то ли начало то ли конец импульса (не вникал особо), и это RB2. Итого под USB занято не две, а три ноги порта B. А бит статуса походу автор отвел на RA5, он же MCLR. Насколько помню именно из-за этого (MCLR) в PIC16 таких серий он (RA5) только на чтение. Наверное по этому бит статуса только на чтение. Неплохо было бы их поменять местами, RB2 и RA5, что бы высвободить третий контрольный бит на чтение-запись.
-
- Supreme God
- Posts: 16676
- Joined: 21 Oct 2009 08:08
- Location: Россия
По сути-то разница обычно небольшая... но её-то и надо тщательно отследить, чтобы заработало.Tronix wrote:Хочется все-таки под 819 собрать - какая разница-то по сути?
Я уже больше года как купил себе PIC16F628-х, но так до сих пор и не перенёс на них свой
собственный проект с PIC16F84А, даром, что сам я весь код свой хорошо знаю.
А вот с пол-пинка в лоб - у меня на PIC16F628 так и не заработало...
iLavr
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Спаял строго по схеме, кроме кварца. Его заменил на кварцевый генератор 24MHz. Изменил конфиг на ExtOSC. Включил - работает. Попросил драйвера, дал ему драйвер по ссылке с проекта, установился на x64 без проблем. Запустил демонстрашку, поигрался записью байт - все работает отлично. Единственное о чем нужно помнить - RA4 open drain, туда выведен один из двух битов управления. Его нужно обязательно подтянуть к питанию, иначе не будет высокого уровня.
Щаз цепляю его к YM2149, потом нужно будет запилить третий бит управления на высвободившуюся ногу RA6 (CLKOUT), чтоб было три управляющих сигнала. Ну и потом написать обертку для плеера ZXTunes
Щаз цепляю его к YM2149, потом нужно будет запилить третий бит управления на высвободившуюся ногу RA6 (CLKOUT), чтоб было три управляющих сигнала. Ну и потом написать обертку для плеера ZXTunes
-
- Supreme God
- Posts: 16676
- Joined: 21 Oct 2009 08:08
- Location: Россия
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Конечно может, для этого есть как раз статусный пин (RA5). Он только на чтение, ибо RA5 в этом семействе input only. Так же можно читать и байт данных, и два бита управления. Если использовать внешний тактовый генератор заместо кварца, то высвобождается еще один пин RA6. Его тоже можно и читать и писать, только нужно немножко библиотеку подправить (в процессе).Lavr wrote:А в обратку - в РС - он какие-то биты может вернуть? Ну типа BUSY для LPT ?Tronix wrote:Запустил демонстрашку, поигрался записью байт - все работает отлично.
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Вощем прикрутил YM2149F к сабжу, работает оооочень медленно, к сожалению
Запись звука получается такой:
https://soundcloud.com/tronix286/joke-o ... by-surgeon
В то время, когда обычный LPT вполне справлялся.
Попробовать выкинуть ответ от контроллера к хосту? Он там вроде ACK высылает потом после передачи. Мне он не критичен. Так же выкинуть все, что связано с чтением. Мне нужна только запись. Попробую, но похоже - не взлетело, хотя я и надеялся. Придется юзать с аппаратным USB.
Либа имеет право на жизнь, но увы, только для совсем медленных девайсов, когда скорость передачи не важна - только лишь бы дошло. Дойдет, но долго.

https://soundcloud.com/tronix286/joke-o ... by-surgeon
В то время, когда обычный LPT вполне справлялся.
Попробовать выкинуть ответ от контроллера к хосту? Он там вроде ACK высылает потом после передачи. Мне он не критичен. Так же выкинуть все, что связано с чтением. Мне нужна только запись. Попробую, но похоже - не взлетело, хотя я и надеялся. Придется юзать с аппаратным USB.
Либа имеет право на жизнь, но увы, только для совсем медленных девайсов, когда скорость передачи не важна - только лишь бы дошло. Дойдет, но долго.
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Значит задал ему TRISы сразу после включения и потом нигде не меняются, а то он в каждой процедуре записи устанавливал направление. Так же выкинул из кода все, что относится к чтению и записи 4-битных ниблов. Оставил только WriteByte и WriteCtrl. Чуть стало побыстрее, но глобально ситуацию конечно не изменило 

-
- Supreme God
- Posts: 16676
- Joined: 21 Oct 2009 08:08
- Location: Россия
Можно, но это не простая логика нужна, а что-то типа 1531...Tronix wrote:Как думаете, нельзя на простой логике умножить тактовый сигнал 24MHz надвое, чтоб получить 48MHz?

А ты можешь сделать такой опыт - посылать ему в цикле только код и инверсию
этого кода и посмотреть максимальную частоту на выходе?
iLavr
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
В смысле слать бит 1 затем 0 затем 1 и тд? Можно в принципе, могу даже наверное осциллографом замерить, но это среди рабочей недели как время будет.
PS: Разогнать не получилось - там обработка USB завязана на высчитанные предварительно машинные такты. Увеличиваем частоту - все расчеты сдвигаются -> устройство перестает опознаваться компом.
PS: Разогнать не получилось - там обработка USB завязана на высчитанные предварительно машинные такты. Увеличиваем частоту - все расчеты сдвигаются -> устройство перестает опознаваться компом.