Infotex Мир Хобби

Hard&Soft => Радиолюбителю => Arduino UNO => Тема начата: Koshak от 14 Марта 2016, 22:29:14

Название: TV Tuner FM1216ME
Отправлено: Koshak от 14 Марта 2016, 22:29:14
Интересный проект тюнера на базе модуля FM1216ME. Ссыль на библиотеку https://github.com/do9jhb/FM1216duino
Подключение и описание с сайта Клауса DJ7OO http://www.kh-gps.de/fm1216_2.htm

Я проверял с модулем FM1256I H-3 получилось со смещением частоты где-то на 22.6MHz видимо библиотека не совсем корректно работает с данным модулем. А так проект прикольный ардуина и модуль от тюнера получаем практически аналоговый телевизор\приёмник  :D

Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 03 Апреля 2016, 14:36:12
Вот ещё вариант управления http://qsl.net/pa3ckr/bascom%20and%20avr/fi1216/index.html
И ещё http://pandatron.cz/?665&prijimac_z_analogoveho_tv_tuneru_%96_1._dil
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Июля 2016, 14:23:29
Законченный проект приёмника :-)


Дисплей подключен по шине I2C, в параллель с тюнером не захотел работать, пришлось использовать софтовый I2C и вешать тюнер на "цифровые" пины ардуины. Кстати прекрасно декодит DMR  :-) Если интересно скину скетчи и подключение...
   
Название: Re: TV Tuner FM1216ME
Отправлено: Николай З от 24 Июля 2016, 22:21:10
Да , прикольно :) В ближайшее будущее , правда , на это времени нет , но интересно :)
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 09 Октября 2016, 08:53:04
Законченный проект приёмника :-)


Дисплей подключен по шине I2C, в параллель с тюнером не захотел работать, пришлось использовать софтовый I2C и вешать тюнер на "цифровые" пины ардуины. Кстати прекрасно декодит DMR  :-) Если интересно скину скетчи и подключение...
 
Здравствуйте!Можно увидеть подключение и скетч?
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 11 Октября 2016, 07:07:59
Здравствуйте!Можно увидеть подключение и скетч?
В топике всё лежит.
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 11 Октября 2016, 07:51:54
Понял,буду пробовать.Очень интересно. :$
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 11 Октября 2016, 08:13:16
Либу через менеджер установил,при компиляции вылезает `ass_i2c_wait_scl_high' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

`ass_i2c_wait_scl_high' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

`ass_i2c_delay_half' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

`ass_i2c_delay_half' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

`ass_i2c_wait_scl_high' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

`ass_i2c_delay_half' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

`ass_i2c_wait_scl_high' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

`ass_i2c_delay_half' referenced in section `.text' of C:\Users\Home\AppData\Local\Temp\ccAAGyyM.ltrans0.ltrans.o: defined in discarded section `.text' of C:\Users\Home\AppData\Local\Temp\buildc90f5a86fba760cbd5fda2c47dcb0406.tmp\libraries\FM1216duino-master\FM1216.cpp.o (symbol from plugin)

collect2.exe: error: ld returned 1 exit status

IDE 1.6.9
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 11 Октября 2016, 21:23:22
Используй старую IDE 1.0.6
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 13 Октября 2016, 18:22:56
Благодарю,так и подумал придется откатится на старые версии.
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 13 Октября 2016, 19:27:24
Чудеса какие то,согласно схемы соеденил с ардуино нано.SDA ,SCL  выводы 4,5 стандартно,залил скетч ,тишина даже по Serial ничего  /:(
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 14 Октября 2016, 06:47:13
Какая модель тюнера?
Земля в двух точках подключена, на Pin6 и корпусе?
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 14 Октября 2016, 11:36:59
Тюнер с карточки aver media 203 ,земля в двух местах ,тюнер как на картинке в начале топика,сопротивления по 2,2кома.Шум эфира слышно,но перестройки как таковой нет по диапазону
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 14 Октября 2016, 19:26:47
Какой скетч заливал?
Я кстати оригинальный скетч приёмника под себя переделывал, дисплей вешал на I2C, получилось что дисплей висит на аппаратном I2C а тюнер на софтовом, правда пришлось поправить ещё библиотеку.
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 16 Октября 2016, 21:01:33
Какой скетч заливал?
Я кстати оригинальный скетч приёмника под себя переделывал, дисплей вешал на I2C, получилось что дисплей висит на аппаратном I2C а тюнер на софтовом, правда пришлось поправить ещё библиотеку.
Заливал скетч тестовый из библиотеки-пример.Подключение как на рисунке
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 17 Октября 2016, 06:53:06
Для этого тюнера смещение частоты -22.6MHz. Если настроился на 100MHz реально принимаешь 77.4 MHz, это можно скорректировать в скетче.
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 20 Октября 2016, 13:57:43
Для этого тюнера смещение частоты -22.6MHz. Если настроился на 100MHz реально принимаешь 77.4 MHz, это можно скорректировать в скетче.
Может не правильно была промежуточная частота выбрана,судя по цифрам смещение как раз для промежуточной 10,7 мгц
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 21 Октября 2016, 23:02:21
Мне лень разбираться с библиотекой  :-) она написана для FM1216ME а я нацепил FM1256/IH-3 на который я доки так и не нашёл...
У тебя получилось завести приёмник?
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 22 Октября 2016, 08:25:00
Так и не получается,не пойму,почему даже в порт данные не идут  /:(,вот бы библиотеку переправить на свежую версию IDE
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Октября 2016, 12:58:01
Вот мой пример кода.
Дисплей висит на аппаратном 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;
  }
}
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 16:56:40
Вот мой пример кода.
Дисплей висит на аппаратном 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 частоту выводило настройки станции.Сейчас прицепляю тюнер
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 17:48:40
А софтово получается тюнер висит на 11,13 цифровом пине?
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Октября 2016, 18:02:27
Ну свой я вешал на D5 и D6
А так для информации https://www.arduino.cc/en/Reference/PortManipulation
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 19:35:56
Вот выдает мне в порт при замыкании контакта 3 на землю.Скетч Ваш,но переделанный немного мной.Тюнер по i2c висит на а4,а5
(http://s8.hostingkartinok.com/uploads/images/2016/10/1f28f7d6d2472a0ab793ac8763ce6925.jpg) (http://hostingkartinok.com/show-image.php?id=1f28f7d6d2472a0ab793ac8763ce6925)
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 19:38:02
#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;
  }
}

Моя переделка
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Октября 2016, 19:40:00
А дисплей то где висит  :3:
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 19:40:40
Судя по даташиту у меня FM1246.Но по подключению опять же похож на тюнер со схемы с первой страницы.
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 19:41:42
А дисплей то где висит  :3:
Дисплей отцепил пока-через терминал смотрю ..
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Октября 2016, 19:45:26
Ну работает или как?
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 19:48:56
Ну работает или как?
В терминале видно как перестраивается частота,а вот по звуку нет..На схеме нарисованно ,что тюнер стандартно подцеплен на железный i2с.Прошиваю  i2с  сканер -он определяет тюнер как 0х60.Почему вот не перестраивает не пойму  /:(
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Октября 2016, 19:51:49
Там на шине несколько устройств висит))) Попробуй поменяй SDA и SCL
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 19:54:51
Там на шине несколько устройств висит))) Попробуй поменяй SDA и SCL
Но они же на разных адресах.Сейчас просто залил пример из либы.Где через терминал частоту можно вбивать,тоже тишина,а в порт установленная частота приходит(http://s8.hostingkartinok.com/uploads/images/2016/10/b93087959f19f2a00c42eacf9b3b63dc.png) (http://hostingkartinok.com/show-image.php?id=b93087959f19f2a00c42eacf9b3b63dc)
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Октября 2016, 19:56:43
Ща одну железку добью, и заведу достану тюнер :-)
Название: Re: TV Tuner FM1216ME
Отправлено: irobot от 23 Октября 2016, 20:01:06
Ща одну железку добью, и заведу достану тюнер :-)
У меня 2 тюнера есть,еще на подходе один,все разные..Может вытащить из либы команды управления тюнером,чтоб в одном скетче все было?Без либы..
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Октября 2016, 20:41:18
Вспомнил как я делал  :-)
Открываем библиотеку FM1216.h
Находим код:

Цитировать
//Config Soft I2C Library
#define SDA_PORT   PORTD
#define SDA_PIN      5
#define SCL_PORT   PORTD
#define SCL_PIN      6
#define I2C_FASTMODE 1

Тюнер в моём случае висит на D5 (SDA) и D6 (SCL) можно изменить на свои пины согласно этой доке https://www.arduino.cc/en/Reference/PortManipulation
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Июля 2019, 20:50:26
Допилил проект приёмника  :xexe:
Прошивка и P-CAD проект есть.
Название: Re: TV Tuner FM1216ME
Отправлено: Koshak от 23 Декабря 2020, 18:05:54
Исходники прошивки, схема и плата в формате P-CAD, плюс несколько даташитов на тюнеры :94: