Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATmega16 + PT2322 + PT2323
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Страницы: 1, 2
artkam
CODE
void Tone_Controll(void)
{
i2c_start();
i2c_write(ADDR_2322);
i2c_write(ACK);
i2c_write(TONE_CONTROLL_Treble);
i2c_write(TONE_CONTROLL_Middle);
i2c_write(TONE_CONTROLL_Bass);
i2c_stop();
}


Вот эту функцию Вы сами писали? Спрашиваю, ибо в документации рекомендуется передача данных к звуковому процессору с использованием бита подтверждения. Либо необходимо выжидать 1 такт (шины i2c).
Дмитрий(846)
Да писал сам.!!!
Есть замечания, подправьте, буду только рад.
Дмитрий(846)
Решил попробовать так, но звук не меняется


Код
#define Bass14DAWN 0b10010000    
#define Bass12DAWN 0b10010001    
#define Bass10DAWN 0b10010010    
#define Bass8DAWN  0b10010011    
#define Bass6DAWN  0b10010100      
#define Bass4DAWN  0b10010101    
#define Bass2DAWN  0b10010110    
#define Bass0DAWN  0b10010111    
#define Bass0UP    0b10011111      
#define Bass2UP    0b10011110      
#define Bass4UP    0b10011101      
#define Bass6UP    0b10011100    
#define Bass8UP    0b10011011      
#define Bass10UP   0b10011010    
#define Bass12UP   0b10011001    
#define Bass14UP   0b10011000    

#define Middle14DAWN 0b10100000    
#define Middle12DAWN 0b10100001    
#define Middle10DAWN 0b10100010    
#define Middle8DAWN  0b10100011    
#define Middle6DAWN  0b10100100      
#define Middle4DAWN  0b10100101    
#define Middle2DAWN  0b10100110    
#define Middle0DAWN  0b10100111    
#define Middle0UP    0b10101111      
#define Middle2UP    0b10101110      
#define Middle4UP    0b10101101      
#define Middle6UP    0b10101100    
#define Middle8UP    0b10101011      
#define Middle10UP   0b10101010    
#define Middle12UP   0b10101001    
#define Middle14UP   0b10101000

#define Treble14DAWN 0b10110000    
#define Treble12DAWN 0b10110001    
#define Treble10DAWN 0b10110010    
#define Treble8DAWN  0b10110011    
#define Treble6DAWN  0b10110100      
#define Treble4DAWN  0b10110101    
#define Treble2DAWN  0b10110110    
#define Treble0DAWN  0b10110111    
#define Treble0UP    0b10111111      
#define Treble2UP    0b10111110      
#define Treble4UP    0b10111101      
#define Treble6UP    0b10111100    
#define Treble8UP    0b10111011      
#define Treble10UP   0b10111010    
#define Treble12UP   0b10111001    
#define Treble14UP   0b10111000
//Регулировка басс
void Tone_Change_Bass(void)
{
switch(Tone_Change_Bass_Switch)
  {    
  case 1:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);
     i2c_write(Bass14DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-14");
     delay_ms(600);                        
    break;
  case 2:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);  
     i2c_write(Bass12DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-12");
     delay_ms(600);                        
    break;
  case 3:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);
     i2c_write(Bass10DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-10");
     delay_ms(600);                        
    break;
  case 4:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);
     i2c_write(Bass8DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-8");
     delay_ms(600);                        
    break;
  case 5:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);  
     i2c_write(Bass6DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-6");
     delay_ms(600);                        
    break;
  case 6:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);      
     i2c_write(Bass4DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-4");
     delay_ms(600);                        
    break;
  case 7:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);      
     i2c_write(Bass2DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-2");
     delay_ms(600);                        
    break;
  case 8:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);    
     i2c_write(Bass0DAWN);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(13,0);
     lcd_putsf("-0");
     delay_ms(600);                        
    break;
  case 9:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);    
     i2c_write(Bass0UP);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+0");
     delay_ms(600);                        
    break;
  case 10:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);    
     i2c_write(Bass2UP);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+2");
     delay_ms(600);                        
    break;  
  case 11:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);  
     i2c_write(Bass4UP);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+4");
     delay_ms(600);                        
    break;  
  case 12:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);  
     i2c_write(Bass6UP);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+6");
     delay_ms(600);                        
    break;
  case 13:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);    
     i2c_write(Bass8UP);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+8");
     delay_ms(600);                        
    break;
  case 14:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);
     i2c_write(Bass10UP);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+10");
     delay_ms(600);                        
    break;  
  case 15:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);
     i2c_write(Bass12UP);    
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+12");
     delay_ms(600);                        
    break;  
  case 16:                      
     i2c_start();
     i2c_write(ADDR_2322);
     i2c_write(ACK);
     i2c_write(Bass14UP);
     i2c_write(ACK);
     i2c_stop();
     lcd_gotoxy(0,1);
     lcd_putsf("+14");
     delay_ms(600);                        
    break;
    }
  }
Дмитрий(846)
Подсказали через массив функций бахнуть, а результат 0, звук не меняется
artkam
В приложенном документе подробно расписана процедура программирования микросхемы PT2322 по шине I2C. Создайте отдельную программу, которая содержит три функции main(){}; функцию инициализации и настройки I2C и функцию, которая настраивает звуковой процессор. Пока в таком виде не заработает, лучше в дебри приложенного вами исхродника не соваться...
Дмитрий(846)
Цитата(artkam @ Mar 21 2013, 20:22) *
В приложенном документе подробно расписана процедура программирования микросхемы PT2322 по шине I2C. Создайте отдельную программу, которая содержит три функции main(){}; функцию инициализации и настройки I2C и функцию, которая настраивает звуковой процессор. Пока в таком виде не заработает, лучше в дебри приложенного вами исхродника не соваться...


Все кроме тона работает, инициализация проходит нормально в функции main, настройки аналогично
artkam
Попробуйте, в качестве эксперимента, в функции загрузки параметров из ЕЕПРОМ после вызовов этих функций:
CODE

i2c_start();
i2c_write(ADDR_2322);
i2c_write(ACK);
i2c_write(0b11000111); // aктивaция caбвyфepa
i2c_stop();


добавить что-то вроде:
CODE

i2c_start();
i2c_write(ADDR_2322);
i2c_write(ACK);
i2c_write(TONE_CONTROL_ON);
i2c_stop();


Я тут присмотрелся... Нет, не будет и в таком виде работать. В общем, я Вам подправил исходник, в теории, должно "запеть"...
Дмитрий(846)

Пробовал, но я писал только
CODE

i2c_start();
i2c_write(ADDR_2322);
i2c_write(ACK);
i2c_write(IN_1 вместо 0b11000111); // aктивaция caбвyфepa
i2c_write(ACK);
i2c_write(TONE_CONTROL_ON);
i2c_write(ACK);
i2c_stop();


Кстати то я дефинил все переменные
artkam
Вот здесь:

unsigned char Array2[][16] = {"-14", "-12", "-10", "-8", "-6", "-4", "-2", "-0", "+0", "+2", "+4", "+6", "+8", "+10", "+12", "+14"};

скорее всего должно быть как-то так:

unsigned char* Array2[16] = {"-14", "-12", "-10", "-8", "-6", "-4", "-2", "-0", "+0", "+2", "+4", "+6", "+8", "+10", "+12", "+14"};

Иначе, не компилицца...
Дмитрий(846)
Вы имеете ввиду

Код
i2c_start();
    i2c_write(ADDR_2322);
    i2c_write(ACK);
    i2c_write(tsss &= ~0x02);      //отключает байпасс регулятора тембра
    i2c_write(ACK);
    i2c_stop();


Изменил исходник, проверю на выходных, атмега сгорела из за халатности.
Ну я так понял должно работать?

А в чем физическая суть?
artkam
Я что-то не понял... Вы предложенный мной исходник в проект подключали???
Дмитрий(846)
Я в каждом после выкладываю свежий, с исправлением ошибок, держите
artkam
Так в нем нет исправлений, которые внес я... Поверьте, те моменты что я подправил, очень важны... Так что замените исходник в Вашем проекте моим и пересоберите...
Дмитрий(846)
Цитата(artkam @ Mar 21 2013, 22:06) *
Так в нем нет исправлений, которые внес я... Поверьте, те моменты что я подправил, очень важны... Так что замените исходник в Вашем проекте моим и пересоберите...

?? спасибо, а где он
artkam
Прикрепляю снова...
Дмитрий(846)
Вы имеете ввиду

Код
Код
i2c_start();
    i2c_write(ADDR_2322);
    i2c_write(ACK);
    i2c_write(tsss &= ~0x02);      //отключает байпасс регулятора тембра
    i2c_write(ACK);
    i2c_stop();


Изменил исходник, проверю на выходных, атмега сгорела из за халатности.
Ну я так понял должно работать?

А в чем физическая суть?
artkam
Цитата(Дмитрий(846) @ Mar 22 2013, 00:57) *
А в чем физическая суть?


Присмотритесь внимательнее, изменения коснулись и функции Mute()! Физическая сущность в том, что в микросхеме предусмотрена возможность посылать сигнал мимо темброблока, а у вас данные записываются в регистр фукнций так, что это и происходит.
Дмитрий(846)
Цитата(artkam @ Mar 21 2013, 22:38) *
Присмотритесь внимательнее, изменения коснулись и функции Mute()! Физическая сущность в том, что в микросхеме предусмотрена возможность посылать сигнал мимо темброблока, а у вас данные записываются в регистр фукнций так, что это и происходит.


Нет я это все понял, изменил, видел и добавление unsigned char...

Спасибо огромное на выходных опробую, думаете будет работать?

Подскажите а как сделать так что б при выбраном входе отображалось на LCD в условие indicate=1;, ато я писал функцию
Код
//Засветим свето-диоды по выбраному каналам и покажем на LCD
void Input_CH_Indicate(void)
{
      if(input_ADDR == IN_AC3)                     // Если канал выбран
                    {
                    lcd_gotoxy(0,0);
                    lcd_putsf("ac-3");
                    LED_inputAC3=1;    
                    }
      else                                            
                    {
                    LED_inputAC3=0;    
                    };                  
      if(input_ADDR == IN_1)
                    {
                    lcd_gotoxy(0,0);
                    lcd_putsf("ac-3");
                    LED_input1=1;
                    }
      else
                    {
                    LED_input1=0;
                    };
      if(input_ADDR == IN_2)
                    {
                    lcd_gotoxy(0,0);
                    lcd_putsf("ac-3");
                    LED_input2=1;
                    }
      else
                    {
                    LED_input2=0;
                    };
      if(input_ADDR == IN_3)
                    {
                    lcd_gotoxy(0,0);
                    lcd_putsf("ac-3");
                    LED_input3=1;
                    }
      else
                    {
                    LED_input3=0;
                    };
      if(input_ADDR == IN_4)
                    {
                    lcd_gotoxy(0,0);
                    lcd_putsf("ac-3");
                    LED_input4=1;
                    }
      else
                    {
                    LED_input4=0;
                    };

   }
Дмитрий(846)
Попробовал звук не меняется.
artkam
А при нажатии на кнопку Mute, что-то происходит?
Дмитрий(846)
Цитата(artkam @ Mar 23 2013, 19:18) *
А при нажатии на кнопку Mute, что-то происходит?


ДА звук отключается, снова нажав включается и соответственно загорается светодиод.

Кстати если что у меня наоборот, диод светиться при логическом 0 ( так как у меня стоят ключи)
artkam
Внес изменения в Function_3D(). Обратите внимание, происходит ли что-то при нажатии соответствующей кнопки на пульте....
Дмитрий(846)
Цитата(artkam @ Mar 23 2013, 20:47) *
Внес изменения в Function_3D(). Обратите внимание, происходит ли что-то при нажатии соответствующей кнопки на пульте....


нет, ничего не меняется

О немного получается, только две колонки не работаю F.L. & F.R.
artkam
Темброблок-то ожил??
Дмитрий(846)
Да, но где то блокируются два канала F.R. и F.L.
artkam
У вас ошибка в Load_Options()... Сами прочитаете документацию и найдете ошибку, или надо подсказать??
Дмитрий(846)
Цитата(artkam @ Mar 23 2013, 22:25) *
У вас ошибка в Load_Options()... Сами прочитаете документацию и найдете ошибку, или надо подсказать??


??? а на что обратить внимание???

Спасибо огромное за помощь
artkam
Внимание надо обратить на раздел "даташита": "PT2322 PROGRAMMING PROCEDURE"....
Дмитрий(846)
Цитата(artkam @ Mar 23 2013, 22:38) *
Внимание надо обратить на раздел "даташита": "PT2322 PROGRAMMING PROCEDURE"....


Я так понял //=============================== Фyнкция зaгpyзки пapaмeтpoв ================================================
void Load_Options(void)
{
standby=0; // peжим STANDBY в oжидaнии
mute=1; // фyнкция включeнa при загрузке Атмеги
base=base_eep; // зaгpyжaeм ypoвeнь пoдъeмa в кaнaл caбвyфepa для Surround
surr=surr_eep; // зaгpyжaeм cocтoяниe фyнкции Surround
function3d=function3d_eep; // зaгpyжaeм 3д
input_ADDR=input_ADDR_eep; // зaгpyжaeм нoмep кaнaлa
// зaгpyзкa кaнaлoв кopeкции

//volume10=vol_eep;
trim_fl=trim_fl_eep;
trim_fr=trim_fr_eep;
trim_ct=trim_ct_eep;
trim_sw=trim_sw_eep;
trim_rl=trim_rl_eep;
trim_rr=trim_rr_eep;

trim_Bass=trim_Bass_eep;
trim_Middle=trim_Middle_eep;
trim_Treble=trim_Treble_eep;

Volume_Trim();

i2c_start();
i2c_write(ADDR_2322);
i2c_write(0b11111111); //Установить регистр, для нормальной работы
i2c_stop();

i2c_write(ADDR_2322);
i2c_write(ACK);
i2c_write(0b11000111); //Посли включения питания послать 0b11000111 для активиции C7H для запуска пт2322//Активировать 6ти канальный прием пт2322 //IN_1 aктивaция caбвyфepa включив первый канал // 0b11000111(был АЦ3)
i2c_write(ACK);
i2c_stop();

i2c_start();
i2c_write(ADDR_2322);
i2c_write(ACK);
i2c_write(tsss &= ~0x02); //отключает байпасс регулятора тембра, необходимо для регулировки тембров
i2c_write(ACK);
i2c_stop();

i2c_start();
i2c_write(ADDR_2323);
i2c_write(ACK);
i2c_write(CH_ALL_ON); // 0b11111110 // 0xfe // aктивaция нacтpoeк PT2323 включив все каналы
i2c_write(ACK);
i2c_stop();

Mute();
}

Все равно, может я не понял???
artkam
Так пробуйте уже записать прошивку в процессор, железо-то у Вас )))
Дмитрий(846)
Цитата(artkam @ Mar 23 2013, 22:58) *
Так пробуйте уже записать прошивку в процессор, железо-то у Вас )))


Попробовал, результат 0

Все получилось, проблема была только в следующем.

Нельзя было разделять заполнение регистра и включения С7H.
Правильный код
Код
    i2c_start();        
    i2c_write(ADDR_2322);
    i2c_write(ACK);
    i2c_write(0b11111111);          //Установить регистр, для нормальной работы
    i2c_write(ACK);
    i2c_write(0b11000111);         //Посли включения питания послать 0b11000111 для активиции C7H для запуска пт2322//Активировать 6ти канальный прием пт2322 //IN_1 aктивaция caбвyфepa включив первый канал // 0b11000111(был АЦ3)
    i2c_write(ACK);
    i2c_stop();



Подскажите как лучше реализовать регулировку тембра, и вывод значения на дисплей, и посли выключения запись этого параметра, а при включение, чтоб и значение на LCD и уровень подъема исправно загрузились.
Дмитрий(846)
Свежий исходник
Дмитрий(846)
в принципе разобрался и сам с регулировкой кроме отображения мне надо от -14 до +14 отображать с шагом 2 а у меня от 1 до 15

И вопрос в чем может быть проблема не регулируется понижение в FR и FL
Дмитрий(846)
Всем огромное спасибо, пока во всем практически разобрался кроме как нормально регулировать громкость. она регулируется, но иногда с непонятными лагами.
Там надо две переменные посылать
в аудио контроллере регулировать надо с посылкой бита как на 10 ДБ так и 0-9 ДБ

Код
0b11010000        //0           208
0b11010001        //1           209
0b11010010        //2           210
0b11010011        //3           211
0b11010100        //4           212
0b11010101        //5           213
0b11010110        //6           214
0b11010111        //7           215
0b11011000        //8           216
0b11011001        //9           217



0b11100000        //0 десяток   224
0b11100001        //1 десяток   225
0b11100010        //2 десяток   226
0b11100011        //3 десяток   227
0b11100100        //4 десяток   228
0b11100101        //5 десяток   229
0b11100110        //6 десяток   230
0b11100111        //7 десяток   231


Код
//=============================== Master Volume ==============================================================
void Master_Volume(void)
            {
            i2c_start();
            i2c_write(ADDR_2322);
            i2c_write(volume10);
            i2c_write(volume);
            i2c_stop();
            };


Код
if(key == KEY_VOLUME_UP)      /* oбщaя гpoмкocть ++ */
                    {                        
                    switch (indicate)
                                {
                                case 1:
                                            if(vol <= 78)    //так как от 0 до 79  по дата щиту  //было 80
                                                        {
                                                        vol++;
                                                        };
                                            volume--;
                                            if(volume <= 207)
                                                        {
                                                        volume=217;
                                                        volume10--;
                                                        };
                                            if(volume10 >= 225) //224
                                                        {
                                                        Master_Volume();
                                                        Viev_Indicate();
                                                        }
                                            else
                                                        {
                                                        volume10++;
                                                        };  
                                            break;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.