FM радиоприемник с ИС TEA5767 под управление на Arduino

     Поредната моя конструкция възникна в резултат няколкo-вечерните ми приятни занимания с едно от последните ми нискобюджетни китайски попълнения от съвременните електронни компоненти, а именно ИС TEA5767 - FM стерео радиоприемник на нисковолтово захранване.

    С цената си на международните пазари малко над цената на едно хубаво кафе (и то не само на интегралната схема, а на блокче с цялата периферия, вкл. нискочестотен кварцов резонатор на 32,768 kHz), заради което е добре човек да си вземе не една бройка, дори без да има идея за конкретна бъдеща разработка.

    Интегралната схема е с ниска консумация (13 mA при захранване от 2,5V до 5V) и съдържа в себе си почти всички възли на приемника от вход "антена" до изход "ляв и десен канал". Външни остават управлението (по шина i2c), индикацията и нискочестотния усилвател (ако ще се ползва към високоговорители).

    Блокчето с прилежащите елементи е с размери само 11 х 11 mm.

    Освен ниския профил, при първоначален поглед прави впечатление нестандартния растер на изводите - разстоянието между тях е 2 мм, а по ширина - 11 мм. Не съм си представял директно запояване на изводи или проводници, но в конструкции [1] в интернет видях няколко "трагични" резултата, които завършват с отлепени шини. Заради микро-размерите на платчето и фината изработка след събитието се "гарантира" последващата му плачевна съдба.

    За моите си експерименти установих, че платка-присадка за монтиране в цокъл за голяма интегрална схема е добро решение за монтаж, но не ми се чертаеше такава.

    Един-единствен разрез с бързооборотното диамантено дискче беше достатъчен да "разполовя" един готов фабричен "SO-16/TSSOP-16 към DIP-16" преходник. Според мои сметки получих преходник към DIP-10  .

    Да си призная: преди четири месеца бях пълен противник за използване на т. нар. breadboard (пластмасова "платка" с отвори, с контактни пластинки отдолу, свързани електрически по редове и стълбове), където с помощта на проводници се осъществява контакт на ел. елементи с цел тестове при проектиране, главно за цифрови ел. схеми.

    Всичко това ми се струваше страшно "паешко" и ненадеждно, но магията явно "работи". Логически схеми с интегрални схеми "тръгваха от раз", а последващите експерименти на какви ли не схеми доказа, че почти всичко (разбира се: не "много ВЧ") "оживява" там.

    Целите на упражнението по нареждането на елементи върху breadboard вероятно е за спестяване на време и нерви (като че ли на съвременните конструктори им липсва поялник?).

    С микроконтролерите свикнах с плетеницата от цветни кабелчета и подреждането им, особено за програмки от сериите на "Здравей, свят" (разбирай "ЛЕД блинк") с един, два, три или повече светодиода .

    Та за първоначалната тестова установка на бъдещия FM приемник, без да се замисля много, използвах въпросната breadboard. "Много-ВЧ сигнали" (88-108 MHz) има само на един извод на радиочестотното блокче (и той е входа за антена), а за управлението по i2c bus (с честота 100 kHz) и липса на специални изисквания към фронтовете на импулсите, дължината на 10-те сантиметрови свързващи проводници не се оказа някакъв проблем. Аз се застраховах допълнително, като "натоварих" SDA и SCL с резистори 4,7k.

    Използвам платформата на Arduino по няколко причини: ниска цена (особено китайските клонинги), широко приложение, безкрай безплатни, споделени библиотеки за нови компоненти и готови модули, устойчива работа, висока надеждност, (почти) невъзможност развойната платка да дефектира при неправилно свързване на входове, изходи и др.

    Не на последно място (за мен) е прилично "чистия" език за писане (C, C++), където първоначално замисления алгоритъм на работа (у главата на автора, hi ) почти праволинейно се "превежда" на разбираем "полуанглийски език" за "машинарията". За "новобранци" в писането на програмен код (като мене ) средата е прекрасна и лесно усвояема.

    Друга особено добра страна е модулното му програмиране - днес може да програмираш основната, работна задача за бъдещото си устройство. Утре, когато намериш свободно време, може да "оцветиш" дисплея с допълнителни функции като волтметри, измервателни бар-графи, шрифтове, знаци, да добавиш и управляваш външни блокове и компоненти, които ще подобрят комфорта при експлоатацията. Въобще "направи си устройство както и доколкото можеш, а после може приятел-разбирач, колега, програмист и др., да ти го подобри".

    Така се получи при мен: първата вечер се занимавах къде с примерите в интернет, къде с "чесане по главата" дотогава, докъдето ми се "изясни раб'тата" ... и с голяма помощ от приятели (които отговаряха на безкрайните ми на пръв поглед много и елементарни въпроси) сборих първия, начален "препъни камък": зареждане на няколко числа последователно по i2c, без индикация, без управление, без проверки, без бутони, като експеримента приключи с програмно кодче, версия 01 и приемник на една-единствена честота.

    Вярно, готови решения ("топли води", hi ) има вече "измислени", но тръпката при тоталното повторение за мен там няма.

    Новопостроеното устройство (със събран "алгоритъм на работа" и код оттук-оттам + собствен такъв), благодарение на собственото ни отношение към него в процеса на изработка, ни става "по-близко до душата".

    "Пътя на тока" е заменен с "пътя през програмния код", като "самоделството" се пренася в софтуерната част на готовите хардуерни компоненти. По-важно за мен е удоволствието от самото занимание.

    И без това в къщи съм "заровен" с поне двадесетина броя фабрични, други - на платки, спасени от изхвърляне, трети - от "направи си сам" FM приемници, та този ли ще е последния ...

    Инсталация на средата за разработка на Arduino няма да описвам. Само ще добавя, че използвам външна библиотека за управление на посоките при въртене на механичния енкодер / Ben Buxton: www.buxtronix.net/2011/10/rotary-encoders-done-properly.html, Richard Visokey AD7C: http://www.ad7c.com/projects/ad9850-dds-vfo/ (tnx!). Харесва ми с нея как работи енкодера - без забавене, прекъсвания в работата, без самопроизволни действия и др. За мен библиотеката е доказала устойчивостта и ефективността си в няколко други мои начални проекта.

    Външната библиотека Rotary (rotary.h, rotary.cpp) трябва да се добави ръчно в средата на Arduino. Написано по-просто: копирайте папка Rotary в "My Documents\Arduino\libraries".

    Няма да описвам и кода.

    Функциите на приемника са основните: "ръчно избиране на честота" и "запомнени станции". Авто-сканирания, интелигентни заглъхвания на сигналите, авто-превключване от стерео режим на моно и др. такива "екстри" могат да се добавят, но не са ми нужни. В новите приемници за мен са по-скоро дразнещи! Пето меню, шесто подменю ... Понякога от опции забравяш за какво си "влязъл" там ...

    Преди повече от 20 години си бях модифицирал българския тунер РСТ-201 с друга ВЧ част, като му използвах блоковете по междинна честота, ЧД, стерео-декодер и частта на АМ радио.

    За настройка тогава използвах потенциометър и 8 бутонен превключвател-регулатор за избиране на каналите от цветен телевизор ITT със сензорно управление (на ИС SAS560, SAS570), индикатори с миниатюрни лампички и механични потенциометри за запомняне на честота, от което ми остана само споменът и шепа вехти части ...

    Ех, времена ...

    Та такава ми беше и първоначалната идея за подреждане на менюто и надписите по дисплея: простота преди всичко.

    Отбелязвам, че всеки надпис може да си променя лесно мястото на изписване, разредеността и др. Добавяйте, премахвайте, променяйте функциите, слагайте нови бутони, памети, дисплеи. Arduino "не се чупи", "не пуши" и "не издава странни звуци", ако в кода нещо не е в ред. На мен ми беше необходима седмица, за да се престраша да модифицирам (и дописвам) от "чужди" кодове това , което искам и да изразя на ардуиновския език моите си размисли.

    Вариантите на реакцията на средата на Arduino са 3:

    Първи вариант: Има "синтактическа грешка", червени надписи (като черга) следват края на кода - "словоредът" е неправилен и програмата не се компилира.

    Чукча сказал (за бутилка водка): Четене трябва.

    Втори вариант: Програмата се компилира успешно, изпраща се и се стартира на устройството, но има логическа грешка: действията на периферията са грешни (надписи, математически сметки, честоти, състояния на устройства и други).

    За отстраняване трябва дълго взиране в монитора, писане с молив върху хартия на случващите се събития, изпълняване стъпка по стъпка и понякога – сериозна поправка в кода.

    Трети вариант: устройството заработва така, както сте го запланували. Тогава се радвате на работата му няколко дни, след това добавяте някоя екстра, после се хвалите на приятели, споделяте кода на творението си и пишете статия .

    Реално "разбивам" цялата си идея за работа на малки, елементарни действия, които дописвам с код. Свързвам ги едно за друго в отделна, копирана част от програмата. Така при фал трия написаното и се връщам една стъпка назад, до предното проверено и работещо състояние.

    Вярно, папката с проекта расте, бъркотията от версиите и преплетения код е неуправляема (виж "Спагети-код" [5]).

    След една-две седмици, по максимално 20-30 мин на ден "писане" на код, учудващо за вас събраните чаркалаци, платки и жици започват да се сработват едно с друго и устройството придобива живот съгласно идеята.

    Пишете коментари! Те са само и единствено за ваше собствено разяснение на процесите и са особено полезни (примерно) след месец, като отворите програмката и гледате безкрайните и безсмислените (на пръв поглед) редове. Аз не съм намерил място къде да да описвам действието на частично готовите версии, но експериментирам (не много успешно) на български език в имената на файловете. За мен си е разбираемо .

    Именувайте константи и променливи смислено, с подсещащо название, което е пак само за вас. Компютърът си ги превежда после по свой си начин и хич не му пука дали ще е s, tt, ucs, А9 или old_frecuency, но за вас това е важно от гледна точка на реда и яснотата.

    Мен лично не ми допада (почти) стандартизираното именуване по метода CamelCase [4]. Не мога да свикна с (примерно):

    БроячНаСтанциитеВЕфира = 8;

    От програмирането на Pascal ми остана писането с малки букви и с разделител "долно тире". Използвам и дълги линии от "средно тире" за разделител между функциите. Въобще ... "на вкус и цвет товарищей нет".

    Да спомена с изречение теоретичната вероятност за дефект на микроконтролера (в случая ATmega328P) след 100 000 записа във вътрешния EEPROM или след 10 000 записа във Flash (препрограмиране). Те и записите често не са прости записи, а с едно записване машинката прави неколкократно няколко такива, но това е по-скоро статистика.

    След тестове, правени в интернет се вижда, че нещата не са толкова "черни" - цифрите реално са умножени по 10. Имам и уверения на мои приятели (които се занимават от дълго време с такава дейност), че нямат случаи на нецеленасочено "изпичане" на микроконтролери, породено от записи (tnx LZ3GH, LZ2DVM).

    А и чипчето е нискобюджетно (вкл. и целия Arduino-модул). Случи ли се непредвиденото - вадиш, сменяш и продължаваш заниманията.

    Добре е все пак да не се прекалява със записи във вътрешния EEPROM на често изменящи се променливи, за което си има други начини на реализиране.

    Какво се получи накрая:


FM радиоприемник под управление на Arduino UNO

    FM стерео-радиоприемник с ИС TEA5767 под управление на Arduino:

        - консумация: 58 mA, на 12V шина преди стабилизатора, с индикация с подсветка, без консумацията на нискочестотния усилвател;

        - честотен диапазон: (87,6 ÷ 108,0) MHz (за моя екземпляр, захранен на 5V: реален честотен диапазон: (78 ÷ 117) MHz;

        - индикатор на честота на приеманата станция (ХХ,Х MHz);

        - стъпка на изменение на честотата: ± 100 kHz;

        - STEREO/MONO режим с индикатор, без възможност за ръчно превключване на режимите;

        - стандартна след-корекция на двата канала: deemphasis 50 μS (Европа, Австралия) / 75 μS (Северна Америка) с избор - в кода;

        - индикатор за силата на сигнала (в случая: нивото на AGC) с числена стойност и бар-граф;

        - управление с един орган на настройка (механичен енкодер с бутон);

        - режим "ЗАПАМЕТЕНИ СТАНЦИИ" и "НАСТРОЙКА" (TU). Двата режима се превключват алтернативно с кратко натискане на бутона на енкодера.

        - запомняне на станции (от 1 до 16, броя им лесно се променя в кода). Записът се извършва с по-дълго натискане на бутона на енкодера в режим "НАСТРОЙКА" (TU) върху клетка с текущ номер, изобразена в "ЗАПАМЕТЕНИ СТАНЦИИ";

        - възможност за нулиране на запаметените станции (reset default). Извършва се с много дълго задържане на бутона на енкодера (> 5 сек) и включване на устройството. Всички запомнени честоти в EEPROM се заместват със 108 MHz.



Архив: arduino_fm_rx_tea5767_lz2wsg_v21.zip [ino,spl7,gif,txt,h,cpp][2,1mb]

    Чувствителността не съм мерил (няма с какво), но е "добра" - радиото "хваща" с антена тип "жичка" всички местни радиопредаватели .

    Предвид ниската междинна честота от "само" 225 kHz, наличието на "двойно приемане" и по "огледална честота", съвсем близко до основното приемане, автоматично поставя приемника в ниския клас, но това не е пречка за творчество за новите ни самоделни непретенциозни приемници, конструкции за удоволствие и дори за детски играчки.

    За нискочестотен усилвател може да се използва всеки наличен стерео/моно аудио усилвател. Аз пробвах готовите си усилвателчета с LM386, К174УН7 и лампов такъв, с 6Ж4П.

    LM386 се представи зле - вероятно нефилтрираните остатъци от междинната честота на 225 kHz караха понякога усилвателя да работи нестабилно. Старата, изпитана ИС К174УН7 се представи прекрасно, с добър звук, а съм си оставил приемника засега да работи за ежедневен / вечерен фон в стаята с ламповото стъпалце.

    При реализацията на платка, наред с външния стабилизатор на 5V, може да добавите допълнителна верига (напр. CLC/CRC филтър) по захранването на радио-модула. Добра идея е и добавянето и на по-сериозен входен филтър към антенния вход.   

    Приемникът тествах и настройвах с Arduino Uno. По същия начин работи и с Arduino Nano. Необходимо е само да обявите вида на използваната платка (Nano) в менютата на средата Arduino IDE.


FM радиоприемник под управление на Arduino Nano

    Остава ми прехвърлянето на схемата на платка и монтирането на "всичката карантия" в подходящ корпус, но това занимание не ми е интересно .

       Имам идея за бъдеща реализация на запис на "последно използваната честота" (или запаметена станция), но предвид вероятното често активиране, бих изнесъл паметта във външен EEPROM или F-RAM?  Засега оставам проекта отворен за бъдещи хрумвания и допълнения. Затова вероятно ще изнеса USB порта извън кутията за бъдещите "ъпгрейти".

    На пазара има още няколко типа ИС (и модулчета, реализирани с тях), които са също толкова миниатюрни. По обявени параметри са по-добри от ТЕА5767. Ще трябва да се снабдя с AR1010, RDA5807M, RDA5820, SI4730 за сравнение.
 

*** Допълнение 1:

    Премахването на грешки, оптимизация на кода, дописванията и допълненията на удобства и нови функции към съществуващия софтуер може да се извършва до безкрайност. Това във времето е свързано с нервите и желанието на автора дотолкова, доколкото той иска да променя и усъвършенства устройството си.

    След няколко часово слушане на ефирни радиостанции ми направи впечатление, че максимума на настройка върху станция е леко изместен встрани. Това грубо може да се провери и без уреди: на ръчен режим (TU) настройте се върху позната радиостанция (на която знаете точно честотата) и добавете честотно отклонение (с помощта на енкодера) от ± (1 ÷ 2) стъпки или ± (100 ÷ 200) kHz от истинската честота. Затихването и пропадането на звука в двете страни трябва да е симетрично.

    Необходимо е измерване на генерираната честота на кварцовия резонатор (32,768 kHz) и извършване на корекция (с полупроменливи или постоянни кондензатори). Това действие не бих казал, че просто и изисква наличие на измервателни уреди с висока точност, които не притежавам. Бих се съгласил в настройката да има неточност, но да не запоявам нищо по микроскопичната платчица.

    Постъпих по следния начин: в кода коригирах честотата на кварцовия резонатор (участващ в пресмятането на честотата на PLL) с толкова, с колкото относително да се възстанови симетрията.

    ред 142:

    в програмния код е: frequencyB = 4 * (frequency * 100000 + 225000) / 32768;
    след корекцията става примерно: frequencyB = 4 * (frequency * 100000 + 225000) / 32760;

    С вашето радиоприемно модулче на ИС TEA5767 корекция може да не е необходима или тя да е с друг знак или стойност.

    След "настройката" приемникът засвири с по-чист тон, а загубеното време за това е точно 10 секунди .



    *** Допълнение 2:

    На електронната си поща получих молба за добавяне на нова функционалност: бутон за заглушаване на радио-възпроизвеждането (MUTE) (tnx, Mr. Raajjesh!).
Като вариант за употреба добавям изменението в принципната схема и кода на програмата към Arduino.

    На експерименталния етап при дописването на кода (на работното си място) лично харесах действието на бутона за заглушаването на звука: при нужда от разговор с мое повишено внимание просто натискам един бутон и възпроизвеждането просто спира .


FM радиоприемник под управление на Arduino UNO, с MUTE функция

Архив: arduino_fm_rx_tea5767_lz2wsg_v21_4.zip [ino,spl7,gif,h,cpp][229kb]

    Вариантът за по-компактна конструкция също е приложим с използване на Arduino Nano, при което програмният код е същия.


FM радиоприемник под управление на Arduino Nano, с MUTE функция
 

  ***
 

FM радиоприемник с ИС TEA5767 и дистанционно управление

    Като разглеждах новата конструкция на Мигел, PY2OHH [7] възникна идея да тествам посочената от него библиотека за управление с дистанционно управление (IR Control). Настройката е лесна, методиката е добре описана (tnx, Mr. Miguel, PY2OHH!).

    Небрежното ми търсене из запасите със стари, свалени от неработещи апаратури чаркалаци, се увенча с успех - първите два IR приемника от снимката по-долу "се спотайваха" от дълги години, прилежно прибрани, заедно с други "джунджурии" в кибритени кутийки (залепени и надписани като чекмедженца за съхранение на електронни елементи).

        Хрумна ми да използвам дистанционното управление като "екстра" на самоделното си FM приемниче. IR Control (вляво долу) е от тунер DVB-T+DAB+FM с ИС RTL2832U и остана неизползваемо заради друга моя конструкция. Дистанционното управление (вдясно долу) е с други надписи (и други кодове) и е втори, достъпен вариант за използване (tnx LZ2WNW!).

    При липса на неизползвани дистанционни управления и приемници към тях, на китайския пазар има подходящи за целта такива / приемник (вдясно на горната снимка) с комплект дистанционно управление (вдясно на долната снимка).

    За обработка на върнатите кодове на натиснатите бутони използвам примерния код IRrecvDemo във външната използвана библиотека IRremote. За избягване на конфликта с вътрешната библиотека RobotIRremote от Arduino IDE във помощния файл и във форумите препоръчват архивирането й с последващо премахване от текущите библиотеки. Така или иначе RobotIRremote никога не съм използвал досега.

    След това е необходимо да се стартира серийния монитор в средата Arduino IDE, като Arduino-модулът остане свързан със съединителния USB кабел към компютъра.

    Поради многократното ми превключване между двете програми (моята и демо-програмата за кодовете на бутоните) за мое улеснение добавих редовете за тест от библиотеката в моята си програма и това тестване работи непрекъснато (примерно за описване на друго дистанционно управление, промяна на функции на бутони и др.). Възможно е да се спре при настроена вече програма и избрано дистанционно, като се маркира като коментар ред 295, но не считам това за необходимо. Посочената функция по никакъв начин не "товари" процесора и не бави изпълнението на другите функции.

    За улеснение съм "сканирал" върнатите кодове на всички бутони на дистанционното (вкл. неизползваните), както и кодовете на второто дистанционно управление (вдясно на снимката). При условие, че се избере това дистанционно, трябва да се отмаркират от коментар съответните бутони (от ред 47, до ред 69), а предишните - да се маркират като коментар (от ред 22, до ред 44).

    Ще се получи това:

    При избор на друго дистанционно стартирайте програмния код (със свързан Arduino-модул), стартирайте серийния монитор, натиснете бутон на дистанционното и ще се появи число в шестнадесетичен вид, който е необходимо да се препише към реда на исканата функция.

     По-долу: примерен код на бутон "0" от IR.

    След дублиране на функциите от по-горната конструкция (ръчен и режим със запаметени станции, превключване нагоре-надолу из запаметените вече станции, запаметяване на нови станции и ръчно избиране на честота (без директно набиране) вече и с дистанционното устройство реших, че ще е изключително полезно да регулирам гръмкостта на радиоприемника по някакъв начин.

    Вариантът с друг радиоприемен модул (примерно: с вградено усилване по I2C шина) засега не разглеждам. Не разглеждам и добавяне на специализирани интегрални схеми-електронни потенциометри с управление по напрежение или с програмен код (по I2C, SPI и др.). Оставям това за бъдещи конструкции. Искаше ми се да повторя регулиране на усилването по начин, който да се вписва в самоделното устройство, като препрочитам то да бъде с дискретни елементи.

    Все пак удоволствието ми от направата е не да изработя още един приемник, работещ и управляващ се по абсолютно същия начин, както другите мои приемници в къщи, закупени от пазара.


    Тествах посочената по-долу схема - Г-образен атенюатор на пътя на сигнала, като звеното към земя е заместено с полеви транзистор като управляемо съпротивление.

    Още като подавах статично с потенциометър нива от 0 до 5 волта на управляващия електрод, слухово схемата не се представи добре, но умишлено пропуснах момента на по-подробните измервания на характеристиката на регулиране (примерно със SpectraLab). Въпросната схема съм използвал само във вериги на аудио-сигнал (който не е музика) и без изисквания към параметрите - напр. за микрофонен компресор към самоделен приемо-предавател, та този вариант от началото беше само да удовлетворя  желанието си да пиша безсмислен, непотребен програмен код .

    По същия елементарен начин "изработих" и управляващото напрежение към полевия транзистор - без външен ЦАП (DAC), при използване на (само) 255 стъпковия ШИМ (PWM) от цифровите изходи на Arduino, през обикновен интегратор (който дори не пресметнах, а "набучих" с времеконстанти "на око" от 10 kΩ и 10 μF).

    Е, вярно, схемата "пееше", усилваше се и се намаляваше експериментално примерно 5 дни, но все повече ми правеше впечатлението на странното "промодулиране" със звук "като на робот", особено забележимо на гласа на водещия на новинарските емисии на националното радио.

    "Схемата тръгна към разваляне" след като измерих честотата на изходните импулси на PWM от примерно 500 Hz и си представях какъв филтър съм сложил за изглаждане - "жива" АМ си се получава с подтисната носеща, с "обогатяване" на звуковия спектър с несъществуващи звуци и "инвертиране" на "басовата" част от речта ...

    Отрицателният резултат е също резултат ...


Регулиране на усилването с PWM

    Нуждаех се от друго елементарно решение на схема за електронен потенциометър.

    Използваната схема на електронен потенциометър с аналогови мултиплексори бяхме използвали (с подобна конфигурация) примерно в 1991-а година, след публикация в списание "Радио, телевизия, електроника", брой 8, 1989 год. на електрическа схема на дистанционно управление по радиовълни на 27 MHz към телевизионни приемници "София" и "Велико Търново".

    Схемата тогава беше пригодена към самоделен нискочестотен усилвател, като по радиоканал се включваше устройството, усилваше се и му се намаляваше гръмкостта. След модификацията с подобната схема се появи схема с 10 битовата ИС КР572ПА1, където с два реверсивни брояча до 16 - К155ИЕ7 / 74193, комфортът в брой стъпки на регулатора за усилване беше вече достигнат ...


Регулиране на усилването с CD4051

    Без много да мисля, дори без предварителен чертеж на разположението на компонентите "нахвърлях" на стъклотекстолит посочената схема. Нищо неподозиращите ИС CD4051 бяха безмилостно "осакатени" с къси изводи за последвалия "полулегнал" монтаж и по идея, че  "там ще си стоят, докато са интегрални схеми" . И без това се "залежаха" при мен вероятно повече от 20 г. в кутийките с електронни компоненти ...
 

    За мое учудване звукът се регулира прилично добре, без звукови ефекти и "ушечуйни" изкривявания. Дори активните 7 стъпки (без "нулевата" при намаляване на звука докрай) са достатъчно на брой. Така конструкцията много ми напомня регулиране на гръмкостта на радиоточка (примерно "Тонмайстор").

    Използването на дистанционното управление за регулиране на гръмкостта за мен е по-скоро за някаква свобода при експлоатацията (примерно при последвал телефонен разговор или при положение на използващия радиоприемника: отпочиващ на леглото и др. подобни).

    За изключващата захранването схема и помощните стабилизатори използвах първия вариант, който се сетих - без специални и без специализирани ИС и с наличните (по масата ) компоненти. Не е оптимално, но работи и си изпълнява задачата. В други конструкции ще бъде по друг начин.


Захранващ модул с управление

    Имаше вариант да "приспивам" Arduino-платката при POWER OFF и тя да се буди примерно на всеки от 1 до 8 секунди, но това ми се стори безсмислено за небатерийно захранване, така че Ардуино UNO (или Ардуино NANO) при гасене в момента остава работещ и сканиращ дистанционния приемник (или бутон на енкодера) за разрешена команда за включване (бутони от 0 до 9). 

Архив: arduino_fm_rx_tea5767_lz2wsg_v49.zip [ino,spl7,gif,txt,h,cpp][9,5mb]

        Вярно, конструкцията се получи голяма, с голям брой дискретни компоненти, която като конструкция друг трудно би се навил да повтори 1:1, но с дискретни компоненти я поисках аз. Като цяло всеки възел може да се оптимизира, изменя, допълва и съкращава при желание.


FM радиоприемник с IR под управление на Arduino UNO

    Какви са функциите на FM стерео-радиоприемникa с ИС TEA5767 и дистанционно управление:

        - консумация в режим "Изключено" (с два светещи светодиода): 32,8 mA на 12 волтовата шина;

        - консумация в режим "Включено" , с индикация с подсветка, без консумацията на нискочестотния усилвател: 96,8 mA;

        - честотен диапазон: (87,6 ÷ 108,0) MHz (за моя екземпляр, захранен на 5V: реален честотен диапазон: (78 ÷ 117) MHz;

        - индикатор на честота на приеманата станция (ХХ,Х MHz);

        - стъпка на изменение на честотата: ± 100 kHz;

        - STEREO/MONO режим с индикатор, без възможност за ръчно превключване на режимите;

        - стандартна след-корекция на двата канала: deemphasis 50 μS (Европа, Австралия) / 75 μS (Северна Америка) с избор - в кода;

        - индикатор за силата на сигнала (в случая: нивото на AGC) с числена стойност и бар-граф;

        - управление с механичен енкодер с бутон и дистанционно управление;

        - първоначално стартово състояние след подаване на захранващото напрежение: Загасено ! ;

        - загасене на приемника: с дистанционното управление, червен бутон (POWER OFF);

        - пускане на приемника: с дистанционното управление, избирателно, на запаметени станции, с бутони 0-9;

        - пускане на приемника: с бутон на енкодера: на запаметена станция с номер "0".

        - превключване между запаметените радиостанции:

            - чрез едкондер: с въртене вляво/вдясно, от 0 до 15, кръгово;

            - чрез дистанционното управление: с бутони CH+/CH-, от 0 до 15, кръгово;

            - чрез дистанционно управление: избирателно, с директен достъп, с бутони 0-9;

        - усилване / намаляване на гръмкостта: в 7 + 1 стъпки (4-та позиция - при старт, 0 - без звук), с бутони VOL+/VOL- на с дистанционното управление и показание върху дисплея с бар-граф за стойността;

        - режим "БЕЗ ЗВУК": с дистанционно управление, зелен бутон (MUTE);

        - режим "ЗАПАМЕТЕНИ СТАНЦИИ" и "НАСТРОЙКА" (TU). Двата режима се превключват алтернативно с кратко натискане на бутона на енкодера или с натискане на бутон "Full Screen" на дистанционното управление.

        - запомняне на станции от енкодера (от 0 до 15, броя им лесно се променя в кода). Записът се извършва с по-дълго натискане на бутона на енкодера в режим "НАСТРОЙКА" (TU) върху клетка с текущ номер, изобразена в "ЗАПАМЕТЕНИ СТАНЦИИ";

        - запомняне на станции от дистанционното управление: в режим "НАСТРОЙКА" (TU) и дълго натискане на желан бутон от 0 до 9.

        - възможност за нулиране на запаметените станции (reset default). Извършва се с много дълго задържане на бутона на енкодера (> 5 сек) и включване на устройството. Всички запомнени честоти в EEPROM се заместват с 87,6 MHz.

    Програмният ред за корекция на честотата на кварцовия осцилатор от Допълнение 2 е вече с номер 555:

    в програмния код е: frequencyB = 4 * (frequency * 100000 + 225000) / 32768;
    след корекцията става примерно: frequencyB = 4 * (frequency * 100000 + 225000) / 32760;

   
Както писах по-горе: с вашия радиоприемен модул на  ИС TEA5767 корекция може да не е необходима или тя да е с друг знак или стойност.
 

    В програмния код най-вероятно има пропуски, неоптимални функции (особено в IR Control !), "спагети-код"  (където и авторът забрави вече кое какво "вика" ), но допълненията оставям за друг, бъдещ период.

   
    С пожелания за хубава музика. Приятно слушане .


    Използвани материали:

    1. Подключение FM-радиомодуля TEA5767 к Arduino [madebyme]
    2. AD9850 DDS VFO,  Richard Visokey, AD7C
    3. Arduino
    4. Wikipedia, CamelCase
    5. Wikipedia, Spaghetti code
    6. AR1010, RDA5807M, RDA5820, SI4730, TEA5767 [zip,pdf][3,8mb]
    7. VFO DDS Arduino - AD9850 - IR Remote, PY2OHH

LZ2WSG, KN34PC
9 февруари 2016 година, доп. 20 март 2016 година, доп. 14 март 2017 година