Управление TDA8822 через ардуино

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем blackcatw, 12 янв 2017.

Метки:
  1. blackcatw

    blackcatw Нерд

    Добрый день. Может кто-то помочь разобраться с даташитом на TDA8822?
    Из даташита понятно, что управление происходит по 15 (SDA) и 14 (SCL) контакту по интерфейсу (I 2 C-bus)
    Как можно из Arduino управлять TDA8822? Я так понимаю, что в Arduino тоже есть интерфейс (I 2 C-bus)? И через него можно как-то управляющие биты передавать.
    В даташите есть перечень этих битов в табице. Вопрос собственно как передавать эти параметры?


    PS: Прошу ногами сильно не пинать... Хочется разобраться...

    Интерфейсный формат шины I2C. В таблице 2

    У Arduino я так понимаю это A4 - SDA A5 - SCL
     
    Последнее редактирование: 12 янв 2017
  2. rkit

    rkit Гуру

    Вы в состоянии прочитать даташит, но не справились набрать в гугле "arduino i2c"? Странно.
     
  3. blackcatw

    blackcatw Нерд

    Набрал.
    Вот пример:
    Код (C++):
    #include <Wire.h> // подключаем библиотеку "Wire"

    void setup() {
      Wire.begin();   // подключаемся к шине I2C как мастер
    }

    byte val = 0; // значение для передачи потенциометру

    void loop() {
      Wire.beginTransmission(44); // начало передачи устройству с адресом "44" (0x2c)
      Wire.write(byte(0x00));     // посылаем байт инструкции
      Wire.write(val);            // посылаем потенциометру значение
      Wire.endTransmission();     // конец передачи

      val++;           // инкрементируем val на 1
      if (val == 64) { // по достижении максимума потенциометра
        val = 0;       // сбрасываем val до нуля
      }
      delay(500);
    }
    Вопрос не в этом. Как узнать адрес TDA8822?
    Как правильно определить байт инструкции и послать соответствующее (правильное) значение. С учётом описания в даташите?

    Вот в таблице описание:
    Таблица2
    ----------------------------------------------------------------------------------------------------------------------------
    БАЙТЫ++++++++++++++!+БИТ7+!+БИТ6+!+БИТ5+!+БИТ4+!+БИТ3+!+БИТ2+!+БИТ1+!+БИТ0+!
    Адресный байт CA_____!___1___!__1____!__0____!___0__!___1___!__0___!___1___!___0__! ACK
    F1: частотный байт 1___!___0___!TPSG__!__N13__!__N12_!_N11__!__N10_!__N9___!__N8__! ACK
    F0: частотный байт 0___!__N7___!__N6__!__N5___!___N4_!__N3__!__N2__!___N1__!__N0__! ACK
    C1: контрольный байт 1_!__1____!_DEV2_!_DEV1_!_DEV0_!_PS2__!_PS1__!_PS0__!__0___! ACK
    C1: контрольный байт 0_!__M2___!_MD1__!_MD0__!_SC1__!_SC0__!_RF0_!_P0____!__T0___!ACK
    --------------------------------------------------------------------------------------------------------------------------------

    А в даташите есть такой пример:
    Example of programming
    We want to program the TDA8822 in a UHF application, on channel 21 (picture carrier at 471.25 MHz) in a B/G standard (sound carrier at 5.5 MHz from the picture carrier) with a Picture-to-Sound ratio of −12 dB, a modulation depth of 82.5% and a deviation set to 50.5% in normal mode, without TPSG, output port on.
    These are the values of the bits that must be programmed:
    • The video dividing ratio will be N = f osc/ f ref × 8 = 471 250 000 / 7 812.5 × 8 = 7540 = 01110101110100
    • TPSG bit will be set to logic 0
    • DEV2 will be set to logic 0, DEV1 to logic 1 and DEV0 to logic 0
    • PS2 will be set to logic 0, PS1 to logic 0 and PS0 to logic 1
    • MD2 will be set to logic 1, MD1 to logic 0 and MD0 to logic 0
    • SC1 will be set to logic 0 and SC0 to logic 1
    • P0 will be set to logic 1
    • RF0 will be set to logic 1
    • T0 will be set to logic 0.


    И если я ещё понимаю что такое 471 250 000 , то что означает 7 812.5 × 8 я не понимаю. И как всё остальное кодировать перед посылкой я тоже не могу сообразить...
     
    Последнее редактирование: 12 янв 2017
  4. rkit

    rkit Гуру

    Как в таблице написано, так и отправляйте.
    The transmission is made using 4 words in I2C-bus format.
    First the address CA has to be sent, then at least two
    consecutive words have to be sent, either the two words
    F1 and F0, or the two words C1 and C0.
    The two words C1 and F1 are differentiated inside the IC
    by the first bit being logic 1 or logic 0 respectively.
    The contents of the 4 bytes is shown in Table 5.

    f osc и f ref × 8, прочитайте хоть формулу.
     
  5. blackcatw

    blackcatw Нерд

    Ну что делать. Не совсем до меня доходит. Объясните если специалист.

    Код (C++):
    void loop()
    {
       Wire.beginTransmission(??); // передача для устройства адрес устройства указывается в документации
    //  я правильно понимаю, в даташите адресный байт указан как 11001010 ?
    // Как его правильно указать в Wire.beginTransmission(??);
       Wire.write(val);             // отправка байта val - вот здесь у меня тоже пока не понятно как составлять... :-(
       Wire.endTransmission();     // передача данных
     
    Я не супер гений, потому и прошу всё объяснить...
     
  6. rkit

    rkit Гуру

    Код (C++):
    Wire.beginTransmission(первая строка из таблицы);
    Wire.write(вторая строка из таблицы);
    Wire.write(третья строка из таблицы);
    ...
    Wire.endTransmission();
     
  7. blackcatw

    blackcatw Нерд

    А число можно в бинарном виде писать или нужно в десятичное переводить?
     
  8. rkit

    rkit Гуру

    Как хотите, так и пишите. Приставки 0b 0x . Почему никто не хочет учиться последовательно? Ну изучите вы язык программирования, а потом уже беритесь за сложные вещи.
     
  9. blackcatw

    blackcatw Нерд

    Если не за что не браться, то вряд ли можно чему-то научиться.
    Если что-то заинтересовало, оно даёт стимул для познания чего-то сложного.