TM3P, Вседиапазонный AM/FM/SW/LW радиоприемник c RDS/RDBS, модуль расширение к Arduino. Si4735

TM3P, Вседиапазонный AM/FM/SW/LW радиоприемник c RDS/RDBS, модуль расширение к Arduino. Si4735
Есть в наличии. Отгрузка со склада в г.Москва 1 рабочий день.
Возможна срочная доставка завтра
541.10 руб. × = 541.10 руб.

Спецификация набора

То, что у вас уже есть, вы можете удалить в корзине.

НаименованиеЦенаКол-во
Печатная плата TM3P, Печатная плата с разводкой, FR4 25,4х25,4мм (1,5мм,18мкм) 120 руб. 1
SI4735-D60-GU, RF приемник AM/FM/LW/SW 3.3V/5V Automotive [SSOP-24] 360 руб. 1
Кер.ЧИП конд. 15пФ,NPO 50В, 5%,0603 0.90 руб. 2
Кер.ЧИП конд. 1000пФ NPO 50В 5% 0603 (1нф), GRM1885C1H102J, Конденсатор 2 руб. 1
Кер.ЧИП конд. 0.022мкФ X7R 50В 10% 0603, GRM188R71H223K 2 руб. 1
Кер.ЧИП конд. 0.1мкФ,Y5V 50В, +80-20%,0603 0.90 руб. 3
Кер.ЧИП конд. 0.47мкФY5V 50В-20+80%0603, GRM188F51A474Z 2 руб. 1
0.063Вт 0603 4.7 кОм, 5%, Чип резистор (SMD) 0.90 руб. 2
0.063Вт 0603 10 кОм, 5%, Чип резистор (SMD) 0.90 руб. 2
LQW18ANR22G, 0.22 мкГн, 0603, 2%, Индуктивность SMD 10 руб. 2
BAV99LT1G, Диод 6нс 100В 215мА [SOT-23] 2 руб. 2
32768 Гц имп. цил.3x8мм DT-38T, кварцевый резонатор 12 руб. 1
PLS-20 (DS1021-1x20), Вилка штыревая 2.54мм 1x20 прямая тип1 11 руб. 1

Описание

Микросхема, на которой предлагается построить модуль TM3P - Si4735 это цифровой CMOS AM / FM радиоприемник, который объединяет полный тракт тюнера от антенного входа до аудио выхода.
Это многофункциональное решение включает в себя расширенные алгоритмы автопоиска, режим mute, цифровую автоподстройку и стерео декодер.
Чип также включает в себя цифровой процессор для европейской системы передачи данных по радиоканалу ( RDS ) и Североамериканской системы Radio Broadcast Data ( RBDS ), включая декодирование символов, синхронизацию блоков, обнаружение и коррекцию ошибок.
Короче, это полнофункциональное AM / FM / LW / SW радио в одном чипе.
И когда вы смонтируете это чип на нашу плату, подключите модуль к микроконтроллеру (например Arduino), то сможете насладится качественным приемом вещательных станций практически во всем доступном диапазоне частот.
Прослушать вещание можно через наушники, подключив их непосредственно к модулю. Или лучше построить домашний стерео тюнер очень высокого класса.

Технические характеристики

Автоматическая подстройка частоты, (АПЧ / AFC)
Автоматическая регулировка усиления, (АРУ / AGG)
FM стерео декодер
RDS / RBDS процессор-декодер
Рабочие частоты:
- Длинные волны (LW)153–279 кГц
- Средние волны (AM) 520–1710 кГц
- Короткие волны (SW) 2.3–26.1 МГц
- УКВ (FM) 64–108 МГц

Внешний вид модуля

Внешний вид

Электрическая схема

Электрическая схема

Монтажная схема верх

Верх

Монтажная схема низ

Низ

Это открытый проект! Лицензия, под которой он распространяется – Creative Commons - Attribution - Share Alike license. Проект выполнен в KiCad. Любые файлы доступны для скачивания.

Скетч. Код программы

#include <Si4735.h>
#include "Wire.h"
#include <Adafruit_SSD1306.h>
#include "TM3P.h"

Si4735 TM3P;
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
volatile byte State = 0;
boolean ManualTune = 1;


void setup()
{
  byte KEYS_PINS[KEYS_NUM] = {KEY_0_PIN, KEY_1_PIN, KEY_2_PIN, KEY_3_PIN,
                              KEY_4_PIN, KEY_5_PIN, KEY_6_PIN, KEY_7_PIN};

  for(byte i = 0; i < KEYS_NUM; i++)
  {
    pinMode(KEYS_PINS[i], INPUT);
    digitalWrite(KEYS_PINS[i], HIGH);
  }
  
  TM3P.begin();
  TM3P.setMode(FM);
  TM3P.setSpacing(10);
  TM3P.setVolume(57);
  TM3P.tuneFrequency(9520);
  while((STC_MASK & TM3P.getInterrupts()) == 0);
  
  display.begin(SSD1306_SWITCHCAPVCC);
  display.clearDisplay();
}
//-------------------------------------------------------------------------
void loop()
{
  ScanKeyBoard(); 
  
  if ((State & USER_FLAGS_MASK) != 0)
  {
    if ((State & VOLUME_UP_FLAG) == VOLUME_UP_FLAG)
    {
      TM3P.volumeUp();
      if (TM3P.getMute())
        TM3P.toggleMute();
      State &= ~VOLUME_UP_FLAG;
    }

    else if ((State & VOLUME_DOWN_FLAG) == VOLUME_DOWN_FLAG)
    {
      TM3P.volumeDown();
      if (TM3P.getMute())
        TM3P.toggleMute();
      State &= ~VOLUME_DOWN_FLAG;
    }

    else if ((State & FREQUENCY_UP_FLAG) == FREQUENCY_UP_FLAG)
    {
      if(!ManualTune)
        TM3P.seekUp();
      else
        TM3P.frequencyUp();
      while((STC_MASK & TM3P.getInterrupts()) == 0);
      TM3P.getFrequency(1);
      State &= ~FREQUENCY_UP_FLAG;
    }

    else if ((State & FREQUENCY_DOWN_FLAG) == FREQUENCY_DOWN_FLAG)
    {
      if(!ManualTune)
        TM3P.seekDown();
      else
        TM3P.frequencyDown();
      while((STC_MASK & TM3P.getInterrupts()) == 0);
      TM3P.getFrequency(1);
      State &= ~FREQUENCY_DOWN_FLAG;
    }

    else if ((State & MUTE_TOGGLE_FLAG) == MUTE_TOGGLE_FLAG)
    {
      TM3P.toggleMute();
      State &= ~MUTE_TOGGLE_FLAG;
    }

    else if ((State & MODE_CHANGE_FLAG) == MODE_CHANGE_FLAG)
    {
      byte NewMode = TM3P.getMode() + 1;
      if (NewMode > LW)
        NewMode = FM;

      TM3P.setMode(NewMode);
      if (NewMode == FM)
        TM3P.setSpacing(10);

      State &= ~MODE_CHANGE_FLAG;
    }

    else if ((State & MANUAL_TUNE_FLAG) == MANUAL_TUNE_FLAG)
    {
      if(ManualTune)
        ManualTune = false;
      else
        ManualTune = true;
      
      State &= ~MANUAL_TUNE_FLAG;
    }
  }

  UpdateDisplay();
  delay(250);
}
//---------------------------------------------------------------------
void UpdateDisplay()
{
  display.clearDisplay();
  display.setTextSize(STATUS_BAR_SIZE);
  display.setTextColor(WHITE);
  UpdateVolume();
  
  if(!ManualTune)
  {
    display.setCursor(TUNE_MODE_HOR_POS, TUNE_MODE_VER_POS);
    display.print("auto");
  }
  
  display.setCursor(FREQUENCY_HOR_POS, FREQUENCY_VER_POS);
  display.print(((float)TM3P.currentFrequency())/100);
  display.setCursor(MODE_HOR_POS, MODE_VER_POS);
  char ModeString[3] = "FM";
  byte TM3PMode = TM3P.getMode();
  switch(TM3PMode)
  {
    case AM:
      ModeString[0] = 'A';
    break;

    case SW:
      ModeString[0] = 'S';
      ModeString[1] = 'W';
    break;

    case LW:
      ModeString[0] = 'L';
      ModeString[1] = 'W';
    break;

    default:
    break;
  }
  
  display.print(ModeString);
  UpdateData();
  display.display();
}
//---------------------------------------------------------------------
void UpdateVolume()
{
  display.drawLine(VOLUME_HOR_POS, VOLUME_VER_POS+2, VOLUME_HOR_POS, VOLUME_VER_POS+4, WHITE);
  display.drawLine(VOLUME_HOR_POS, VOLUME_VER_POS+2, VOLUME_HOR_POS+4, VOLUME_VER_POS+2, WHITE);
  display.drawLine(VOLUME_HOR_POS, VOLUME_VER_POS+4, VOLUME_HOR_POS+4, VOLUME_VER_POS+4, WHITE);
  display.drawLine(VOLUME_HOR_POS+4, VOLUME_VER_POS+2, VOLUME_HOR_POS+4, VOLUME_VER_POS+4, WHITE);
  display.drawLine(VOLUME_HOR_POS+4, VOLUME_VER_POS+2, VOLUME_HOR_POS+9, VOLUME_VER_POS, WHITE);
  display.drawLine(VOLUME_HOR_POS+4, VOLUME_VER_POS+4, VOLUME_HOR_POS+9, VOLUME_VER_POS+6, WHITE);
  display.drawLine(VOLUME_HOR_POS+10, VOLUME_VER_POS, VOLUME_HOR_POS+10, VOLUME_VER_POS+6, WHITE);

  if (TM3P.getMute())
  {
    display.drawLine(VOLUME_VALUE_HOR_POS, VOLUME_VALUE_VER_POS+1, VOLUME_VALUE_HOR_POS+7, VOLUME_VALUE_VER_POS+5, WHITE);
    display.drawLine(VOLUME_VALUE_HOR_POS, VOLUME_VALUE_VER_POS+5, VOLUME_VALUE_HOR_POS+7, VOLUME_VALUE_VER_POS+1, WHITE);
  }
  else
  {
    display.setCursor(VOLUME_VALUE_HOR_POS, VOLUME_VALUE_VER_POS);
    display.print(TM3P.getVolume());
  }
}
//---------------------------------------------------------------------
void UpdateData()
{
  char UserDataString[] = "          Research and Development Center Chip&Dip          ";
  char DisplayString[DATA_CHAR_IN_LINE+1];
  char *StringPtr;

  static byte Start = 0;
  static byte End = DATA_CHAR_IN_LINE - 1;

  if (TM3P.checkRDS())
  {
    StringPtr = TM3P.rds.radioText;
  }
  else
  {
    StringPtr = UserDataString;
  }

  if(*(StringPtr + End) == '\0')
  {
    Start = 0;
    End = DATA_CHAR_IN_LINE - 1;
  }

  for(byte i = 0; i < DATA_CHAR_IN_LINE; i++)
  {
    DisplayString[i] = *(StringPtr + Start + i);
  }

  Start++;
  End++;
  
  display.setTextSize(DATA_SIZE);
  display.setCursor(DATA_HOR_POS, DATA_VER_POS);
  display.print(DisplayString);
}
//---------------------------------------------------------------------
//проверка клавиатуры
byte ScanKeyBoard()
{
  byte KEYS_PINS[KEYS_NUM] = {KEY_0_PIN, KEY_1_PIN, KEY_2_PIN, KEY_3_PIN,
                              KEY_4_PIN, KEY_5_PIN, KEY_6_PIN, KEY_7_PIN};

  for (byte i = 0; i < KEYS_NUM; i++)
  {
    if (digitalRead(KEYS_PINS[i]) == 0)
    {
      delay(70);
      if (digitalRead(KEYS_PINS[i]) == 0)
      {
        State |= 1 << i;
        return i;
      }
    }
  }
  
  return KEYBOARD_RELEASED;
}

Техническая документация

TM3P_BOM
pdf, 89 КБ
TM3P Схема
pdf, 384 КБ
TM3P_ino
zip, 2 КБ
TM3P_KiCad_project
zip, 514 КБ
Gerber файлы
zip, 29 КБ
TM3P_pdf
zip, 400 КБ

Комментарии