Новости:

Форум Infotex WeaponMod

Тема: TV Tuner FM1216ME  (Прочитано 45383 раз)

Оффлайн Koshak 17 Октября 2016, 06:53:06 (#15)

  • Отпусти меня чудо халфа
  • КотЭ
  • Ветеран
  • *
  • Сообщений: 2758
  • Карма: +270/-16
    • Просмотр профиля
    • Infotex Мир Хобби
Для этого тюнера смещение частоты -22.6MHz. Если настроился на 100MHz реально принимаешь 77.4 MHz, это можно скорректировать в скетче.
У кошки четыре ноги: вход, выход, земля и питание

Оффлайн irobot 20 Октября 2016, 13:57:43 (#16)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
Для этого тюнера смещение частоты -22.6MHz. Если настроился на 100MHz реально принимаешь 77.4 MHz, это можно скорректировать в скетче.
Может не правильно была промежуточная частота выбрана,судя по цифрам смещение как раз для промежуточной 10,7 мгц

Оффлайн Koshak 21 Октября 2016, 23:02:21 (#17)

  • Отпусти меня чудо халфа
  • КотЭ
  • Ветеран
  • *
  • Сообщений: 2758
  • Карма: +270/-16
    • Просмотр профиля
    • Infotex Мир Хобби
Мне лень разбираться с библиотекой  :-) она написана для FM1216ME а я нацепил FM1256/IH-3 на который я доки так и не нашёл...
У тебя получилось завести приёмник?
У кошки четыре ноги: вход, выход, земля и питание

Оффлайн irobot 22 Октября 2016, 08:25:00 (#18)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
Так и не получается,не пойму,почему даже в порт данные не идут  /:(,вот бы библиотеку переправить на свежую версию IDE

Оффлайн Koshak 23 Октября 2016, 12:58:01 (#19)

  • Отпусти меня чудо халфа
  • КотЭ
  • Ветеран
  • *
  • Сообщений: 2758
  • Карма: +270/-16
    • Просмотр профиля
    • Infotex Мир Хобби
Вот мой пример кода.
Дисплей висит на аппаратном I2C
Тюнер висит на совтовом, можно изменить пины подключения в библиотеке SoftI2CMaster.h
Цитировать
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "FM1216.h"

LiquidCrystal_I2C lcd(0x21,16,2);

FM1216 tuner;

unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 3;  // pin 3
const int pin_B = 2;  // pin 2
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev = 0;
unsigned long frq = 127800;
unsigned long frq_old;
float frq_disp;

//-------------------------------------------
void setup()
{
  pinMode(pin_A, INPUT_PULLUP);
  pinMode(pin_B, INPUT_PULLUP);
  currentTime = millis();
  loopTime = currentTime;

  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея
  lcd.setCursor(0, 0);
  tuner.init();
  tuner.setFreq(frq);
  Serial.begin(9600);
  Serial.println("Start");

  lcd.setCursor(0, 0);
  lcd.print("  FM1256/I H-3   ");
  lcd.setCursor(0, 1);
  lcd.print("     TUNER  ");
  delay(3000);
  tuner.setStereo(true); // FM Стерео xDD
}

//-------------------------------------------
void loop()
{
  rotary_enc();

  if (frq != frq_old)
  {
    Serial.println(frq);

    tuner.setFreq(frq);

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("    FM RADIO");
    lcd.setCursor(0, 1);
    lcd.print(" FRQ: ");
    frq_disp = frq;
    lcd.print((frq_disp / 1000) - 22.6, 1); ////коррекция 22.6 MHz
    lcd.print(" MHz");
  }
  frq_old = frq;
}

//-------------------------------------------
void rotary_enc()
{
  currentTime = millis();
  if (currentTime >= (loopTime + 5)) {
    encoder_A = digitalRead(pin_A);
    encoder_B = digitalRead(pin_B);
    if ((!encoder_A) && (encoder_A_prev)) {
      if (encoder_B) {
        frq = frq + 100;
        if (frq > 130600) {
          frq = 87600;
        }
      }
      else {
        frq = frq - 100;
        if (frq < 87600) {
          frq = 130600;
        }
      }
    }
    encoder_A_prev = encoder_A;
    loopTime = currentTime;
  }
}
У кошки четыре ноги: вход, выход, земля и питание

Оффлайн irobot 23 Октября 2016, 16:56:40 (#20)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
Вот мой пример кода.
Дисплей висит на аппаратном I2C
Тюнер висит на совтовом, можно изменить пины подключения в библиотеке SoftI2CMaster.h
Цитировать
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "FM1216.h"

LiquidCrystal_I2C lcd(0x21,16,2);

FM1216 tuner;

unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 3;  // pin 3
const int pin_B = 2;  // pin 2
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev = 0;
unsigned long frq = 127800;
unsigned long frq_old;
float frq_disp;

//-------------------------------------------
void setup()
{
  pinMode(pin_A, INPUT_PULLUP);
  pinMode(pin_B, INPUT_PULLUP);
  currentTime = millis();
  loopTime = currentTime;

  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея
  lcd.setCursor(0, 0);
  tuner.init();
  tuner.setFreq(frq);
  Serial.begin(9600);
  Serial.println("Start");

  lcd.setCursor(0, 0);
  lcd.print("  FM1256/I H-3   ");
  lcd.setCursor(0, 1);
  lcd.print("     TUNER  ");
  delay(3000);
  tuner.setStereo(true); // FM Стерео xDD
}

//-------------------------------------------
void loop()
{
  rotary_enc();

  if (frq != frq_old)
  {
    Serial.println(frq);

    tuner.setFreq(frq);

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("    FM RADIO");
    lcd.setCursor(0, 1);
    lcd.print(" FRQ: ");
    frq_disp = frq;
    lcd.print((frq_disp / 1000) - 22.6, 1); ////коррекция 22.6 MHz
    lcd.print(" MHz");
  }
  frq_old = frq;
}

//-------------------------------------------
void rotary_enc()
{
  currentTime = millis();
  if (currentTime >= (loopTime + 5)) {
    encoder_A = digitalRead(pin_A);
    encoder_B = digitalRead(pin_B);
    if ((!encoder_A) && (encoder_A_prev)) {
      if (encoder_B) {
        frq = frq + 100;
        if (frq > 130600) {
          frq = 87600;
        }
      }
      else {
        frq = frq - 100;
        if (frq < 87600) {
          frq = 130600;
        }
      }
    }
    encoder_A_prev = encoder_A;
    loopTime = currentTime;
  }
}
Без тюнера прогнал,есть ответ в порт,добавил чтоб в Serial частоту выводило настройки станции.Сейчас прицепляю тюнер

Оффлайн irobot 23 Октября 2016, 17:48:40 (#21)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
А софтово получается тюнер висит на 11,13 цифровом пине?

Оффлайн Koshak 23 Октября 2016, 18:02:27 (#22)

  • Отпусти меня чудо халфа
  • КотЭ
  • Ветеран
  • *
  • Сообщений: 2758
  • Карма: +270/-16
    • Просмотр профиля
    • Infotex Мир Хобби
Ну свой я вешал на D5 и D6
А так для информации https://www.arduino.cc/en/Reference/PortManipulation
У кошки четыре ноги: вход, выход, земля и питание

Оффлайн irobot 23 Октября 2016, 19:35:56 (#23)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
Вот выдает мне в порт при замыкании контакта 3 на землю.Скетч Ваш,но переделанный немного мной.Тюнер по i2c висит на а4,а5

Оффлайн irobot 23 Октября 2016, 19:38:02 (#24)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "FM1216.h"

LiquidCrystal_I2C lcd(0x27,16,2);

FM1216 tuner;

unsigned long currentTime;
unsigned long loopTime;
const int pin_A = 3;  // pin 3
const int pin_B = 2;  // pin 2
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev = 0;
unsigned long frq = 129900;
unsigned long frq_old;
float frq_disp;

//-------------------------------------------
void setup()
{
  pinMode(pin_A, INPUT_PULLUP);
  pinMode(pin_B, INPUT_PULLUP);
  currentTime = millis();
  loopTime = currentTime;

  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея
  lcd.setCursor(0, 0);
  tuner.init();
  tuner.setFreq(frq);
  Serial.begin(9600);
  Serial.println("Start");

  lcd.setCursor(0, 0);
  lcd.print("  FM1256/I H-3   ");
  Serial.println("  FM1256/I H-3   ");
  lcd.setCursor(0, 1);
  lcd.print("     TUNER  ");
 Serial.print("     TUNER  ");
  delay(3000);
  tuner.setStereo(true); // FM Стерео xDD
}

//-------------------------------------------
void loop()
{
  rotary_enc();

  if (frq != frq_old)
  {
    Serial.println(frq);

    tuner.setFreq(frq);

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("    FM RADIO");
    Serial.println("    FM RADIO");
    lcd.setCursor(0, 1);
    lcd.print(" FRQ: ");
     Serial.print(" FRQ: ");
    frq_disp = frq;
    lcd.print((frq_disp / 1000) - 22.6, 1); ////коррекция 22.6 MHz
    lcd.print(" MHz");
    Serial.print((frq_disp / 1000) - 22.6, 1);
    Serial.print("Mhz");
  }
  frq_old = frq;
}

//-------------------------------------------
void rotary_enc()
{
  currentTime = millis();
  if (currentTime >= (loopTime + 5)) {
    encoder_A = digitalRead(pin_A);
    encoder_B = digitalRead(pin_B);
    if ((!encoder_A) && (encoder_A_prev)) {
      if (encoder_B) {
        frq = frq + 100;
        if (frq > 130600) {
          frq = 87600;
        }
      }
      else {
        frq = frq - 100;
        if (frq < 87600) {
          frq = 130600;
        }
      }
    }
    encoder_A_prev = encoder_A;
    loopTime = currentTime;
  }
}

Моя переделка

Оффлайн Koshak 23 Октября 2016, 19:40:00 (#25)

  • Отпусти меня чудо халфа
  • КотЭ
  • Ветеран
  • *
  • Сообщений: 2758
  • Карма: +270/-16
    • Просмотр профиля
    • Infotex Мир Хобби
А дисплей то где висит  :3:
У кошки четыре ноги: вход, выход, земля и питание

Оффлайн irobot 23 Октября 2016, 19:40:40 (#26)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
Судя по даташиту у меня FM1246.Но по подключению опять же похож на тюнер со схемы с первой страницы.

Оффлайн irobot 23 Октября 2016, 19:41:42 (#27)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
А дисплей то где висит  :3:
Дисплей отцепил пока-через терминал смотрю ..

Оффлайн Koshak 23 Октября 2016, 19:45:26 (#28)

  • Отпусти меня чудо халфа
  • КотЭ
  • Ветеран
  • *
  • Сообщений: 2758
  • Карма: +270/-16
    • Просмотр профиля
    • Infotex Мир Хобби
Ну работает или как?
У кошки четыре ноги: вход, выход, земля и питание

Оффлайн irobot 23 Октября 2016, 19:48:56 (#29)

  • Постоялец
  • ***
  • Сообщений: 22
  • Карма: +1/-0
  • Здесь может быть Ваша подпись
    • Просмотр профиля
Ну работает или как?
В терминале видно как перестраивается частота,а вот по звуку нет..На схеме нарисованно ,что тюнер стандартно подцеплен на железный i2с.Прошиваю  i2с  сканер -он определяет тюнер как 0х60.Почему вот не перестраивает не пойму  /:(