Музикален разговор на микроконтролер, програмиране на PIC микроконтролер

Мина известно време и реших да направя плейър за музикални файлове. Този път взех по-мощен микроконтролер PIC16F876A, който има много RAM и голяма програмна памет, а има и много периферни модули. За удобство свързах дисплей от Nokia към микроконтролера, за да показва имената на файловете, налични на картата с памет, както и да показва различни грешки. Музикалните файлове бяха най-простите WAV файлове, използвани в други подобни устройства, намерени в мрежата. И така, написах нов код и придържах към него предишните разработки за работа с файловата система. За първи път използвах R-2R матрица, съставена от резистори като цифрово-аналогов преобразувател за извеждане на звук, тъй като броят на линиите на микроконтролера позволяваше използването на такава матрица. В бъдеще, в този случай, започнах да използвам PWM модул. Първоначално на дисплея се показваха кратки имена на файлове във формат 8.3, алгоритъмът за писане на дълги имена в системата FAT беше декодиран със значителни усилия, след което коригирах кода на микроконтролера и сега беше възможно да видите пълните имена на файлове на дисплея.
След още известно време имах идея: възможно ли е да вкарам този код, премахвайки всички ненужни в същия PIC16F628A? Естествено, дисплеят трябваше да бъде изоставен и с него количеството код беше намалено чрез изрязване на големи таблици за генериране на знаци. И накрая успяхпрехвърлете устройството към друг микроконтролер.
Предложената покана за съхранение на мелодии използва SD или MMC карти с памет, форматирани за файловата система FAT16 (от 2018 г. има версия с поддръжка на файловата система FAT32 и SDHC карти с памет, повече подробности в края на статията). Като мелодии се използват звукови файлове във формат WAV. Устройството може да възпроизвежда голям брой мелодии, а също така може да се използва като обикновен плейър на WAV файлове. Устройството е сглобено на широко разпространения микроконтролер PIC16F628A и има два режима на работа, които се задават с превключвател SA1. Горната позиция на превключвателя съответства на режим „Играч“, а долната позиция съответства на режим „Повикване“. Микроконтролерът проверява състоянието на превключвателя само веднъж, след подаване на захранване. За да промените режима, изключете захранването, поставете превключвателя на желаната позиция и подайте отново захранване на устройството.

В режим “Call” след подаване на захранване микроконтролерът настройва вътрешните регистри, след което преминава в режим на заспиване. Когато натиснете бутона SB1 („Повикване / Възпроизвеждане“), микроконтролерът се „събужда“, както се вижда от включването на светодиода HL1, включва захранването на картата с памет, нулира и инициализира, след което търси звуков файл в него. Търсене на мелодииизвършено от WAV разширение. След като намери желания файл, микроконтролерът го възпроизвежда, изключва захранването на картата с памет и след това отново „заспива“ и светодиодът HL1 изгасва. При следващото натискане на бутона SB1 всичко ще се повтори, но ще се възпроизведе следващият звуков файл.
На карта с памет могат да бъдат записани до 512 мелодии, това е максималният брой записи в главната директория за файловата система FAT16. След възпроизвеждане на всички мелодии, те ще бъдат възпроизведени отново. В този режим не се използват бутони SB2, SB3, SB4.
В режим "Плейър", след подаване на захранване, микроконтролерът също конфигурира вътрешните регистри, включва захранването на картата с памет, изпълнява процедурата за нулиране и инициализиране, в случай на успешно завършване на процедурата, светодиодът HL1 мига. След това се търси WAV файлът, веднага щом файлът бъде намерен, микроконтролерът ще продължи да проверява състоянието на бутоните. Натискането на бутона SB1 ще започне непрекъснато възпроизвеждане на всички аудио файлове на картата с памет. Бутонът SB2 (“Стоп”) може да спре възпроизвеждането на текущата мелодия, бутоните SB3 (“Следваща”) и SB4 (“Предишна”) превключват между мелодиите, превключването е възможно по време на възпроизвеждане, както и след спиране.
Ако процедурата по нулиране и инициализацията на картата с памет са неуспешни, микроконтролерът ще направи нов опит, а ако и той не успее, ще прозвучат два кратки звукови сигнала с нисък тон, след което микроконтролерът ще премине в кръгов цикъл и ще спре да отговаря на команди. В този случай трябва да проверите надеждността на връзката с картата с памет или да опитате да я смените. В режим “Повикване” в случай на грешка при нулиране и инициализация ще прозвучат и два кратки нискотонални звукови сигнала, след което, както и преди, микроконтролерът ще изключи захранването на картата ище премине в режим на заспиване. Ако картата с памет спре да отговаря на команди или просто „замръзне“, тогава в режим „Плейър“ микроконтролерът ще се изключи и ще включи захранването на картата, след което ще я нулира и инициализира отново. В режим „Повикване“, след като картата „замръзне“, микроконтролерът просто изключва захранването на картата и „заспива“. Ако на картата с памет няма WAV файлове, ще прозвучат три кратки звукови сигнала с нисък тон, след което „Плейърът“ ще продължи да избира бутоните, при натискане ще прозвучи същият предупредителен сигнал, а в режим „Повикване“, след сигнал за липса на файлове, микроконтролерът ще изключи захранването на картата с памет и ще „заспи“. Ако параметрите на WAV файла не отговарят на изискваните стойности, например грешна честота на дискретизация, битова дълбочина и т.н., ще прозвучи нисък тон за една секунда и в двата режима ще се извърши преход към следващата мелодия.
За да съответстват на логическите нива на микроконтролера и картата с памет, на резистори R6-R11 са инсталирани делители на напрежение.
Звукът се извежда с помощта на PWM модул, вграден в микроконтролера, чиято честота в това устройство е 78,12 kHz. Аудио сигналът се изглажда от филтъра R14C9, след което отива към усилвател на мощност, изграден върху чипа DA1 TDA2003. Променливият резистор R18 регулира силата на звука. Елементите R15, C11 трябва да се монтират, когато усилвателят се самовъзбужда.
Устройството поддържа аудио файлове във формат WAV (PCM, 16kHz, 8 бита, моно, некомпресиран), файлове с други параметри няма да се възпроизвеждат, следователно, ако е необходимо, избраните аудио файлове ще бъдат конвертирани с помощта на програми за конвертиране. Когато се записват на карта с памет, WAV файловете могат да имат всякакви имена.
Файловата система FAT16 не поддържа носители за съхранение, по-големи от 2GB, така че това е максималният размер за карта с памет, която може да се използва в устройството. Тествахме 4 microSD карти от различни марки и размери, това са Kingston 1GB, Kingmax 512MB, Silicon Power 2GB, Transcend 1GB. MMC картите също трябва да работят, не можах да тествам това поради липсата на такава карта.
Устройството използва постоянни резистори MLT. Превключвател SA1 - PD 9-2. Бутони SB1-SB4 часовник TS-A3PS-130. Ценеровият диод KS139A може да бъде заменен с внесен, със стабилизиращо напрежение 3,9V. Може да се използва произволен драйвер BA1 с мощност 2 - 4 W със съпротивление на бобината 4 или 8 ома. Вместо транзистора KT503V можете да инсталирате KT3102AM. Чипът TDA2003 е взаимозаменяем с TDA2002, TDA2008, K174UN14, той трябва да бъде инсталиран на радиатор с площ най-малко 60 cm2.
Всички части са поставени върху печатна платка от едностранно фолио от фибростъкло. Печатната платка има отвори за свързване на външен бутон “Call”, който дублира бутона SB1. Самоделен слот за карта памет. Като източник на захранване можете да използвате нестабилизирано мрежово захранване с изходно напрежение 9-12V и ток най-малко 0,5A. Програмата за микроконтролера е написана на асемблер в среда MPLAB.

По-долу е актуализираната версия на фърмуера. В тази версия номерът на изсвирената мелодия се съхранява в EEPROM на микроконтролера (само за режим на звънене). Така при спиране на захранването възпроизвеждането няма да започне от първата мелодия от папката, а ще продължи от момента, в който е била записана.
Последните бележки:
136 коментара за “Музикален звънец на микроконтролер”
Здравейте. Сглобих музикален звънец: в режим „player“ работи добре (само светодиодът не свети, въпреки че не знам трябва ли да свети?) .... В режим „call“ има някакъв бъг, а именно: Натискам Play, музиката започва да свири, светодиодът свети, музиката свърши, светодиодът е изключен ... Натискам отново „play“, НО мелодията вече не се възпроизвежда, когато натиснете P Lei a чува се сигнал (бипкане) и това е всичко ... но следващата мелодия трябва да започне . Изключвам звънеца, включвам го, натискам "play", 1-вата мелодия свири, светодиодът свети, мелодията свърши, светодиодът изгасва, натискам "play" и отново има кратък сигнал, не следващата мелодия, не първата не свири .... (Взех мелодиите от тестовия сайт) ... .. Презареден, не помогна .... Кажете ми какво може да е. Благодаря ви предварително.
един кратък звуков сигнал означава, че параметрите на WAV файла са неправилни, въпреки че тестовите файлове имат правилните параметри, опитайте да използвате друга карта с памет, данните може да не се четат правилно.
admin, смених флашката с друга 2GB и всичко заработи катоби трябвало да. Благодаря ви за тази диаграма.
Добро време) Реших да направя курс по тази тема. има ли друга информация?? може например блокова диаграма
За съжаление няма блокова схема.
Има ли успехи в изпълнението на курсовия проект по тази схема?
и имате ли желание да направите подобрение, например безжичен звънец, така да се каже) от едната страна на вратата има бутон, а от другата страна има приемник и звънец ...
Все още не планирах да го подобря, въпреки че планирам скоро да напиша статия за безжично предаване на данни с помощта на радиопредаватели.
И защо изборът на елементна база е точно такъв? Защо този МК
Просто исках да сглобя разговор на обикновен общ MK, в същото време да изстискам максимума от него, изборът на елементна база беше извършен поради причини за наличност.
Здравейте. И можете да разгледате разработките с PIC16F876A
Здравейте. Сглобих вашето устройство и, както повечето, не работи. Той изобщо не вижда файлове - три кратки звукови сигнала, когато щракнете върху „обаждане“. Използвах 128mb micro sd. Мисля, че е или файловата система, или размерът на клъстера. Молим ви да го изпробвате на малки карти и да споделите опита си (как да форматирате или коригирате програмния код в пика) Благодаря! Също така предлагам да продължим това, което започнахме и да разработим автоматичен отговор с помощта на кирка и карта с памет.
Размерът на клъстера се записва във файловата система FAT, а в случай на карта с памет от 128 MB е 4 сектора (т.е. 512 * 4 = 2048 байта), микроконтролерът чете тази стойност за последващи изчисления. Проверете разширението на вашите файлове, форматирайте картата, опитайте друга карта, за да определите причината. Нямам карти с памет с толкова малък капацитет, така че не мога да проверя.
Кажи ми моля тенякаква надеждна програма за формат на флаш карта на ниско ниво, така че да почиства и MBR. Ato, използвах помощните програми от MultiBoot USB и записах сектора за зареждане в MBR за мен, сега няма файлове и устройството замръзва ....
Когато тествах обаждането по време на разработката, изобщо не форматирах картите си, всички ми работеха веднага. Опитайте да форматирате със стандартни инструменти на Windows (файлова система FAT16), един човек също имаше проблеми с форматирането, той написа, че е форматирал картата с програмата Mini Tool Partition Wizard Home Edition като основен диск (Primary) и при него се получи.
за оценка на качеството
Опитах се да форматирам всичко вчера с всичко възможно - резултатите са "0". Може би проблема е в четеца на карти - имам го на китайски. И още един въпрос, ако си записал wav файлове и си ги пуснал на разговора си, а след това напълно ги изтрил от флашката и ги вкарал отново в разговора, как ще реагира?
Днес се опитах да изрежа wav файлове от карта с памет (1 Gb) и да се свържа с разговора, всичко е както трябва 3 кратки звукови сигнала (няма файлове), пиша обратно всичко се губи. Още веднъж да напомня, че никога не съм си форматирал картите. Пробвал ли си с други карти памет? Може би все още чувате 2 кратки звукови сигнала, показващи неуспешна инициализация на картата? Изпратих ви имейл с инструкции, изпратете ми информация за вашата карта, като следвате инструкциите.
събра апарата.... извежда 2 къси звукови сигнала.