![]() |
I2C на примере TDA7419
Нашел в закромах незаконченный проект. В который раз хочется попробовать вникнуть в суть программирования :blush:
Читаю даташит на 7419 и нихрена не понимаю! Объясните на пальцах - что надо загнать в микробу (последовательность 1 и 0) чтобы, например, установить "мастер" громкость на 50% ??? |
в ветке про дсп для андроида были рабочие опыты, там спроси автора
|
Цитата:
|
Вложений: 1
Это я где-то читал. Нихрена вообще не понимаю!
Откуда взялося 0b ? Дальше 1000100, а потом ведь должен быть еще 0 или 1 - RX или TX Mode ? И эта часть посылки только адрес чипа. А где все остальное!? Когда делали авторадио на LM7001, так там в одной строке (21 бит кажется - не помню) всегда передавались сразу все возможные параметры. Но там их сгулькинхрен было, а тут восемь страниц... Или у микробы память и передается только тот параметр, который нужно изменить? |
Я понимаю так , что ты решил реанимировать свою задумку...
Наверно и это тоже читал? |
Ну насчет реанимировать не знаю... в современных реалиях это наверное не акуально и нерентабельно. Просто интересно пока для себя с этим аудиопроццом поковырятся. Возможности у него не слабые и по качеству, говорят, очень даже ничего....
"Наверно и это тоже читал?" - видел, читал по диагонали, пока не вникал. |
Правда там на PIC-ах реализация... На AVR не попадались. Поинтересуйся у Server164 - он вроде реализовал свой проект на этой микре...
|
Вложений: 1
Вот, к стати документик из проекта на PIC...
|
Ага! Вот вроде начинаю немного вкуривать :)
Значит чтобы, например, выбрать вход SE1 с уровнем 0Дб - я должен послать в чип следующее: 0b10001000 0b00000000 0b10000001 Правильно? Остальные настройки сохраняются в чипе? Т.е. посылается только то, что нужно изменить? Что такое: Testing Mode, Auto Zero Remain, Auto Increment Mode ? Testing Mode - понятно, что тестовый режим. В чем это выражается? |
Блин! А что за "b" ? Как послать "b" ?
|
Ахаха это в си говорит, что значение представлено в двоичном виде...можешь его преобразовать в десятичный и шестнадцатеричный(префикс вроде 0х вместо 0b) через приложение калькулятор
|
Уже допер :) Значит чтобы, например, выбрать вход SE1 с уровнем 0Дб - я должен послать в чип следующее (двоичный код):
<старт> 10001000 00000000 10000001 <стоп> Ну разумеется без пробелов. Старт-стоп посылки - изучаю... Правильно? Остальные настройки сохраняются в чипе? Т.е. посылается только то, что нужно изменить? Что такое: Testing Mode, Auto Zero Remain, Auto Increment Mode ? Testing Mode - понятно, что тестовый режим. В чем это выражается? |
awtoap! Ты не смейся, ты научи! Ты ж эту микробу имел, да с приправой :) :)
|
Спрашивай что нужно, но я то на паскале програмлю, а не на си.
|
Щас пока о программировании речь не идет. Пока пытаюсь понять как управляется чип - что в него засылать для получения какого-либо результата. Так же лениво и не спеша разрабатываю максимально универсальную отладочную плату для него.
Повторю вопросы, интересующие в данный момент: 1. Чтобы, например, выбрать вход SE1 с уровнем 0Дб - я должен послать в чип следующее (двоичный код): <старт> 10001000 00000000 10000001 <стоп> Ну разумеется без пробелов. Старт-стоп посылки - изучаю... Правильно? 2. Остальные настройки сохраняются в чипе? Т.е. посылается только то, что нужно изменить? 3.Что такое: Testing Mode, Auto Zero Remain, Auto Increment Mode ? Testing Mode - понятно, что тестовый режим. В чем это выражается? |
Вот такую инициализацию 7419 делаю при включении
void data_init_default(void) { // SndAmp SND_AMP_CONFIG[Main_source_selector].subadress = 0x00; //0b00000000; SND_AMP_CONFIG[Main_source_selector].data = 0x83; //0b10000110; // Source: QD/SE: SE3 + GAIN 0 dB + AutoZero OFF SND_AMP_CONFIG[Main_loudness].subadress = 0x01; //0b00000001; SND_AMP_CONFIG[Main_loudness].data = 0xC0; //0b11000000; // Soft-step = OFF + High boost = OFF + Center frequency = Flat + 0 db SND_AMP_CONFIG[Soft_mute_clock_generator].subadress = 0x02; //0b00000010; SND_AMP_CONFIG[Soft_mute_clock_generator].data = 0xFD; //0b11111101; // Soft-mute OFF + Pin and IIC + Clock fast mode = off SND_AMP_CONFIG[Volume].subadress = 0x03; //0b00000011; SND_AMP_CONFIG[Volume].data = 0xA2; //0b10100010; // -18 dB + Soft-step = OFF SND_AMP_CONFIG[Treble].subadress = 0x04; //0b00000100; SND_AMP_CONFIG[Treble].data = 0x80; //0b10000000; // Internal Vref + 0 db SND_AMP_CONFIG[Middle].subadress = 0x05; //0b00000101; SND_AMP_CONFIG[Middle].data = 0x00; //0b00000000; // 0 db SND_AMP_CONFIG[Bass].subadress = 0x06; //0b00000110; SND_AMP_CONFIG[Bass].data = 0x00; //0b00000000; // 0 db SND_AMP_CONFIG[Second_source_selector].subadress = 0x07; //0b00000111; SND_AMP_CONFIG[Second_source_selector].data = 0x07; //0b00000111; // Rear Speaker Source = main source + 0 db + Source selector = mute SND_AMP_CONFIG[Subwoofer_middle_bass].subadress = 0x08; //0b00001000; SND_AMP_CONFIG[Subwoofer_middle_bass].data = 0xFF; //0b11111111; // off SND_AMP_CONFIG[Mixing_gain_effect].subadress = 0x09; //0b00001001; SND_AMP_CONFIG[Mixing_gain_effect].data = 0xF7; //0b11110111; // off + Subwoofer = ON SND_AMP_CONFIG[Speaker_attenuator_left_front].subadress = 0x0A; //0b00001010; SND_AMP_CONFIG[Speaker_attenuator_left_front].data = 0x80; //0b10000000; // gain 0 dB + Soft-step = OFF SND_AMP_CONFIG[Speaker_attenuator_right_front].subadress = 0x0B; //0b00001011; SND_AMP_CONFIG[Speaker_attenuator_right_front].data = 0x80; //0b10000000; // gain 0 dB + Soft-step = OFF SND_AMP_CONFIG[Speaker_attenuator_left_rear].subadress = 0x0C; //0b00001100; SND_AMP_CONFIG[Speaker_attenuator_left_rear].data = 0x80; //0b10000000; // gain 0 dB + Soft-step = OFF SND_AMP_CONFIG[Speaker_attenuator_right_rear].subadress = 0x0D; //0b00001101; SND_AMP_CONFIG[Speaker_attenuator_right_rear].data = 0x80; //0b10000000; // gain 0 dB + Soft-step = OFF SND_AMP_CONFIG[Mixing_level_control].subadress = 0x0E; //0b00001110; SND_AMP_CONFIG[Mixing_level_control].data = 0x80; //0b10000000; // gain 0 dB + Soft-step = OFF SND_AMP_CONFIG[Subwoofer_attenuator].subadress = 0x0F; //0b00001111; SND_AMP_CONFIG[Subwoofer_attenuator].data = 0x80; //0b10000000; // gain 0 dB + Soft-step = OFF SND_AMP_CONFIG[Spectrum_analyzer_clock_source_AC_mode].subadress = 0x10; //0b00010000; SND_AMP_CONFIG[Spectrum_analyzer_clock_source_AC_mode].data = 0x5F; //0b01011111; // AC coupling after In gain + Clock source = internal SND_AMP_CONFIG[Testing_audio_processor].subadress = 0x11; //0b00010001; SND_AMP_CONFIG[Testing_audio_processor].data = 0x00; //0b00000000; // testing mode OFF Write_config(); } |
AutoZero непонятно, AutoIncrement после записи в какой-то регистр внутренний счетчик перемещается на следующий регистр...короче можно заполнить все регистры за одну передачу без явного указания номера регистра. Проще говоря записываешь в 0 регистр(субадрес) при этом взводишь в субадресе 5 бит (итого это будет не 0 регистр, а 16) и записываешь данные, после записи внутри счетчик уже указывает на следующий регистр (первый) и опять шлешь данные и так далее сколько есть регистров в микре. Выглядит так: старт--адрес чипа--16--данные--данные(сколько регистров)--стоп
Обычная запись: старт--адрес чипа--субадрес--данные--стоп. Для того что-бы запело...выставляешь вход, выставляешь громкость, снимаешь режим муте. |
Часовой пояс GMT +4, время: 21:13. |
Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot