TDA7313 / SC7313 и им подобные с управлением i2C

sp34
Offline
Зарегистрирован: 05.03.2013

Есть ли у кого примеры скетчей для этих микросхем ?

Это звуковые процессоры .

Весь инет облазил не нашел !

 

MaksMS
Offline
Зарегистрирован: 11.03.2013

Смотрите даташит,не обязательно искать скетч или библиотеку для ардуины,достаточно найти другие примеры чтения и там уже легко понять как написать скетч для адруины.

sp34
Offline
Зарегистрирован: 05.03.2013


Вот нашел какую то библиотеку она была с расширением ххххх.с и не использовалась в среде ARDUINO . Вижу что она делает програмно еще один порт общения i2C . - он мне не обязателен , сдесь я разберусь . Естественно есть дата-шит , у TDA7313 управление 8 бит ( коды все в таблицах есть ) например 00100100 - это громкость -45Дб . Мне не понятно как их туда отправить ? (поочереди все установки - при включении питания , что бы произвести некий ее SETUP ) или она энерго независима (тогда мне надо считать ее состояния ) в ее энерго независимости я сомневаюсь. 

 

/*****************************************************


Это библиотека для работы с шиной   i2c  и микросхемой  TDA7313.
Линией синхронизации SCL назначен  PORTB.0
Линией передачи данных SDA  назначен  PORTB.1

Настройки данной библиотеки:
В строке 1 надо указать где линия SDA
В строках 2-5 указать соответствующие номера битов и порт
В строках 6-9 в принциае можно ничего не трогать, но если сильно хочется... А порт смотри внимательно!!!!!!!!
В строке 10 указывается в мкс длительность импульсов, т.о. регулирутся скорость обмена данными
Если не трогали строки 6-9, то 12-15 тоже не надо колыхать если конечно не изменится порт

*****************************************************/

#include <DELAY.h>
//#define SDA PORTC.7  		    /*1*/                                                                                  
#define CLR_B6 &=~(1<<6)            /*Очистка бита 0*/      /*2*/                                                                                            
#define CLR_B7 &=~(1<<7)            /*Очистка бита 1*/       /*3*/                                                                                            
#define SET_B6 |=(1<<6)             /*Установка бита 0*/     /*4*/                                                                                              
#define SET_B7 |=(1<<7)             /*Установка бита 1*/      /*5*/                                                                                             
#define SCL_ZERO DDRC SET_B6        /*Установка 0 на SCL путем переключения данной линии на выход*/   /*6*/
#define SCL_ONE DDRC CLR_B6         /*Установка 1 на SCL путем переключения данной линии на вход*/      /*7*/
#define SDA_ZERO DDRC SET_B7        /*Установка 0 на SDA путем переключения данной линии на выход*/   /*8*/
#define SDA_ONE DDRC CLR_B7         /*Установка 1 на SDA путем переключения данной линии на вход*/      /*9*/
#define PAUSE delay_us(15)          /*Необходимая пауза. Для 100 килобит в сек не менее 4,7 мкс*/            /*10*/

void i2_start(void) {       /*Функция инициализации и старта шины i2c*/  
  DDRC CLR_B6;              /*Сделали входом PORTC.6 */    /*12*/
  DDRC CLR_B7;              /*Сделали входом PORTC.7 */    /*13*/
  PORTC CLR_B6;             /*Убрали внутреннюю подтяжку с PORTB.0 на SCL теперь 1 за счет внешней подтяжки*/   /*14*/
  PORTC CLR_B7;             /*Убрали внутреннюю подтяжку с PORTB.1 на SDA теперь 1 за счет внешней подтяжки */ /*15*/
  PAUSE;
  SDA_ZERO;                 /*При единицах на SDA  SCL, делаем 0 на SDA, тем самым стартуем */
  PAUSE;   
  SCL_ZERO;                 /*Даём 0 на SCL, подготовив тем самым интерфейс к передаче байта */
  PAUSE; 
}
                           
void i2_stop (void) {
  SDA_ZERO;
  PAUSE;
  SCL_ONE;
  PAUSE;
  SDA_ONE;
  PAUSE;
} 

unsigned char i2_write (unsigned char bw) {   /*Функция передачи байта по шине*/ 
  unsigned char check=0;
  unsigned char k, m;                          /*Вспомогательные переменные*/
  for (k=0 ; k<8 ; k++) {                      /*Цикл отправки байта по битам, начиная с самого старшего, как в спецификации на шину*/
  m = 1& (bw >> (7-k));                        /*Операция логического И между числом 1 и очередным битом, для выявления его значения*/
  if (m==0) {SDA_ZERO;}                        /*Если очередной бит равен 0 то линию SDA делаем выходом, и т.о. на ней становится 0 ибо в PORTх вписан0 в i2_start  */
  else {SDA_ONE;};                             /*Если очередной бит равен 1 то линию SDA делаем входом, и т.о. на ней становится 1 т.к. есть внешний подтяг. резистор */
  PAUSE;                                       /*Технологическая пауза*/
  SCL_ONE;                                     /*Даем синхроимпульс*/
  PAUSE;                                       /*Ждем пока приемник определит значение бита на SDA пока на SCL единица */
  SCL_ZERO;                                    /*Убираем 1 с линии синхронизации, подготавливая приемник к приему очередного бита*/
  PAUSE;
  };                                           /*для for, чтобы не запутаться*/
   /*Посылка девятого бита подтверждения*/
  SDA_ONE;
  PAUSE;
  SCL_ONE;
  PAUSE;
  if (PINC.7==1) {check=1;}
  else {check=0;}; 
  SCL_ZERO;
  PAUSE;
  return check; 
}


void tda7313_write(unsigned char command) {            /*Функция инициализации и отправки данных на TDA7313*/
  i2_start();                                          /*Даем сигнал старта шины*/
  if(i2_write(0x88)) {goto m7;};                       /*Вводим адрес тдашки  и если она не дала бит подтверждения приема то на метку 1*/
  i2_write(command);                                   /*передаем данные в микруху */
  m7: 
  i2_stop();                                           /*останавливаем обмен по шине*/ 

}

 

sp34
Offline
Зарегистрирован: 05.03.2013



 

sp34
Offline
Зарегистрирован: 05.03.2013

Ой подпортил ветку - сотрите пожалуйста два лишних сообщения !

kolesnikov.anton
Offline
Зарегистрирован: 30.10.2016