Управление микросхемой M62446AFP
- Explorer200
- Родился
- Сообщения: 15
- Зарегистрирован: Пн май 02, 2011 12:23:25
Управление микросхемой M62446AFP
Здравствуйте!
Есть сабвуфер Sven HT-485, но нет к нему ПДУ, что делает его полностью бревном. (да, купить пульт проще... но не интересно и затратно )
Так то он работает, но было решено срезать часть мозгов (можно сказать основных) это микроконтроллер, который управляет кодеком и 6-ти канальным регулятором громкости/баса/тембра, и собственно сам кодек! Но суть вопроса не в этом.
Имеется Arduino Mega2560, микросхема M62446AFP (выводы управления имеют названия CLK, DATA, LATCH), а так же даташит к микросхеме.
Помогите разобраться, что означают буквы с цифрами D01,D11,D21,D31 и т.д. (стр. 8-12)
если возможно, напишите кусок кода с примером установки значения, например для установки басса +0dB
П.С. как я понимаю данные передаются по интерфейсу i2c...
Есть сабвуфер Sven HT-485, но нет к нему ПДУ, что делает его полностью бревном. (да, купить пульт проще... но не интересно и затратно )
Так то он работает, но было решено срезать часть мозгов (можно сказать основных) это микроконтроллер, который управляет кодеком и 6-ти канальным регулятором громкости/баса/тембра, и собственно сам кодек! Но суть вопроса не в этом.
Имеется Arduino Mega2560, микросхема M62446AFP (выводы управления имеют названия CLK, DATA, LATCH), а так же даташит к микросхеме.
Помогите разобраться, что означают буквы с цифрами D01,D11,D21,D31 и т.д. (стр. 8-12)
если возможно, напишите кусок кода с примером установки значения, например для установки басса +0dB
П.С. как я понимаю данные передаются по интерфейсу i2c...
- Вложения
-
- datasheet.pdf
- (5.02 МБ) 830 скачиваний
- Реклама
Re: Управление микросхемой M62446AFP
по спиExplorer200 писал(а):П.С. как я понимаю данные передаются по интерфейсу i2c..
там же написано на 8й страницеExplorer200 писал(а):что означают буквы с цифрами D01,D11,D21,D31 и т.д.
д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
так формируеш переменну и посылаеш ее в регистр аппаратного спи контроллера и все
то же самое для других режимов, только маски надо задать дефайном, сдвинуть на нужное количество бит и наложить маску по ИЛИ
тематические ответы только в форуме, в приват не пишите
- Explorer200
- Родился
- Сообщения: 15
- Зарегистрирован: Пн май 02, 2011 12:23:25
Re: Управление микросхемой M62446AFP
немного не ожиданно, так как SPI использую в основном для внутрисхемного программирования, к тому же имеет 4 вывода, а в моем случае всего 3kalobyte писал(а):по спиExplorer200 писал(а):П.С. как я понимаю данные передаются по интерфейсу i2c..
это то я понял, почему то когда увидел эти таблицы, вспомнилось рисование символов для LCD, но на него есть готовая библиотека...kalobyte писал(а):там же написано на 8й страницеExplorer200 писал(а):что означают буквы с цифрами D01,D11,D21,D31 и т.д.
д0... отвечают за уровень высоких частот
уже становится более понятно, это понятно data = data | (volume_r<<2), пропускаются два правых разряда, которые выбирают режим для настройки.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_l<<8) почему на 8 сдвиг, а не на 9, ведь правые два разряда +7 разрядов настройки правого канала = 9
осталось по шарить как работать по SPI
- Explorer200
- Родился
- Сообщения: 15
- Зарегистрирован: Пн май 02, 2011 12:23:25
Re: Управление микросхемой M62446AFP
вот только остается не понятно что делать с портами 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);
}пока что в статичном варианте, дабы мозг сильно не насиловать
п.с. делаю для ардуины
Re: Управление микросхемой M62446AFP
спи используется для синхронной последовательной передачи в 2 направления на много устройствExplorer200 писал(а): так как SPI использую в основном для внутрисхемного программирования
и2ц может передавать только на 127 и только в одном направлении
протоколы не привязаны ни к чему
сигнал выборки устройства се, данные и тактовыйExplorer200 писал(а):а в моем случае всего 3
4й данные в обратную сторону, но в твоем случае мс не передает ничего
может и 9, сейчас не помню и вполне мог протупитьExplorer200 писал(а):почему на 8 сдвиг, а не на 9,
я ж говорю, что надо писать код на живом примере
на сцайте быдлодуиды же есть мануал и там точно есть железный спиExplorer200 писал(а):осталось по шарить как работать по SPI
если хочеш софтовый, то у меня на сцайте смотри посты про регистры, там готовый код
алгоритм такой
выставить сигнал разрешения в 1 или 0 по даташиту
выставить 1 или 0 на выводе данных
дернуть клок 1 раз
сдвинуть на 1 бит ту переменную, что хранит 16 бит данных для посылки в мс
и так 16 раз в цикле
подробности у меня на сцайте расписаны проще некуда
тематические ответы только в форуме, в приват не пишите
- Реклама
- Explorer200
- Родился
- Сообщения: 15
- Зарегистрирован: Пн май 02, 2011 12:23:25
Re: Управление микросхемой M62446AFP
чего я и боялся, это усложняет делоkalobyte писал(а): алгоритм такой
выставить сигнал разрешения в 1 или 0 по даташиту
выставить 1 или 0 на выводе данных
дернуть клок 1 раз
сдвинуть на 1 бит ту переменную, что хранит 16 бит данных для посылки в мс
и так 16 раз в цикле
подробности у меня на сцайте расписаны проще некуда
Re: Управление микросхемой M62446AFP
ну так проще использовать аппаратный спи
правда он там вроде бы 8 битный, так что придется порезать
правда он там вроде бы 8 битный, так что придется порезать
тематические ответы только в форуме, в приват не пишите
- Explorer200
- Родился
- Сообщения: 15
- Зарегистрирован: Пн май 02, 2011 12:23:25
Re: Управление микросхемой M62446AFP
Код: Выделить всё
#include <LiquidCrystal.h>
LiquidCrystal lcd(52, 50, 48, 46, 44, 42);
//Пин подключен к 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
п.с. пример использовал от сдвигового регистра
Re: Управление микросхемой M62446AFP
rez=!!(govno&(1<<i+2));
херня какая-то
лучше передавай в консоль вывод
херня какая-то
лучше передавай в консоль вывод
тематические ответы только в форуме, в приват не пишите


