Управление микросхемой M62446AFP

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Аватара пользователя
Explorer200
Родился
Сообщения: 15
Зарегистрирован: Пн май 02, 2011 12:23:25

Управление микросхемой M62446AFP

Сообщение Explorer200 »

Здравствуйте!
Есть сабвуфер Sven HT-485, но нет к нему ПДУ, что делает его полностью бревном. (да, купить пульт проще... но не интересно и затратно )
Так то он работает, но было решено срезать часть мозгов (можно сказать основных) это микроконтроллер, который управляет кодеком и 6-ти канальным регулятором громкости/баса/тембра, и собственно сам кодек! Но суть вопроса не в этом.
Имеется Arduino Mega2560, микросхема M62446AFP (выводы управления имеют названия CLK, DATA, LATCH), а так же даташит к микросхеме.

Помогите разобраться, что означают буквы с цифрами D01,D11,D21,D31 и т.д. (стр. 8-12)
если возможно, напишите кусок кода с примером установки значения, например для установки басса +0dB

П.С. как я понимаю данные передаются по интерфейсу i2c...
Вложения
datasheet.pdf
(5.02 МБ) 830 скачиваний
Реклама
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Управление микросхемой M62446AFP

Сообщение kalobyte »

Explorer200 писал(а):П.С. как я понимаю данные передаются по интерфейсу 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

так формируеш переменну и посылаеш ее в регистр аппаратного спи контроллера и все

то же самое для других режимов, только маски надо задать дефайном, сдвинуть на нужное количество бит и наложить маску по ИЛИ
тематические ответы только в форуме, в приват не пишите
Реклама
Аватара пользователя
Explorer200
Родился
Сообщения: 15
Зарегистрирован: Пн май 02, 2011 12:23:25

Re: Управление микросхемой M62446AFP

Сообщение Explorer200 »

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
Аватара пользователя
Explorer200
Родился
Сообщения: 15
Зарегистрирован: Пн май 02, 2011 12:23:25

Re: Управление микросхемой M62446AFP

Сообщение Explorer200 »

вот только остается не понятно что делать с портами 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); 
}
что то на калякал, надо будет проверить, а пока так компилировалось
пока что в статичном варианте, дабы мозг сильно не насиловать

п.с. делаю для ардуины
Реклама
Эиком - электронные компоненты и радиодетали
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Управление микросхемой M62446AFP

Сообщение kalobyte »

Explorer200 писал(а): так как SPI использую в основном для внутрисхемного программирования
спи используется для синхронной последовательной передачи в 2 направления на много устройств
и2ц может передавать только на 127 и только в одном направлении

протоколы не привязаны ни к чему
Explorer200 писал(а):а в моем случае всего 3
сигнал выборки устройства се, данные и тактовый
4й данные в обратную сторону, но в твоем случае мс не передает ничего
Explorer200 писал(а):почему на 8 сдвиг, а не на 9,
может и 9, сейчас не помню и вполне мог протупить
я ж говорю, что надо писать код на живом примере
Explorer200 писал(а):осталось по шарить как работать по SPI
на сцайте быдлодуиды же есть мануал и там точно есть железный спи
если хочеш софтовый, то у меня на сцайте смотри посты про регистры, там готовый код

алгоритм такой
выставить сигнал разрешения в 1 или 0 по даташиту
выставить 1 или 0 на выводе данных

дернуть клок 1 раз
сдвинуть на 1 бит ту переменную, что хранит 16 бит данных для посылки в мс

и так 16 раз в цикле
подробности у меня на сцайте расписаны проще некуда
тематические ответы только в форуме, в приват не пишите
Реклама
Аватара пользователя
Explorer200
Родился
Сообщения: 15
Зарегистрирован: Пн май 02, 2011 12:23:25

Re: Управление микросхемой M62446AFP

Сообщение Explorer200 »

kalobyte писал(а): алгоритм такой
выставить сигнал разрешения в 1 или 0 по даташиту
выставить 1 или 0 на выводе данных

дернуть клок 1 раз
сдвинуть на 1 бит ту переменную, что хранит 16 бит данных для посылки в мс

и так 16 раз в цикле
подробности у меня на сцайте расписаны проще некуда
чего я и боялся, это усложняет дело
Реклама
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Управление микросхемой M62446AFP

Сообщение kalobyte »

ну так проще использовать аппаратный спи
правда он там вроде бы 8 битный, так что придется порезать
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Explorer200
Родился
Сообщения: 15
Зарегистрирован: Пн май 02, 2011 12:23:25

Re: Управление микросхемой M62446AFP

Сообщение Explorer200 »

Код: Выделить всё

#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

п.с. пример использовал от сдвигового регистра
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Управление микросхемой M62446AFP

Сообщение kalobyte »

rez=!!(govno&(1<<i+2));
херня какая-то
лучше передавай в консоль вывод
тематические ответы только в форуме, в приват не пишите
Ответить

Вернуться в «Периферия»