TDA7313 / SC7313 и им подобные с управлением i2C
- Войдите на сайт для отправки комментариев
Сб, 18/01/2014 - 00:59
Есть ли у кого примеры скетчей для этих микросхем ?
Это звуковые процессоры .
Весь инет облазил не нашел !
Есть ли у кого примеры скетчей для этих микросхем ?
Это звуковые процессоры .
Весь инет облазил не нашел !
Смотрите даташит,не обязательно искать скетч или библиотеку для ардуины,достаточно найти другие примеры чтения и там уже легко понять как написать скетч для адруины.
/***************************************************** Это библиотека для работы с шиной 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(); /*останавливаем обмен по шине*/ }Ой подпортил ветку - сотрите пожалуйста два лишних сообщения !
Вот, библиотека для TDA7313