• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Нужна помощь в написании i2c кода

Foofys18

Новые
Регистрация
28 Июн 2017
Сообщения
30
Реакции
0
Баллы
0
Нужна помощь в написании i2c кода

Имеется усилитель TDA7563B , но включается он по шине I2C. Я писал код но он не работает .
Прошу понимающих людей написать мне код 👏
Прикрепляю Datashet и схему .
Написанный мной не рабочий код добавлю в следующем сообщений .
Заранее спасибо !
 

Вложения

  • datasheet (1).pdf
    datasheet (1).pdf
    508.2 KB · Просмотры: 219
  • TDA7563A-circuits.webp
    TDA7563A-circuits.webp
    14.6 KB · Просмотры: 100
Вот мой код :
Код:
#include <Wire.h>

void setup()
{
  Wire.begin(); // join i2c bus
}

void loop()
{
  Wire.beginTransmission(B11011000); // transmit to device #108 (the TDA7563's write address)
  Wire.write(B00000110);             // sends IB1 byte as in example 3a
  Wire.write(B00010011);             // sends IB2 byte as in example 3a
  Wire.endTransmission();            // stop transmitting

  delay(5000);
}
 
Для начала надо как то подключится к этой шине?
 
Вот мой код :

Wire.write(B00000000); // sends IB1 byte as in example 3a

[/CODE]

Попробуйте заменить на эту строчку. На форуме ардуино есть такая же тема, можете там почитать. Ну если не поможет, то покажите фотографию того что у Вас собрано, может припаяли плохо, или еще что.
 
Сразу признаюсь языков программирования я не знаю.
Код в том виде который вижу работать не будет.
Считаю чтобы послать данные в шину нужна по крайней мере хотя бы одна кнопка.
И еще чтобы данные прошли, я конечно Datashet до конца не понял,
должно выполнятся какое то условие
относительно линии clk.
 
Сразу признаюсь языков программирования я не знаю.
Код в том виде который вижу работать не будет.
Считаю чтобы послать данные в шину нужна по крайней мере хотя бы одна кнопка.
И еще чтобы данные прошли, я конечно Datashet до конца не понял,
должно выполнятся какое то условие
относительно линии clk.

Я как понял CLK и DATA вместе образуют i2c .
Ну если бы была кнопка было бы хорошо, но с кнопкой сделать для меня вообще не реально .
 
Фото подключения . Собрал пока на весу .
 

Вложения

  • IMG_20170823_235148_1.webp
    IMG_20170823_235148_1.webp
    83.8 KB · Просмотры: 74
  • IMG_20170823_235636.webp
    IMG_20170823_235636.webp
    63.4 KB · Просмотры: 72
Попробуйте заменить на эту строчку. На форуме ардуино есть такая же тема, можете там почитать. Ну если не поможет, то покажите фотографию того что у Вас собрано, может припаяли плохо, или еще что.

Не помогло (
 
Для начала надо как то подключится к этой шине?
Думаю что сначала надо устройству сообщить адрес шины i2c
и начал я бы примерно так
Код:
#define I2CSLAVE_ADDR       0x??
??-необходимо указать адрес.
 
И никто не поправит .
У автора темы есть подключение к шине i2c/
А если попробовать так.
Код:
#include <Wire.h>

byte val = ?;Сюда пишем то что хотим послать

void setup()
{
   Wire.begin(); // подключение к шине i2c
}

void loop()
{
   Wire.beginTransmission(B11011000); // transmit to device #108 (the TDA7563's write address)
                               // адрес устройства указывается в документации (datasheet)
   Wire.write(val);             // отправка байта val
   Wire.endTransmission();     // передача данных

   
   {
     val = ?;    // Сюда пишем то что хотим послать
   }
   delay(500);
}
 
Думаю что сначала надо устройству сообщить адрес шины i2c
и начал я бы примерно так
Код:
#define I2CSLAVE_ADDR       0x??
??-необходимо указать адрес.

Не могу посчитать адрес .
Дела как сказано тут PCCar.ru - Ваш автомобильный компьютер - Показать сообщение отдельно - регулировка звука аудиопроцессором TDA7442 + ардуино
Пишу 1101100 , нажимаю HEX и вижу 6С.
 
И никто не поправит .
У автора темы есть подключение к шине i2c/
А если попробовать так.
Код:
#include <Wire.h>

byte val = ?;Сюда пишем то что хотим послать

void setup()
{
   Wire.begin(); // подключение к шине i2c
}

void loop()
{
   Wire.beginTransmission(B11011000); // transmit to device #108 (the TDA7563's write address)
                               // адрес устройства указывается в документации (datasheet)
   Wire.write(val);             // отправка байта val
   Wire.endTransmission();     // передача данных

   
   {
     val = ?;    // Сюда пишем то что хотим послать
   }
   delay(500);
}

HTML:
//Для запуска tda7563B достаточно загрузить скетчь который ниже в ардуино 
#include "Wire.h"  
  
void setup()  
{  
Wire.begin();  
delay(1000);  
Serial.begin(9600);  
  
}  
void loop(){  
  
//delay(2000);  


tda7563B(0, 0b01100110);  
tda7563B(1, 0b00011011);  
  
}  
  
void tda7563B (int subaddress, int data)  //Вызов tda7719 char?? 
{  
Wire.beginTransmission(0b1101100); //СТАРТ и Адрес микросхема 7563B 
//после beginTransmission дуина ждёт по линии ДАТА ответа от tda7563B ( присаживание линии на землю)и потом передает 
Wire.write(subaddress);       //Подадрес команды  
Wire.write(data);             //Команда  
Serial.println(subaddress);   //Пишем подадрем в монитор  
Serial.println(data);         //Пишем команду в монитор  
Wire.endTransmission();       //СТОП  
//delay(500);  
}
Вот ещё код, но на нём я не могу правильно написать команды из таблиц в даташите...
 
Фото подключения . Собрал пока на весу .
Качество фото конечно плохое. У Вас вторая ножка (если считать слева) подключена на землю что-ли? По даташиту там питание идет.
 
Качество фото конечно плохое. У Вас вторая ножка (если считать слева) подключена на землю что-ли? По даташиту там питание идет.

Сложно было сфотографировать мелкие детали , фокуса не было (делал фото из далека ).
На какие ножки вообще подаётся питание ?
 
Я так понял
В даташите на 23 странице указан адрес 0b1101100х
D0=х то есть не указан
если он = 0, отправляет 2 «байты инструкций»: IB1 и IB2
если он =1, отправляет 4 байта диагностики» в μP: DB1, DB2, DB3 и DB4.
 
Я так понял
В даташите на 23 странице указан адрес 0b1101100х
D0=х то есть не указан
если он = 0, отправляет 2 «байты инструкций»: IB1 и IB2
если он =1, отправляет 4 байта диагностики» в μP: DB1, DB2, DB3 и DB4.

Точно . Спасибо . Сейчас попробую написать код .
 
Цитата:
Сообщение от DRK
Я так понял
В даташите на 23 странице указан адрес 0b1101100х
D0=х то есть не указан
если он = 0, отправляет 2 «байты инструкций»: IB1 и IB2
если он =1, отправляет 4 байта диагностики» в μP: DB1, DB2, DB3 и DB4.
Точно . Спасибо . Сейчас попробую написать код .

У Вас диагностика не пройдет скорее всего, так как подключен один динамик, а остальные выходы для динамиков висят в воздухе.
 
Качество фото конечно плохое. У Вас вторая ножка (если считать слева) подключена на землю что-ли? По даташиту там питание идет.

На какие ножки вообще подаётся питание ?
 
Назад
Сверху