Просмотр полной версии : Самодельный USB-магнитофон для ретро-компьютера
Здравствуйте.
Хочу разработать электронный магнитофон для ретро-компьютера.
Применение покупного MP3-плеера для загрузки игр связано с рядом неудобств:
Долго включается
Долго выбирать режим воспроизведения
Долго перелистывать список файлов
Через некоторое время индикатор гаснет
Через некоторое время сам выключается
Неудобные кнопки
Неудобное управление
Шнур нестандартный на 2.5 мм
Часто нужно подзаряжать аккумулятор
Не воспроизводит WAV
Нет записи
Новый USB-магнитофон должен обладать следующими основными характеристиками:
С целью упрощения, не поддерживает MP3 и другие виды файлов
Воспроизводить файлы одного типа - WAV 44100 Гц 8 бит моно
Выход цифровой
Возможность использования с любым ретро-компьютером - нет привязки к TAP, TZX
Позволять выбирать один из 100 файлов для воспроизведения
Для индикации номера файла использовать двухразрядный семисегментный индикатор
Две кнопки расположить под соответствующими разрядами индикатора для установки номера.
Третья кнопка для запуска воспроизведения
Светодиод воспроизведения
Питание +5V от компьютера
Файлы брать с USB FLASH DRIVE.
Подключение к компьютеру через разъем DB-9
Пока без записи, в дальнейшем - желательно
Использование должно быть простым:
Магнитофон включен всегда, пока включен компьютер
Первой кнопкой выбирается старший разряд номера файла
Второй кнопкой выбирается младший разряд номера файла
Третьей кнопкой запускается воспроизведение
После включения сразу готов к запуску файла номер 01 - любимая игра
Подготовительные работы:
Предполагается, что на компьютере PC заранее подготовлены файлы WAV
с нужными характеристиками и именами 00 ... 99.wav
Любимые игры нужно переименовать так, чтобы их номера можно было выбрать
за меньшее количество нажатий кнопок.
Файл соответствия номеров и имен распечатать на принтере. Туда же можно добавить описание игр.
вот похожая штуковина http://disorder.ru/archives/tag/sd-wav
надо поискать на форуме была схема дверногоAYзвонка, который на самом деле проигрывал wav.
В разрабатываемом устройсте AY не нужен, Воспроизведение аналогового WAV тоже не требуется. 8 бит нужно будет преобразовывать в 1 бит каким-нибудь способом.
Andrey F
19.06.2012, 23:31
Без записи не имеет смысла.
Я например, записал любимые игры на CD-AUDIO. Дешевых DVD-плейеров (до 800 руб) куча. Выбираем с пульта номер трека и вперед. Коробочка с диском оформлена (цветная полиграфия) и вставлен буклет с описанием игр. Себестоимость - 20-30 р. за диск. Плюс сохранность. Красиво.
Kakos_nonos
20.06.2012, 11:39
Была ж тут тема похожая. "магнитофон для спека" называлась. Там на AVR, SD-карте, напрямую тапки грузил и мог записывать.
Я, правда, эту тему не могу найти сейчас.
cherkasy
20.06.2012, 17:29
я с телефона через аудио шнур загружаю на спек...
конвертация в wav занимает 1 сек. - 1 игра
Без записи не имеет смысла.
Я например, записал любимые игры на CD-AUDIO. Дешевых DVD-плейеров (до 800 руб) куча. Выбираем с пульта номер трека и вперед. Коробочка с диском оформлена (цветная полиграфия) и вставлен буклет с описанием игр. Себестоимость - 20-30 р. за диск. Плюс сохранность. Красиво.
Понятно. Хорошо придумано. Дешевле аналог не сделать.
Магнитофон без записи?
Это не магнитофон...
Это плейер, батенька.
Магнитофон без записи?
Это не магнитофон...
Это плейер, батенька.
Понятно, плеер делать не надо. Вот начал разработку макета USB-магнитофона - эскиз внешнего вида:
http://s55.radikal.ru/i149/1206/cf/0eee6c906ed0t.jpg (http://s55.radikal.ru/i149/1206/cf/0eee6c906ed0.png)
Нижний ряд кнопок (алгоритм работы):
1. Выбор десятков номера от 0 до 9
2. Выбор единиц номера от 0 до 9
3. PLAY - Воспроизведение. При нажатии начинается вывод данных в цифровом виде на Спектрум, зажигается сверху зеленый светодиод. После окончания файла светодиод гаснет. Повторное нажатие кнопки PLAY приводит к остановке воспроизведения, светодиод гаснет.
4. PAUSE - Пауза. Нажатие приводит к временной остановке воспроизведения или записи с зажиганием сверху желтого светодиода.
5. RECORD - Запись. При нажатии USB-магнитофон переходит в режим готовности записи, зажигается красный светодиод сверху, но пока включается режим пауза. Для начала записи нужно будет нажать кнопку Пауза. Повторное нажатие кнопки RECORD приводит к остановке записи, светодиод гаснет.
Выбор деталей для макета:
Микроконтроллер PIC16F877A - управляющий контроллер, (для упрощения разработки), т.к я умею для него писать программы на Си в MPLAB
Кварц 16 МГц
V2DIP2-48 - модуль USB со стандартной прошивкой, покупной (для упрощения разработки)
Тактовые кнопки без толкателей
Светодиоды 3 мм
Индикатор семисегментный двухразрядный - для функционирования макета тип неважен, посоветуйте какой лучше купить.
DB-9М - разъем для подключения к Спектруму (питание +5В и цифровые сигналы TAPE_IN, TAPE_OUT)
Технические подробности:
Индикация динамическая
FLASH DRIVE - стандартная с FAT32
Имена файлов - 00.wav - 99.wav (для упрощения разработки)
При записи стирается файл с установленным на индикаторе номером и создается новый.
Формат файлов - PCM без сжатия 44100 Гц 8 бит моно (для упрощения разработки)
Сигналы магнитофона TAPE_IN, TAPE_OUT цифровые (для упрощения разработки), подключаются напрямую к микросхемам Спектрума. Элементы, которые раньше были к ним подключены - удаляются.
Данные воспроизведения и записи тактируются с частотой около 44100 Гц по прерываниям управляющего контроллера.
Обмен между двумя микроконтроллерами через параллельную 8-бит шину c FIFO
Сигналы магнитофона TAPE_IN, TAPE_OUT цифровые, подключаются напрямую к микросхемам Спектрума. Элементы, которые раньше были к ним подключены - удаляются.
ЩИТО?
ЩИТО?
Для упрощения разработки данные использовать в цифровом виде. Мы ведь не музыку будем слушать и записывать.
В дальнейшем, когда все будет работать в цифровом виде, займемся согласованием уровней.
---------- Post added at 10:28 ---------- Previous post was at 10:00 ----------
Первым шагом, наверно, следует реализовать воспроизведение данных, записанных во FLASH микроконтроллера в массив. Данные взять из файла WAV одного из загрузчиков от игр. Прерывания настроить на 44100 Гц. Памяти в пике 8 Кб. Хватит на 8*1024/44100 = 0,18 секунды. Маловато.
WAV с частотой дискретизации 44100 и
длительностью 3 минуты будет занимать в моно
3*60*44100 = 7938000, т.е. 8 мБайт.
Чтобы сохранить 64 кбайт понадобится 8 мбайт?
WAV с частотой дискретизации 44100 и
длительностью 3 минуты будет занимать в моно
3*60*44100 = 7938000, т.е. 8 мБайт.
Чтобы сохранить 64 кбайт понадобится 8 мбайт?
А что ? Настало время, когда занимаемую память можно не считать. Но давайте посчитаем.
Одна игра длительностью около 5 минут займет 5 * 60 * 44100 = 13230000 байт.
Одной USB флешки объемом 2 Гбайт хватит на 100 игр.
PS. Игры с турбо-загрузкой как раз в формате WAV 8 бит 44100 Гц моно и занимают объем 1.2 - 1.4 Мбайт.
Эти файлы очень хорошо сжимаются. В заархивированном виде они весят всего около 50 Кбайт и их легко хранить и пересылать.
Долго включается
Долго выбирать режим воспроизведения
Долго перелистывать список файлов
Через некоторое время индикатор гаснет
Через некоторое время сам выключается
Неудобные кнопки
Неудобное управление
Шнур нестандартный на 2.5 мм
Часто нужно подзаряжать аккумулятор
Не воспроизводит WAV
Нет записи
Ты с какой планеты? :-)
Мой простенький Филлипс за 1000р лишен всех этих недостатков.
Ты с какой планеты? :-)
Мой простенький Филлипс за 1000р лишен всех этих недостатков.
Наверно мой плеер делали инопланетяне, раз сразу столько недостатков набралось:
http://www.computerra.ru/terralab/multimedia/331446/
http://mp3.nexxdigital.ru/music_photo/nexx_nf-920/
Наверно мой плеер делали инопланетяне, раз сразу столько недостатков набралось (http://www.computerra.ru/terralab/multimedia/331446/)
Какой ты планируешь себестоимость сабжа?
Какой ты планируешь себестоимость сабжа?
Посоветуйте, какой должна быть цена, при которой такое устройство купили бы.
Ты с какой планеты? :-)
Мой простенький Филлипс за 1000р лишен всех этих недостатков.
Не знаю всех причин, побудивших автора взяться за проект, но для себя вижу в нем еще такой плюс, как легко встраиваемый девайс, следующий одной из идеологий клонов - самостоятельному изготовлению. Плеер рядом со спеком диссонанс вызывает. Думал для себя на базе этой схемки начать разработку: http://cxem.net/mc/mc51.php но теперь подожду развития сюжета.
Какой ты планируешь себестоимость сабжа?Учитывая цену V2DIP2-48 порядка 1300 р., меньше 1500 р. не получится.
И цена скорее всего меньше 2000 р. не опустится.
Andrey F
24.06.2012, 16:01
http://www.domko.ru/pdf/MAST_KIT/MP2503RL.pdf
Готовый модуль с дисплеем. Цена 750 руб. Встраиваем в Спектрум и играем.
И подобных есть еще целая куча.
Kakos_nonos
24.06.2012, 16:27
Нужна обязательно запись.
Без записи не имеет смысла делать, так как мп3 плеер подходит по всем многим характеристикам.
Думаю, весь код влезит в Atmega8, который стоит 150руб. Цена 2000р это явно завышено.
Andrey F
24.06.2012, 16:33
Нужна обязательно запись.
KIT MP1025
Описание
Управляемый микроконтроллером модуль для записи/воспроизведения аудиофайлов. Управлять устройством можно с помощью другого контроллера (через последовательный порт) или с помощью подключаемых кнопок.
Возможности устройства:
Частота дискретизации при воспроизведении 48 кГц и 16 кГц при записи.
На SD-карту емкостью 32 МБ можно записать более чем 2 часа звуковых файлов.
Максимальная емкость SD-карты поддерживаемая модулем - 2 Гбайт
8 рабочих режимов
Поддерживается весь диапазон MPEG (включая CBR, VBR, ABR), WMA, WAV кодирования.
18 битный DAC, динамический диапазон 90 дБ, SNR 85 дБ
Встроенный Микрофон для записи
Автоматическая подстройка уровня записи. Управление записью с помощью MCU.
Поддерживает MMC, SD, Мини-SD, TF карты от 32 Мб до 2 Гб.
Карта памяти должна быть отформатирована в FAT16
500 Папок и 60000 файлов в каждой
Поддерживает функцию auto play
250 уровней регулировки громкости с управлением через последовательный порт
16 уровней регулировки громкости с управлением кнопками.
Размер 57 х 71.5 мм
Питание DC от 3.7 до 9.1В
Встроенный усилитель для 32 омных наушников и линейный выход
Встроенный EEPROM, доступный для записи и чтения через последовательный порт
Модулем может управлять 3.3В или 5В MCU
Воспроизведением файлов и расписанием можно управлять командами через последовательный порт
Управление модулем возможно через последовательный порт и через контакты J2 одновременно
Режим работы модуля определяется конфигурационным файлом, расположенным на карте памяти. Возможные варианты работы :
- Последовательный порт и кнопки
- Последовательный порт и GPIO
- Запуск по времени
- Выборочное воспроизведение (файлы привязаны к кнопкам)
- Кодированное воспроизведение (номер файлы выбирается комбинацией кнопок).
- Автозапись и автовоспроизведение.
Цена (руб.): 1759.05
Вот это тоже подойдет плеер в прикуриватель (http://tula.dns-shop.ru/catalog/i129879/pleer-mp3-airtone-jt-102.html). Питание подключить, разъём для наушников есть и дисплей тоже.
245руб.
В принципе можно вытряхнуть платку и вставить в корпус спектрума - за такие деньги можно в каждый свой спектрум вставить.
Kakos_nonos
24.06.2012, 16:39
1759.05
Дороговато.
если делать магнитофон, то уже сразу TAP/TZX/WAV....
Zorki-4k
24.06.2012, 18:10
Возможность использования с любым ретро-компьютером - нет привязки к TAP, TZX
Сигналы магнитофона TAPE_IN, TAPE_OUT цифровые (для упрощения разработки), подключаются напрямую к микросхемам Спектрума. Элементы, которые раньше были к ним подключены - удаляются.
Это же не логично!
Это же не логично!
Форматы TZX/TAP можно преобразовать в WAV на PC. Они не обязательны для начала.
Во время разработки макета лучше работать с цифровыми сигналами - так легче и меньше глюков.
А если встраивать в корпус компьютера - тоже лучше работать с цифровыми сигналами.
Если внешний, автономный,то тогда нужно согласование сигналов по уровню и преобразователь питания от аккумулятора.
---------- Post added at 19:54 ---------- Previous post was at 19:29 ----------
http://www.domko.ru/pdf/MAST_KIT/MP2503RL.pdf
Готовый модуль с дисплеем. Цена 750 руб. Встраиваем в Спектрум и играем.
И подобных есть еще целая куча.
В описании есть фраза:
"На борту модуля установлен USB-host контроллер для чтения музыкальных файлов записанных на любой USB флэш-накопитель или внешний жесткий диск".
Возможно там та же микросхема, которую собрался использовать я.
Как они умудряются сделать плату с пультом за 750 руб ? Может они по себестоимости продают или себе в убыток ?
Zorki-4k
24.06.2012, 20:28
Как они умудряются сделать плату с пультом за 750 руб ? Может они по себестоимости продают или себе в убыток ?
Завод в Китае с дешевой рабочей силой + массовое производство.
Andrey F
24.06.2012, 20:38
Как они умудряются сделать плату с пультом за 750 руб ? Может они по себестоимости продают или себе в убыток ?
Это примерно 25 долларов. Себестоимость платы такого уровня с индикатором не превышает 10 долларов. Я сам заказываю изготовление и сборку плат в Шеньжене. Только объемы от 20000.
Orionsoft
24.06.2012, 21:04
KIT MP1025
Описание
Встроенный Микрофон для записи
Автоматическая подстройка уровня записи. Управление записью с помощью MCU.
Цена (руб.): 1759.05
Китайская поделка под Сделанно_в_России_tm_
запись там самая простая , для микрофонного входа
Andrey F
24.06.2012, 22:28
Китайская поделка под Сделанно_в_России_tm_
запись там самая простая , для микрофонного входа
В меню таких устройств есть настройки качества записи. А удалить микрофон с операционником с платы и подпаять зкранированный провод - недолго.
Заказал для изучения модули V2DIP2-48 и VNC2 DEBUG (http://www.ftdichip.com/Products/Modules/DevelopmentModules.htm#V2DIP2),
а также двухразрядный семисегментный индикатор для USB-магнитофона и тестера микросхем.
Вроде был уже "магнитофон для спектрума"?
И нафиг усб хост при наличии сд карт?
сон разума ...
Вроде был уже "магнитофон для спектрума"?
Да, был, но только для Спектрума (http://www.zx.pk.ru/showthread.php?t=423&highlight=%EC%E0%E3%ED%E8%F2%EE%F4%EE%ED+%E4%EB%FF +%F1%EF%E5%EA%F2%F0%F3%EC%E0). Привязка старого "магнитофона" к формату TAP или TZX особого удобства не дает, а создает лишние трудности. В новом "магнитофоне" планируется более универсальный формат WAV - пригодится для "Радио-86РК" и других отечественных или иностранных ретро-компьютеров, которые раньше работали с магнитофоном.
Как мне подсказали в этой теме (http://www.zx.pk.ru/showpost.php?p=518495&postcount=18), USB-магнитофон можно легко встроить в корпус Спектрума и использовать цифровые сигналы без дополнительного преобразования. Что позволит использовать еще более быструю загрузку, чем TUBRO загрузчики за 30 секунд.
И нафиг усб хост при наличии сд карт?
сон разума ...
Да и пора осваивать USB для Спектрума. В этом и поможет проектирование аналога "магнитофона" на USB. Потом, на основе моего эксперимента, может появиться схема подключения USB к Z80. Или Speccy с USB флешкой и клавиатурой.
Также связь Z80 с SD картой осуществляется последовательно, а с USB можно осуществить параллельно по восьмибитной шине. Что позволит загружать образы дисков быстрее в несколько раз. Если, например, контроллер USB подключить к "KAY-2010". К тому же USB-хост упрощает написание программ для Z80 - не надо изучать FAT.
В будущем можно будет подумать об вcтраивании USB драйвера в ПЗУ.
Потом может появиться схема подключения USB к Z80.
к слову, caro сделал это уже давно, а вот софта нет и с новой схемой он просто так не появится...
usb на спектруме имеет смысл, если будет поддерживаться что-то кроме накопителей.
к слову, caro сделал это уже давно, а вот софта нет и с новой схемой он просто так не появится...
Схема подключения USB-хоста к Z80 будет простой. 8 битов ШД напрямую или через резисторы. Еще 4 выхода с дополнительного регистра для управления направлением передачи данных VNC2. И дешифратор адреса регистра.
Команды USB напоминают команды MSDOS. Ниже приведены основные:
http://s017.radikal.ru/i401/1207/fe/29969d843a01t.jpg (http://s017.radikal.ru/i401/1207/fe/29969d843a01.png)
Как видите, чтобы загрузить файл нужно подать несколько команд:
открыть файл для чтения, прочитать нужное количество байт из файла, закрыть файл.
Софт нужен не игровой, а встраиваемый в ПЗУ для чтения-записи, типа GLUK и аналогичных. Например, для загрузки в электронный диск в ОЗУ образа TRDOS.
usb на спектруме имеет смысл, если будет поддерживаться что-то кроме накопителей.
Можно будет потом попытаться подключить USB-устройства с PC. Бывают звуковые карты USB:
http://s08.radikal.ru/i181/1207/33/e54ac140ce0et.jpg (http://s08.radikal.ru/i181/1207/33/e54ac140ce0e.jpg)
Можно сделать контроллер USB клавиатуры. Но там нужно разрабатывать новую прошивку для VNC2 (или добавлять управляющий контроллер) и делать схему сопряжения с разъемом для старой ZX-клавиатуры. Типа адаптера KEYB&SINC.
VNC1 - один способ подключения устройств:
http://s018.radikal.ru/i513/1207/c2/2e7ffb714538t.jpg (http://s018.radikal.ru/i513/1207/c2/2e7ffb714538.jpg)
VNC2 - два способа подключения устройств:
http://i020.radikal.ru/1207/ca/c1e23ad0e3bat.jpg (http://i020.radikal.ru/1207/ca/c1e23ad0e3ba.png)
Расчет количество тактов для требуемой частоты дискретизации USB-магнитофона
C помощью таблицы в OpenOffice посчитаем количество тактов для разных кварцев.
http://s43.radikal.ru/i101/1207/de/a7418e07db6f.png (http://www.radikal.ru)
Если использовать только один VNC2:
Период прерываний для частоты 44100 Гц должен быть 22,676 мкс. Если настроить на 23 мкс ошибка будет 1.43%
Период прерываний для частоты 48000 Гц должен быть 20,833 мкс. Если настроить на 21 мкс ошибка будет 0,8 %
Для управляющего МК:
При частоте 12 МГц ошибка для обоих частот дискретизации минимальна. Также при такой частоте можно использовать сигнал от кварца VNC2. При 14 МГц можно подключиться к кварцу компьютера. Но это подойдет только для обычных клонов Спектрума.
В принципе, даже при задании периода прерываний от таймера в мкс ошибка меньше 1.5%, что мало повлияет на читаемость данных в компьютер.
---------------------------------------------------------------------
Но пока у нас остается дополнительный управляющий микроконтроллер. Частоту кварца изменим на 12 МГц. Vinculum2 пока работает со стандартной прошивкой V2DAP в паре с управляющим МК и обеспечивает связь с USB FLASH.
Начнем разрабатывать программу.
Запись и воспроизведение будем осуществлять в моменты прерываний от таймера. Настроим период прерываний на 272 такта. Это будет соответствовать частоте 44117,65 Гц (ошибка 0,04%). Во время прерывания будем анализировать переменную mode, которая будет сообщать в каком режиме сейчас находится USB-магнитофон.
После нажатия на USB-магнитофоне кнопки "PLAY" из исходного состояния WAIT переходим в режим PLAY_BEGIN. После этого нужно будет открыть для чтения файл с выбранным номером, проверить соответствие формата WAV 44100 8 бит MONO. Если файл есть и соответствует данным характеристикам, запоминаем длину файла.
Для записи и чтения организуем буфер из массива размером 200 байт. Две переменные buffer_rd и buffer_wr будут показывать позиции чтения и записи в буфере. Если обе переменные равны, то буфер пуст. При заполнении буфера с USB во время воспроизведения амплитуду сигнала от 0 до 255 мы будем преобразовывать в одно из двух значений: 0 или 255.
Так вот, когда начинаем воспроизведение файла, нужно заполнить половину буфера (100 байт) и перейти в режим PLAY. Теперь начнется выполняться процедура воспроизведения во время прерываний.
То есть, если в начале процедуры обработки прерывания от таймера с частотой 44100 Гц переменная mode = PLAY, мы должны выполнить следующие операции:
1. Считать байт из буфера из места, на которое показывает переменная buffer_rd
2. Считанный байт (0 или 255) преобразовать в один бит и вывести на выход USB-магнитофона digital_out
3. Переместить указатель чтения в буфере buffer_rd на следующую позицию.
...
Похожие действия нужно выполнять и при записи со Спектрума на USB.
То есть, если в начале процедуры обработки прерывания от таймера с частотой 44100 Гц переменная mode = RECORD, мы должны выполнить следующие операции:
1. Ввести с компьютера сигнал digital_in
2. Полученный бит преобразовать в байт 0 или 255 и записать в буфер в место, на которое показывает переменная buffer_wr
3. Переместить указатель записи в буфере buffer_wr на следующую позицию.
...
TO BE CONTINUED
Для записи и чтения организуем буфер из массива размером 200 байт.
Неправославный размер какой-то. Для аляповатой китайской копии Спектрума.
Больше замечаний нет)
Неправославный размер какой-то. Для аляповатой китайской копии Спектрума.
Больше замечаний нет)
Кратность 256 не нужна, так как при записи будем передавать байты из буфера в USB-HOST по одному байту до тех пор, пока не опустеет буфер. То есть передаем, пока переменная buffer_wr не равна buffer_rd. Эти переменные циклически бегают от начала до конца буфера, потом опять от начала до конца.
На входе VNC2 есть еще один буфер FIFO. Наверно VNC2 сам решит, когда будет записывать данные на USB FLASH, например, когда наберет 512 байт.
Год назад купил музыкальный центр "мини". Есть такие разных фирм, там CD, DVD, USB радио и т.п., короче все есть, есть даже линейный вход с обычного наушникового джека. Ко всему этому он еще и видево может проигрывать, есть тюлпаны для подключения к телику. Ну для чего я это все пишу? Приколитесь, там есть одна дека для кассеты... причем все "мини" этим страдают. Зачем их производители туда лепят? Наверное лишние деки на складах завалялись, но вот такая фишка на полном серьезе. Возможно, спеки и другие хоум компы стали опять популярны и дека совсем теперь нелишняя...
http://video.wikimart.ru/audio/disc_centers/model/360743/mikrosistema_philips_mcd170/#utm_source=google&utm_medium=cpc&utm_campaign=goo+3245+3245+03+ap+video+12.01.2012&utm_term=philips+mcd170&yplacetype=g&ysource=&yadded=b&openstat_ad=19625736473&ypos=1t1&ef_id=tqlP%40eAOBWYAAA9k%3A20120726151945%3As
Год назад купил музыкальный центр "мини". Есть такие разных фирм, там CD, DVD, USB радио и т.п., короче все есть, есть даже линейный вход с обычного наушникового джека. Ко всему этому он еще и видево может проигрывать, есть тюлпаны для подключения к телику. Ну для чего я это все пишу? Приколитесь, там есть одна дека для кассеты... причем все "мини" этим страдают. Зачем их производители туда лепят? Наверное лишние деки на складах завалялись, но вот такая фишка на полном серьезе. Возможно, спеки и другие хоум компы стали опять популярны и дека совсем теперь нелишняя...
http://video.wikimart.ru/audio/disc_centers/model/360743/mikrosistema_philips_mcd170/#utm_source=google&utm_medium=cpc&utm_campaign=goo+3245+3245+03+ap+video+12.01.2012&utm_term=philips+mcd170&yplacetype=g&ysource=&yadded=b&openstat_ad=19625736473&ypos=1t1&ef_id=tqlP%40eAOBWYAAA9k%3A20120726151945%3As
Если уж совсем припрет настольгировать :v2_dizzy_vodka4:
http://www.ebay.com/itm/NEW-Sony-TCM-150-Standard-Cassette-Recorder-TCM150-/280416705239?pt=Voice_Recorders&hash=item414a235ad7
:v2_dizzy_vodka2::v2_dizzy_keyboard: с друзьями.
Начало экспериментов с модулем USB-HOST V2DIP2-48.
Сначала посмотрим, как работает модуль при связи через интерфейс UART.
Для этого подключим его к компьютеру через немного доработанный адаптер USB-UART:
http://s58.radikal.ru/i162/1207/fb/8171e397f36ct.jpg (http://s58.radikal.ru/i162/1207/fb/8171e397f36c.jpg)
Для связи используются сигналы RXD, TXD, RTS, CTS, +5V, GND. Перемычка на модуле USB-UART запаяна в положение 3-4 для того, чтобы сигналы UART были размахом 3.3V. Хотя в документации написано, что можно подавать и размахом 5V.
Небольшая платка около спички - это модуль программатора-отладчика.
Команды в USB-HOST будем подавать с помощью программы-терминала. Ниже приведены ответы модуля.
После подключения кабеля от PC к адаптеру USB-UART с подключенным модулем V2DIP2-48 и нажатия кнопки Connect в терминале:
Ver V2DAP2.0.0-SP1 On-Line:
Device Detected P2
No Upgrade
D:\>
После подачи команды DIR<ENTER>:
PDF DIR
ZXKIT DIR
VNC2 DIR
ZX DIR
MIX DIR
D:\>
Скриншот программы-терминала:
http://s40.radikal.ru/i089/1207/52/1b126b5975act.jpg (http://s40.radikal.ru/i089/1207/52/1b126b5975ac.png)
Как видно из этого примера, модуль после включения сам выдает некоторую информацию (версию прошивки, что флешка подключена, что на ней нет файла обновлений). Эту информацию нужно принять, чтобы освободить буфер и потом можно было принимать полезную информацию - ответы на команды или данные с USB FLASH DRIVE.
Наверно, можно будет подключить модуль и через параллельный интерфейс к Z80? Принцип управления будет аналогичен. Думаю у Z80 хватит аппаратных возможностей для связи с флешкой с помощью таких команд.
Для подключения нужно выбрать адреса портов для чтения состояния буфера FIFO и сигналов управления чтением и записью.
После отключения или подключения флешки модуль сообщает об этом, даже если его не спрашивают. Надо будет закладывать логику в программу, чтобы пропускать эти сообщения, чтобы они не мешали приему полезных данных.
Запись данных на флешку:
http://s017.radikal.ru/i406/1207/ac/a523942104f3t.jpg (http://s017.radikal.ru/i406/1207/ac/a523942104f3.png)
================================================== ======================
После подключения кабеля от PC к адаптеру USB-UART с подключенным модулем V2DIP2-48 и включения программы терминала в режиме AutoConnect:
Ver V2DAP2.0.0-SP1 On-Line:
Device Detected P2
No Upgrade
D:\>
================================================== ======================
DIR [<ENTER> в терминале вставляется автоматически, так как поставлена соответствующая галочка]
TRASH-~1 DIR
TMP DIR
PDF DIR
ZXKIT DIR
VNC2 DIR
ZX DIR
MIX DIR
D:\>
[Перед списком папок и файлов добавилась пустая строка.
================================================== ======================
[Зайдем в папку VNC2:]
CD VNC2
D:\> [как видим, в приглашение к вводу не добавилось название папки]
================================================== ======================
[Посмотрим содержимое папки VNC2]
DIR
TERMINAL DIR
V2DAP DIR
VNC2_1~1.ODT
D:\>
[Имена и расширения файлов выдаются большими буквами.
Длинные имена файлов, как и в MSDOS не отображаются, только 8 символов + 3 символа расширения]
================================================== ======================
[откроем/создадим файл Hello.txt для записи]
OPW Hello.txt
D:\>
================================================== ======================
[Перейдем в режим ввода и отображения чисел в символьном виде]
IPA
D:\>
================================================== ======================
[Запишем в файл 19 символов]
WRF 19
[светодиод на флешке начал мигать]
Hello ZX World !!![19-й символ #0D вставится автоматически]
D:\>
[светодиод на флешке мигать перестал]
================================================== ======================
[Запишем в файл еще 43 символа]
WRF 43
[светодиод на флешке не мигает]
Кто с паяльником сидит - тот паяет ZXkit !
D:\>
================================================== ======================
[закроем файл]
CLF Hello.txt
D:\>
================================================== ======================
[Посмотрим содержимое папки VNC2]
DIR
TERMINAL DIR
V2DAP DIR
HELLO.TXT
VNC2_1~1.ODT
D:\>
[добавился файл «HELLO.TXT» Имя и расширение файла получилось большими буквами]
================================================== ======================
[Посмотрим содержимое файла]
RD Hello.txt
Hello ZX World !!!
Кто с паяльником сидит - тот паяет ZXkit !
D:\>
================================================== ======================
Как видим, записывать очень просто. Сначала открываем файл для записи.
Затем даем команду, в которой указываем число байтов для записи. Потом посылаем эти байты.
Так повторяем нужно количество раз. В конце закрываем файл.
Команду DIR давать не обязательно - это я для наглядности использовал.
http://s019.radikal.ru/i627/1207/eb/c4e942404b4ft.jpg (http://s019.radikal.ru/i627/1207/eb/c4e942404b4f.png)
Проверка работы в HEX-кодах. Попробуем запись в середину файла:
--------------------------------------------------------------
[перейдем в режим коротких HEX команд]
SCS
>
--------------------------------------------------------------
[В терминале отключим автоматическое добавление 0D
и включим отображение принятых данных в HEX-виде.
В строке терминала добавляем $ для HEX-чисел.
Z80 или микроконтроллер может просто посылать байты]
--------------------------------------------------------------
[Откроем для записи файл 1.tmp]
$09$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Запишем в этот файл 16 байтов в HEX-коде]
$08$20$00$00$00$10$0D
[светодиод на флешке начал мигать]
[числа от 00 до 0F]
$00$01$02$03$04$05$06$07$08$09$0A$0B$0C$0D$0E$0F
3E 0D
[светодиод на флешке мигать перестал]
--------------------------------------------------------------
[Теперь установим указатель в файле на позицию +3 от начала файла]
$28$20$00$00$00$03$0D
3E 0D
--------------------------------------------------------------
[Заменим байты 03 и 04 на AA и BB.
Это понадобится для записи в начало WAV-файла длины звуковых данных]
$08$20$00$00$00$02$0D
$AA$BB
3E 0D
--------------------------------------------------------------
[Закроем файл 1.tmp]
$0A$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Посмотрим содержимое файла 1.tmp]
$04$201.tmp$0D
00 01 02 AA BB 3E 0D
[Вывод - байты в нужном месте поменялись, но после них все обрезалось
Значит, после изменения нескольких байтов в середине файла,
нужно указатель установить на смещение последнего записанного
байта + 1]
--------------------------------------------------------------
[Опять откроем для записи файл 1.tmp]
$09$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Допишем в конец файла 11 байтов в HEX-коде]
$08$20$00$00$00$0B$0D
[числа от 05 до 0F]
$05$06$07$08$09$0A$0B$0C$0D$0E$0F
3E 0D
--------------------------------------------------------------
[Теперь установим указатель в файле на позицию +3 от начала файла]
$28$20$00$00$00$03$0D
3E 0D
--------------------------------------------------------------
[Заменим байты AA и BB на 33 и 44.
Это понадобится для записи в начало WAV-файла длины звуковых данных]
$08$20$00$00$00$02$0D
$33$44
3E 0D
--------------------------------------------------------------
[Теперь установим указатель в файле на конец файла = 16]
$28$20$00$00$00$10$0D
46 49 0D
[ошибка]
--------------------------------------------------------------
[Теперь установим указатель в файле на конец файла = 15]
$28$20$00$00$00$10$0D
46 49 0D
[ошибка]
--------------------------------------------------------------
[Закроем файл 1.tmp]
$0A$201.tmp$0D
3E 0D
--------------------------------------------------------------
[Посмотрим содержимое файла 1.tmp]
$04$201.tmp$0D
00 01 02 33 44 3E 0D
[Вывод - байты в нужном месте поменялись, но после них все обрезалось. Получается, что после изменения в середине файла — хвост обрезается!]
Как же тогда изменить длину в параметрах WAV-файла после записи ? Можно добавить поддержку еще одного формата - писать просто данные в файлы 00.dat - 99.dat. А воспроизводить и WAV и DAT просто как последовательность байтов, без анализа типа файла и характеристик.
Начал паять макет для подключения модуля USB к PIC по параллельному интерфейсу:
http://s54.radikal.ru/i146/1208/6d/ba1b54cb1e5at.jpg (http://s54.radikal.ru/i146/1208/6d/ba1b54cb1e5a.jpg)
Продолжение разработки программы:
http://s019.radikal.ru/i642/1208/2c/a39f4b88b78ft.jpg (http://s019.radikal.ru/i642/1208/2c/a39f4b88b78f.png)
Начало было там: http://www.zx.pk.ru/showpost.php?p=527415&postcount=38
Не дает мне покоя это устройство. Хотя много других дел.
Как было определено ранее, при кварце 12 МГц прерывания с частотой 44100 Гц нужно делать через 272 такта кварца. Но, PIC выполняет одну команду за 4 такта. Получается, что между прерываниями должно быть выполнено не более 68 команд.
Прикинул скорость при написании на ассемблере. Пустая заготовка подпрограммы прерываний заняла 14 тактов. Возможность втиснуть в 54 команды еще динамическую индикацию, ввод или вывод сигнала DIGITAL_IN или DIGITAL_OUT, осуществлять обмен с VNC2 вызывает сомнения. Если и получится, то потом что-нибудь добавить-изменить будет проблематично. Получается, что для таких временных ограничений PIC16 или PIC18 не подходят. А жаль...
Поэтому, нужно применить другой 40-ногий контроллер, например, ATMEGA8515, так как у него простые команды выполняются за 1 такт.
И программировать на ассемблере.
Заодно появился повод изучить написание программ для атмег. Надеюсь меня поправят Caro, Skyther и другие, кто хорошо разбирается в них, если я напишу что-нибудь не так.
Насколько я понял, нужно брать контроллер с памятью программ не более 8 Кб, так как при 16 или 32 Кб команды переходов становятся длиннее в два раза, что может замедлить программу. Какие еще 40-ногие атмеги с 8 Кб есть ?
Можно попробовать подключить индикатор и светодиоды через два регистра сдвига типа 74HC595. Тогда можно будет использовать мелконогие ATMEGA48PA-AU. Но потребуются дополнительные затраты времени для загрузки 16 бит в регистры сдвига для индикации.
Для AVR есть хороший USB стек V-USB: http://www.obdev.at/products/vusb/index.html
Runs on any AVR microcontroller with at least 2 kB of Flash memory, 128 bytes RAM and a clock rate of at least 12 MHz.
No UART, timer, input capture unit or other special hardware is required (except one edge triggered interrupt).
Can be clocked with 12 MHz, 15 MHz, 16 MHz or 20 MHz crystal or from a 12.8 MHz or 16.5 MHz internal RC oscillator.
High level functionality is written in C and is well commented.
Only about 1150 to 1400 bytes code size.
Для AVR есть хороший USB стек V-USB: http://www.obdev.at/products/vusb/index.html
Runs on any AVR microcontroller with at least 2 kB of Flash memory, 128 bytes RAM and a clock rate of at least 12 MHz.
No UART, timer, input capture unit or other special hardware is required (except one edge triggered interrupt).
Can be clocked with 12 MHz, 15 MHz, 16 MHz or 20 MHz crystal or from a 12.8 MHz or 16.5 MHz internal RC oscillator.
High level functionality is written in C and is well commented.
Only about 1150 to 1400 bytes code size.
Количество устройств там впечатляет. Но они, вроде для подключения разных железок к PC. А мне надо подключить USB флешку для загрузки-сохранения программ в виде звуковых файлов или файлов данных.
Да и временные ограничения 272 такта между отсчетами 44100 Гц данных не позволят использовать программную эмуляцию USB.
К тому же фирма Future Devices уже имеет опыт в разработке микросхем USB, так что лучше использовать их разработки в виде отдельной микросхемы USB-HOST.
Алгоритм программы почти разработан, осталось, в основном:
Найти шаблон / написать самому команды инициализации портов и прерываний
Таблицу для динамической индикации
Проработать способ обмена с VNC2 по параллельному интерфейсу
Выделить память для буфера и разработать способ записи/чтения с буфером
чего б не запариваться и не взять нормальный современный арм? там и скорость, и усб и все что угодно.
чего б не запариваться и не взять нормальный современный арм? там и скорость, и усб и все что угодно.
Дайте ссылку посмотреть.
Да не очень я и запариваюсь. Век живи - век учись. Только ассемблер для атмег мне проще изучить, чем ARM. За всю жизнь приходилось писать простые программы на пяти ассемблерах для:
КР580ВМ80А (Радио-86РК)
Z80A (Спектрум)
AT89S53 (МК ATMEL)
PIC16F84 (MK MICROCHIP)
INTEL x86 (PC)
Не думаю, что еще один изучить будет трудно. Мне от контроллера нужны только элементарные устройства: память, порты ввода-вывода и таймер.
Уже изучил:
Как составить таблицу векторов прерываний
Как установить стек
Как записывать в порты
Как считать байт из таблицы знакогенератора
Нашел книжку по ассемблеру, скачал простейший редактор и подключил его к ассемблеру из AVRSTUDIO4.
А USB-HOST VNC2, наверно, современнее, чем ARM-ы, и по возможностям им не уступает:
Частота 48 МГц
Dual USB 2.0 Host / Slave controller.
Embedded 16-bit Harvard architecture MCU core, with 256KBytes of Flash memory and 16Kbytes RAM.
2 x Full-Speed / Low-speed USB 2.0 ports supporting Host or Slave operation.
Programmable UART interface, supports up to 6MBaud transfers.
8-bit wide FIFO interface.
2 x SPI slave interfaces, 1 x SPI master interface.
PWM (Pulse Width Modulation) interface.
4 channel DMA controller, and general purpose timers.
Enhanced features with Vinculum Software Tool Suite
Based on royalty-free flexible ‘C’ based Integrated Development Environment.
Includes compiler, drivers and RTOS kernel to support user firmware development.
Debug interface for real-time hardware based code debug.
Pre-compiled libraries for several USB classes including FAT file system support.
Есть бесплатная среда разработки с примерами и драйверами, а также стандартные откомпилированные прошивки для добавления USB-HOST в существующие проекты. Потом буду подключить его к Спектруму.
То есть его тоже можно использовать в качестве управляющего контроллера. Только я пока не хочу лезть в дебри RTOS - мне проще использовать стандартную прошивку с монитором USB и добавить нужные функции с помощью простого контроллера.
Тем более, подобные функции потом будет выполнять и Z80.
Дайте ссылку посмотреть.
я в современных не очень ориентируюсь, поищите stm32f10x, там от самых слабых до мощных. и это не старее VNC2, мне кажется;) народ, по крайней мере, юзает их только так, и писать там надо на си, нечего искать проблемы там, где их нет (там и на си скорости хватит с запасом). статьи на русском тоже можно найти, в целом, это мэйнстрим, в отличие от VNC2.
Дайте ссылку посмотреть.
http://easyelectronics.ru/category/arm-uchebnyj-kurs
Цикл статей. Начало снизу.
В комментах после статей там тоже много полезной инфы.
http://easyelectronics.ru/category/arm-uchebnyj-kurs
Цикл статей. Начало снизу.
В комментах после статей там тоже много полезной инфы.
Да не стоит ради простого устройства изучать ARM. И вот цитата об этом из вводной статьи:
С другой стороны, если посмотреть на новые восьмиразрядники, такие как ATxMega, то фарша там тоже хоть ложкой загребай, причем по ряду показателей периферия превосходит ту, что стоит в конкурирующей ARM линейке. Плюс привычное окружение и паяемые корпуса.
Плюс надо учитывать, что в любительских разработках эта мощность нафиг не нужна. Потому как там где ее надо много (потоковая обработка, КПК всякие, промышленные компы), гораздо дешевле и качественней оказывается купить готовое решение. Спаять самому КПК конечно можно, но по результату, качеству исполнения и затратам он даже рядом не будет валяться с копечным ширпотребным поделием из Китая.
Так что если электроника это не более чем прикольное хобби, то дергаться смысла нет — восьмиразрядников вам хватит еще всерьез и надолго. Плюс они гораздо проще в изучении, по ним навалом проектов, инструкций, примеров кода.
У меня как раз задача простая, нужны только порты ввода-вывода, ОЗУ и таймер. Поэтому для меня достаточно изучить AVR, которые я давно мечтал изучить, но для меня было достаточно возможностей PIC. Теперь есть повод заняться изучением. Тем более ATMEGA8515 у меня есть в наличии в корпусе DIP-40. Программаторов аж 2 типа: ByteBlaster MV и USB-UART. Есть книги Ю.Ревича и А.В.Евстифеева. Плюс в любой момент могу обратиться за помощью к гуру на этом форуме.
Вопросы, связанные с особенностями ATMEGA почти усвоил. Вот начал кодировать программу.
Пока только второстепенные команды по настройке прерываний, фонтам для индикатора и т.п.
PS. При просмотре исходников ширину табуляции установить 10.
вставлю свои 5 копеек. Для данной задачи вполне можно на Си писать, производительность AVR позволяет. Плюс легче отладка. В Code vision, например, есть удобный конструктор для инициализации таймеров, прерываний, периферии и т.п. и куча полезных библиотек. А еще CodeVision дружит с Proteus что дает возможность симуляции и отладки
Продолжаю урывками писать программу USB-RECORDER.
Добавил динамическую индикацию для семисегментного индикатора и макросы для работы с портами-ввода вывода.
Форматирование текста переделал под ширину табуляции 8.
Да не стоит ради простого устройства изучать ARM.
потому что это сложнее avr, да? вот кто-то же пишет эту лажу и люди верят. нет разницы особо, что изучать, надо курить примеры и делать свое, писать на си. тогда вообще пофиг, какой контроллер, за неделю можно разобраться почти с любым (уж с простенькими-то кортексами точно).
потому что это сложнее avr, да? вот кто-то же пишет эту лажу и люди верят. нет разницы особо, что изучать, надо курить примеры и делать свое, писать на си. тогда вообще пофиг, какой контроллер, за неделю можно разобраться почти с любым (уж с простенькими-то кортексами точно).
Чтобы изучить ARM нужно больше изучить и книг, примеров, документации. И докупить микросхемы, программаторы. Для такой простой задачи как моя - подойдет ATMEGA. Даже если изучу - большинство возможностей ARMа будет неиспользована. А тут уже почти наполовину готова программа.
Переписал динамическую индикацию, чтобы было понятнее. Добавил функции записи с компьютера в буфер и воспроизведения из буфера на компьютер.
Чтобы изучить ARM нужно больше изучить и книг, примеров, документации.
если изучать и то, и другое с нуля, и в особенности не трогать того, что тебе нафиг не нужно, то это одинаковые по сложности задачи. но я только предложил, нет так нет.
если изучать и то, и другое с нуля, и в особенности не трогать того, что тебе нафиг не нужно, то это одинаковые по сложности задачи. но я только предложил, нет так нет.
Наверно, так и будет. Только я пока смог перешагнуть барьер между PIC и AVR. В книге было написано, что ассемблер легче для изучения начиающими. Вот я и поверил. Барьер до ARM еще предстоит перешагнуть...
я в современных не очень ориентируюсь, поищите stm32f10x, там от самых слабых до мощных.
сейчас как раз на работе под такие кодит (STM32F107VC), 72 мипса, куча интерфейсов (5 uart'ов, 2 Can, ethernet, usb, 2 многоканальных adc, dac).
http://i072.radikal.ru/1208/99/7266e19936c8t.jpg (http://i072.radikal.ru/1208/99/7266e19936c8.jpg)
Пока успехи небольшие - нету времени. Подпаял индикатор с кварцем и разъемом для прошивки. Проверил приведенную выше прошивку (V1.00.07) - работает!
На индикаторе отображается 01. Измерил частоту мигания сегмента A индикатора. Оказалось 86.16 Гц. По расчетам должно было быть 12000000/(272*256*2)=86,167 Гц.
Тогда частота прерываний, то есть частота дискретизации входного/выходного сигнала будет 86.16*2*256=44113,92 Гц, то есть почти 44100 Гц, что и требовалось получить.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot