Программа для управления селектором Selteka KS-H-14XX
- Войдите на сайт для отправки комментариев
Ср, 12/10/2016 - 08:17
Пробую свои силы в написании программы для упарвление селектором тв тюнера KS-H-14X.Написал програмку по вводу частоты напрямую.Селектор управляется по i2c.Но при прогоне в ПРОТЕУСЕ-дебаггер показывает ,что в тюнер не отправляются еоманды,функция setFrequencу не выполняется вообще.Подскажите где я на грабли встал?
#define TUNER_adr 0x60 //Адрес i2c тюнера write mode #define TUNER_gain_on 0x89 //Вкл режима усиления сигнала, шаг 50кгц #define TUNER_gain_off 0x88 //Выкл режима усиления сигнала (нормальный режим) шаг 50кгц #define TUNER_LB 0x01 //Первый диапозон тюнера #define TUNER_MB 0x02 //Второй диапозон тюнера #define TUNER_HB 0x0C //Третий диапозон тюнера #define HiBYTE(w) (uint8_t)((w >> 8) & 0x00ff) #define LoBYTE(w) (uint8_t)((w >> 0) & 0x00ff) #define RCV_MAX 855000 //Максимальная принимаемая частота #define RCV_MIN 40000 //Минимальная принимаемая частота volatile uint8_t TunerGain = 0; //Переменная включения усиления volatile uint32_t FrcvWork =107.900; //Настраиваемая частота приема #include <Wire.h> // I2C-Library для управления радиомодулем RDA5807 // SDA приемника RDA5807 подключаем к аналоговому входу 4 // SCL приемника RDA5807 подключаем к аналоговому входу 5 // Стартовая частота настройки приемника RDA5807. (Можно изменить на нужную). void setup() { Wire.begin(); // Инициализация двухпроводной шины I2C. setFrequency(); // Присваиваем значение частоты радиомодулю RDA5807 pinMode(3, INPUT); // вход для подключения кнопки "Частота вниз" pinMode(4, INPUT);// вход для подключения кнопки "Частота вверх" Serial.begin(9600); } void loop() { float FrcvWork=(FrcvWork*1000); // производим вычисления для отображения установленной частоты на дисплее int fin2=FrcvWork/100; // производим вычисления для отображения установленной частоты на дисплее Serial.print("frequency "); Serial.println(fin2); // проверяем нажатие кнопки "Частота вниз" if (digitalRead(6) == HIGH){ // если кнопка "Частота вниз" нажата FrcvWork=FrcvWork-0.1; // уменьшаем значение частоты на 0,1 МГц setFrequency(); // передаем новое значение частоты радиомодулю }; // проверяем нажатие кнопки "Частота вверх" if (digitalRead(7) == HIGH){ // если кнопка "Частота вверх" нажата FrcvWork=FrcvWork+0.1;// увеличиваем значение частоты на 0,1 МГц setFrequency();// передаем новое значение частоты радиомодулю }; delay(500); // задержка 0,5 сек. } void setFrequency() // Функция загрузки частоты настройки в модуль RDA5807. { uint32_t fPCH1; uint8_t Band; Band = TUNER_LB; if(FrcvWork > 155000L) Band = TUNER_MB; if(FrcvWork > 440000L) Band = TUNER_HB; fPCH1 = (uint16_t)((FrcvWork + 38900)/50); Wire.beginTransmission(TUNER_adr); // Адрес чипа Serial.println(TUNER_adr); Wire.write(HiBYTE(fPCH1)); Serial.println(HiBYTE(fPCH1));// Старший байт. Wire.write(LoBYTE(fPCH1)); Serial.println(LoBYTE(fPCH1));// Младший байт. Wire.write((TunerGain)? TUNER_gain_on:TUNER_gain_on); // усиление Serial.println( (TunerGain)? TUNER_gain_on:TUNER_gain_on); Wire.write(Band); // Диапазон Serial.println(Band); Wire.endTransmission(); // формируем I2C-Stop. }
Вот скрин с пртеуса
Прошло 5 лет и нифига. Че то не правильно работает начальная установка частоты см float
После строки 13 я бы абсолютно ничего хорошего от этого кода не ждал бы. Да и строка 35 после строки 13 тоже хороша :)
Похоже человек, который писал код, вообще ничего не понимал ни в типах переменных языка си, ни вообще в программировании...
И как это все исправить? Я тоже не шарю. Но у меня есть KS H и Ардуино нано, ошибок нет, но начальная частота отображается не правильно
Тут "исправлять" 80% кода нужно. И ещё столько же дописать.
Исправил работает с энкодером
Только все фигня как я понимаю, это работает и без KS-H 148, хотя когда спрашиваешь у него адрес по I2C отвечает правильно. Все остальное это скетч?
Исправил работает с энкодером
А правила форума за 9 лет так и не прочитали.... Тенденция, однако!