Заголовок сообщения: Управление микросхемой M62446AFP
Добавлено: Чт авг 07, 2014 20:30:43
Родился
Зарегистрирован: Пн май 02, 2011 12:23:25 Сообщений: 15
Рейтинг сообщения:0
Здравствуйте! Есть сабвуфер Sven HT-485, но нет к нему ПДУ, что делает его полностью бревном. (да, купить пульт проще... но не интересно и затратно ) Так то он работает, но было решено срезать часть мозгов (можно сказать основных) это микроконтроллер, который управляет кодеком и 6-ти канальным регулятором громкости/баса/тембра, и собственно сам кодек! Но суть вопроса не в этом. Имеется Arduino Mega2560, микросхема M62446AFP (выводы управления имеют названия CLK, DATA, LATCH), а так же даташит к микросхеме.
Помогите разобраться, что означают буквы с цифрами D01,D11,D21,D31 и т.д. (стр. 8-12) если возможно, напишите кусок кода с примером установки значения, например для установки басса +0dB
П.С. как я понимаю данные передаются по интерфейсу i2c...
П.С. как я понимаю данные передаются по интерфейсу i2c..
по спи
Explorer200 писал(а):
что означают буквы с цифрами D01,D11,D21,D31 и т.д.
там же написано на 8й странице д0... отвечают за уровень высоких частот
Explorer200 писал(а):
напишите кусок кода с примером установки значения, например для установки басса +0dB
лень писать код, это очень большие мозговые затраты алгоритм такой:
мелкасхема управляется одной посылкой 16 бит, т.е. тебе нужна рабочая переменная типа инт есть 4 вида посылок и отличаются они ключом из пары первых 2х бит де и дф
возьмем самый простой пример регулировки громкости стереовхода (диаграмма 2, стр 7) тебе нужна маска из первых 2х бит, которая будет определять режим #define VOLUME_RL 1
так же тебе нужны 2 переменные volume_l volume_r в них загоняеш значение от 0 до 80, что будет соответствовать регулировке громкости от 0 до -80дб, что должно хватать все просто
потом делаеш магию data = data | (volume_l<<8) data = data | (volume_r<<2) data = data | VOLUME_RL
так формируеш переменну и посылаеш ее в регистр аппаратного спи контроллера и все
то же самое для других режимов, только маски надо задать дефайном, сдвинуть на нужное количество бит и наложить маску по ИЛИ
_________________ тематические ответы только в форуме, в приват не пишите
Заголовок сообщения: Re: Управление микросхемой M62446AFP
Добавлено: Сб авг 09, 2014 11:31:40
Родился
Зарегистрирован: Пн май 02, 2011 12:23:25 Сообщений: 15
Рейтинг сообщения:0
kalobyte писал(а):
Explorer200 писал(а):
П.С. как я понимаю данные передаются по интерфейсу i2c..
по спи
немного не ожиданно, так как SPI использую в основном для внутрисхемного программирования, к тому же имеет 4 вывода, а в моем случае всего 3
kalobyte писал(а):
Explorer200 писал(а):
что означают буквы с цифрами D01,D11,D21,D31 и т.д.
там же написано на 8й странице д0... отвечают за уровень высоких частот
это то я понял, почему то когда увидел эти таблицы, вспомнилось рисование символов для LCD, но на него есть готовая библиотека...
kalobyte писал(а):
Explorer200 писал(а):
напишите кусок кода с примером установки значения, например для установки басса +0dB
лень писать код, это очень большие мозговые затраты алгоритм такой:
мелкасхема управляется одной посылкой 16 бит, т.е. тебе нужна рабочая переменная типа инт есть 4 вида посылок и отличаются они ключом из пары первых 2х бит де и дф
возьмем самый простой пример регулировки громкости стереовхода (диаграмма 2, стр 7) тебе нужна маска из первых 2х бит, которая будет определять режим #define VOLUME_RL 1
так же тебе нужны 2 переменные volume_l volume_r в них загоняеш значение от 0 до 80, что будет соответствовать регулировке громкости от 0 до -80дб, что должно хватать все просто
потом делаеш магию data = data | (volume_l<<8) data = data | (volume_r<<2) data = data | VOLUME_RL
так формируеш переменну и посылаеш ее в регистр аппаратного спи контроллера и все
то же самое для других режимов, только маски надо задать дефайном, сдвинуть на нужное количество бит и наложить маску по ИЛИ
уже становится более понятно, это понятно data = data | (volume_r<<2), пропускаются два правых разряда, которые выбирают режим для настройки. а вот это не понятно data = data | (volume_l<<8) почему на 8 сдвиг, а не на 9, ведь правые два разряда +7 разрядов настройки правого канала = 9 осталось по шарить как работать по SPI
Заголовок сообщения: Re: Управление микросхемой M62446AFP
Добавлено: Сб авг 09, 2014 20:12:19
Родился
Зарегистрирован: Пн май 02, 2011 12:23:25 Сообщений: 15
Рейтинг сообщения:0
вот только остается не понятно что делать с портами latch и clk оставить в покое?
Код:
int latchPin = 8; int dataPin = 11; int clockPin = 12; int volume_l = 20; int volume_r = 20; int data;
#define VOLUME_RL 1 void setup() { //set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); }
void loop() {
data = data | (volume_l<<8); data = data | (volume_r<<2); data = data | VOLUME_RL; digitalWrite(dataPin, data); }
что то на калякал, надо будет проверить, а пока так компилировалось пока что в статичном варианте, дабы мозг сильно не насиловать
Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.
так как SPI использую в основном для внутрисхемного программирования
спи используется для синхронной последовательной передачи в 2 направления на много устройств и2ц может передавать только на 127 и только в одном направлении
протоколы не привязаны ни к чему
Explorer200 писал(а):
а в моем случае всего 3
сигнал выборки устройства се, данные и тактовый 4й данные в обратную сторону, но в твоем случае мс не передает ничего
Explorer200 писал(а):
почему на 8 сдвиг, а не на 9,
может и 9, сейчас не помню и вполне мог протупить я ж говорю, что надо писать код на живом примере
Explorer200 писал(а):
осталось по шарить как работать по SPI
на сцайте быдлодуиды же есть мануал и там точно есть железный спи если хочеш софтовый, то у меня на сцайте смотри посты про регистры, там готовый код
алгоритм такой выставить сигнал разрешения в 1 или 0 по даташиту выставить 1 или 0 на выводе данных
дернуть клок 1 раз сдвинуть на 1 бит ту переменную, что хранит 16 бит данных для посылки в мс
и так 16 раз в цикле подробности у меня на сцайте расписаны проще некуда
_________________ тематические ответы только в форуме, в приват не пишите
//Пин подключен к ST_CP входу 74HC595 int latchPin = 8; //Пин подключен к SH_CP входу 74HC595 int clockPin = 12; //Пин подключен к DS входу 74HC595 int dataPin = 11;
int volume_l = 20; int volume_r = 20; int nastr=1; int data; int govno; int rez; void setup() { lcd.begin(16, 2); //set pins to output so you can control the shift register pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);
} void loop() {
data = data | (volume_l<<9); data = data | (volume_r<<2); data = data | nastr; govno=data;
for (int i = 0; i < 16; i++) { rez=!!(govno&(1<<i+2)); delay(50); lcd.print(rez); lcd.setCursor(0, 1); lcd.print(i); lcd.setCursor(5, 1); lcd.print(govno); delay(300); lcd.clear(); } }
пока что пытаюсь вывести результат действий цикла на лсд выходит так, data = 10321, с подобранным (методом тыка) сдвигом вылазит это: 0010100001010000 как видно, съедает один последний бит (или больше...). Должно быть : 0010100001010001
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения