AVR+VS1002=mp3

8-битные микроконтроллеры AVR (AT90, ATtiny, ATmega) от Atmel (в настоящий момент принадлежит Microchip)

Moderator: Shaos

User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

AVR+VS1002=mp3

Post by FreemaN »

Решил потратить драгоценные ресурсы :D етого форума для ведения лога разработки своей конструкции - mp3 плеера.:kruto:
Главные цели, которых я собираюсь достичь:
-Удобное управление
-Хороший звук
-Низкое энергопотребление
-Компактные размеры

В данный момент работаю над основными блоками:
работа с SD/MMC карточкой, LCD дисплеем 84х48, микрухой-декодером VS1002D.
В перспективе добавлю контроль за зарядом батареи, энергосберегающие функции (например перевод отдельных узлов в спящий режим) :idea:

По мере возможности буду картинки выкладывать :roll:
Всё что ты видишь - лживый облик.
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

давай - ждём! :dj:
Я тут за главного - если что шлите мыло на me собака shaos точка net
Different
Doomed
Posts: 408
Joined: 18 Feb 2007 11:40

Post by Different »

Зря VS1002D взял. Совсем старьё и уже никому не повторить будет.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Different wrote:Зря VS1002D взял. Совсем старьё и уже никому не повторить будет.
Просто у меня их аж 2 штуки :)
Image
а вообще потом можно переделать под VS1033. тогда мидюки, wma можно будет играть...
1033 у меня тоже есть, я её к арму хотел подключать
Last edited by FreemaN on 15 Feb 2009 18:21, edited 1 time in total.
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

успехи к этому моменту:
все функции для работы с дисплеем (ну там было просто) 8)
- Для того чтобы работать в текстовом режиме пришлось делать таблицу символов (контроллер в дисплее совсем простенький),
поддерживаются две кодировки WIN1251 и CP866(DOS) и для экономии памяти переключаются только верхние части (>127).
Освоил SD карточку (только для чтения),
пока что простая работа с файловой системой. Узнать содержимое корневого каталога и прочитать файл (фрагментированные файлы тоже должны читаться без проблем, не проверял пока).
ну и конечно же частичная работа с декодером.
а вот траблы:
По непонятным причинам включение BASS ENCHANT`ера приводит к заиканиям в работе - может надо кварц на 26МГц поставить...
при чтении с флешки ВСЕГДА читается один лишний кластер в конце, но это я думаю поборю:roll:
свободной памяти в меге совсем мало осталось (оператива на 60% занята) - если ставить внешнее ОЗУ на портативности можно ставить крест :(
Надо ещё клавиши подключить и сделать наконец менюшку :wink:
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Кстати, интересное наблюдение:
при декодировании VBR, VS1002 в регистре HDAT0 пишет текущий битрейт, а не средний :wink:
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

FreemaN wrote: свободной памяти в меге совсем мало осталось (оператива на 60% занята) - если ставить внешнее ОЗУ на портативности можно ставить крест :(
Попробуй писать не на ЯВУ, а на АСМе.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

HardWareMan wrote:
FreemaN wrote: свободной памяти в меге совсем мало осталось (оператива на 60% занята) - если ставить внешнее ОЗУ на портативности можно ставить крест :(
Попробуй писать не на ЯВУ, а на АСМе.
может это конечно распространённое заблуждение, но мне кажется что на асме будет сложнее... :wink:
FreemaN wrote:при чтении с флешки ВСЕГДА читается один лишний кластер в конце, но это я думаю поборю
этот глюк исправлен :rotate:
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

FreemaN wrote:
HardWareMan wrote:Попробуй писать не на ЯВУ, а на АСМе.
может это конечно распространённое заблуждение, но мне кажется что на асме будет сложнее... :wink:
Все мы начинали с Бэйсика. И это действительно язык для ленивых. Однако, если ты хочешь полностью контролировать ресурсы в этом мелком камне, к тому же твоя задача достаточно чувствительна к таймингам, то ты просто дожен писать на АСМе. Конечно, это дело вкуса и сложность во многом преувеличивают те, кому не хватило духу осилить АСМ. Например, я никогда не пишу весь проект который на АСМе за раз. Я делаю это шаг за шагом, от нижнего уровня к верхнему. От примитивов до комплексных функций. И никогда у меня не было ощущения сложности. Чего и вам желаю. ;)
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: AVR+VS1002=mp3

Post by jdigreze »

FreemaN wrote:В перспективе добавлю контроль за зарядом батареи, энергосберегающие функции (например перевод отдельных узлов в спящий режим)
Еще подскажу полезную функцию - функция заряда аккумуляторов. Если в AVR есть АЦП, то это не должно сильно усложнить конструкцию.
HardWareMan wrote:Попробуй писать не на ЯВУ, а на АСМе.
Или по крайней мере приводить исходник на ЯВУ к простым конструкциям.
С остальным согласен полностью, бо сам пишу в основном на асме.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

jdigreze wrote:Еще подскажу полезную функцию - функция заряда аккумуляторов. Если в AVR есть АЦП, то это не должно сильно усложнить конструкцию.
нужная функция, я размышлял об этом... в каком то апноуте на авр было,.
я вот решаю - использовать ресурсы меги (дёшево и сердито) либо применить что-нибудь навроде MAX713 (для NiCd и NiMn)
хотя можно и комплексно подойти к этому вопросу...
HardWareMan wrote:Однако, если ты хочешь полностью контролировать ресурсы в этом мелком камне, к тому же твоя задача достаточно чувствительна к таймингам, то ты просто дожен писать на АСМе. Конечно, это дело вкуса и сложность во многом преувеличивают те, кому не хватило духу осилить АСМ.
по АВР ассемблеру я почитаю, попробую изучить, но думаю напишу прошивку к плееру всё же на Си.
FreemaN wrote:свободной памяти в меге совсем мало осталось (оператива на 60% занята) - если ставить внешнее ОЗУ на портативности можно ставить крест
поясню, это из-за необходимости держать кучу всего в памяти - там буфер экрана (84 байт шесть строк = 504байта) - обоснование: дисплей мне достался странный, у него восемь строк вместо шести причём верхняя строка в высоту 5 пикселей, а нижняя 3 пикселя (как будто перепутали чипы контроллеров на заводе :idea: ) - поэтому нужно перед выводом сдвинуть данные, чтоб получилось шесть строк по 8 пикселей
нижняя часть таблицы символов (128*8=1024байта) - если переместить в память программ программа начинает себя вести странно, хотя кажется я понимаю как быть...
и два буфера чтения (один с данными кластера, а второй с частью таблицы ФАТ) - так работает быстрее
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

FreemaN wrote:нижняя часть таблицы символов (128*8=1024байта) - если переместить в память программ программа начинает себя вести странно, хотя кажется я понимаю как быть...
Это я тоже исправил - теперь все таблицы символов находятся в памяти программ меги.
Сразу стало много свободного места в ОЗУ :)

Сейчас:
-Делаю функцию чтения директорий
-думаю почему нельзя сбросить счётчк секунд в VS1002 (в ДШ написано, что надо туда два раза записать новое значение) - пробовал, почему то не работает, так же как и посылание 2048 нулей...

Вчера декодер неплохо шарахнуло помехой :rotate: но он вроде жив. (в усилке коротнуло анодку :-? ) лучше буду использовать наушники...
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

FreemaN wrote:-думаю почему нельзя сбросить счётчк секунд в VS1002 (в ДШ написано, что надо туда два раза записать новое значение) - пробовал, почему то не работает, так же как и посылание 2048 нулей...
В ДШ ещё написано что счётчик секунд сбрасывается после ресета...
значит буду ресетить чип перед каждым новым треком. (Это работает - проверил)
Всё что ты видишь - лживый облик.
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

Где можно отыскать нормальную доку по mp3? мне нужно узнать продолжительность (в секундах), но судя по всему её надо считать - а как нигде не пишут :no:
Всё что ты видишь - лживый облик.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Пишут. ID3 TAG v1 и v2/3 тебе в гугль. Просто для CBR берешь первый фрейм, извлекаешь из него битрейт и делишь размер файла на размер фрейма (фиксирован для CBR и зависит от битрейта) - получаешь время. Для VBR сложнее, поэтому некоторые плеера врут. однако ID3v2 нам помогает - она создает первый фрейм МПЕГ но с фиктивными данными (точнее там стриминговый EXIF), в которам указан средний битрейт, который и соответствует размер трека поделенный на время. Ничего сложного как бы.