|
|
  |
ATmega16 + PT2322 + PT2323, Пишем программу в Code Vision AVR... |
|
|
|
Mar 19 2013, 15:12
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Цитата(artkam @ Mar 19 2013, 16:21)  Как-то уж слишком мудрено у Вас... Предлагаю привести схему к виду, как в приложенном файле, тогда о уровнях напряжения на входе АЦП можно будет просто догадаться, не прибегая даже к закону имени Ома )))) НУ я замерял напряжение на своей схеме: 0,9 \ 1,52 \ 2,00 \ 2,35 \ 2,64 как в адц перевести??? Еще подскажите как организовать сдвиг бита для регулировки тона. Исходник привел ниже. Биты регулировки в коде Код 0b1001 G3 G2 G1 G0 Bass tone control 0b1010 K3 K2 K1 K0 Middle tone control 0b1011 H3 H2 H1 H0 Treble tone control
TONE CONTROL BITS G3/K3/H3 G2/K2/H2 G1/K1/H1 G0/K0/H0 Attenuation (dB) 0 0 0 0 -14 0 0 0 1 -12 0 0 1 0 -10 0 0 1 1 -8 0 1 0 0 -6 0 1 0 1 -4 0 1 1 0 -2 0 1 1 1 0 1 0 0 0 +14 1 0 0 1 +12 1 0 1 0 +10 1 0 1 1 +8 1 1 0 0 +6 1 1 0 1 +4 1 1 1 0 +2 1 1 1 1 0 Note: G=Bass, K=Middle, H=Treble
Сообщение отредактировал Дмитрий(846) - Mar 19 2013, 15:25
|
|
|
|
|
Mar 19 2013, 15:46
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Дмитрий(846) @ Mar 19 2013, 18:12)  НУ я замерял напряжение на своей схеме: 0,9 \ 1,52 \ 2,00 \ 2,35 \ 2,64 как в адц перевести??? Для этого придется-таки хоть чуть-чуть подумать и вспомнить пропорции, их учат примерно классе в четвертом. Если АЦП 10-разрядный, и на его вход подано его полное опорное напряжение, например, AVCC=5В (я не знаю, какое опорное напряжение вы выбрали для АЦП), то из его регистра будет считано число 1023. Числа для остальных напряжений рассчитайте сами.
|
|
|
|
|
Mar 19 2013, 17:41
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Цитата(kovigor @ Mar 19 2013, 17:46)  Для этого придется-таки хоть чуть-чуть подумать и вспомнить пропорции, их учат примерно классе в четвертом. Если АЦП 10-разрядный, и на его вход подано его полное опорное напряжение, например, AVCC=5В (я не знаю, какое опорное напряжение вы выбрали для АЦП), то из его регистра будет считано число 1023. Числа для остальных напряжений рассчитайте сами. Спасибо с кнопками разобрался, перепаял резистор на +5 на 10кОм, а не 4,7кОм. Все работает вот результат. Код unsigned char read_key(void) { unsigned char key_adc; key_adc=read_adc(3); //3 if (key_adc <= 3) return KEY_STANDBY; if ((key_adc >= 20) && (key_adc <= 60)) return KEY_MUTE; //45//100-148 = 1000 Om if ((key_adc >= 70) && (key_adc <= 85)) return KEY_INPUTAC3; //77//130-178 = 2000 Om if ((key_adc >= 90) && (key_adc <= 118)) return KEY_INPUT1; //102//180-198 = 3000 Om if ((key_adc >= 120) && (key_adc <= 144)) return KEY_MODE; //119//200-248 = 4000 Om if ((key_adc >= 150) && (key_adc <= 190)) return KEY_INDICATE_PLUS; //134//200-248 = 5000 Om } Теперь нужна помощь с регулировкой тона
|
|
|
|
|
Mar 19 2013, 18:05
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Дмитрий(846) @ Mar 19 2013, 21:41)  Теперь нужна помощь с регулировкой тона ... Еще подскажите как организовать сдвиг бита для регулировки тона. Поздравляю, так бы и раньше. Вещи-то простейшие. Сдвиг бита ? Любую книжку по Си гляньте, того же Шилдта, справочник, или Крупника Пример: Код unsigned char x, y;
...
x = 0x80; y = (x >> 1); //Теперь Y = 0x40 y = (y << 1); //Теперь Y равно = 0x80 http://www.cyberguru.ru/cpp/cpp-programmin...ide-page27.html
|
|
|
|
|
Mar 19 2013, 20:24
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Очень благодарен за помощь. Но это я понимаю. Но мне надо начиная с 0 при шаге в право надо +2 ДБ в лево 0 еще в лево -2ДБ на сначениях +14 или -14 остановить выполнение Значение бита перевел, помогите хоть с bass с остальными я уже сделаю Код /*1 0 0 1 G3 G2 G1 G0 Bass tone control 1 0 1 0 K3 K2 K1 K0 Middle tone control 1 0 1 1 H3 H2 H1 H0 Treble tone control Bass Middle Treble 0 0 0 0 -14 0x90 0xA0 0xB5 0 0 0 1 -12 0x91 0xA1 0xB5 0 0 1 0 -10 0x92 0xA2 0xB5 0 0 1 1 -8 0x93 0xA3 0xB5 0 1 0 0 -6 0x94 0xA4 0xB5 0 1 0 1 -4 0x95 0xA5 0xB5 0 1 1 0 -2 0x96 0xA6 0xB6 0 1 1 1 0 0x97 0xA7 0xB7 1 1 1 1 0 0x9F 0xAF 0xBF 1 1 1 0 +2 0x9E 0xAE 0xBE 1 1 0 1 +4 0x9D 0xAD 0xBD 1 1 0 0 +6 0x9C 0xAC 0xBC 1 0 1 1 +8 0x9B 0xAB 0xBB 1 0 1 0 +10 0x9A 0xAA 0xBA 1 0 0 1 +12 0x99 0xA9 0xB9 1 0 0 0 +14 0x98 0xA8 0xB8 */
Сообщение отредактировал Дмитрий(846) - Mar 19 2013, 20:27
|
|
|
|
|
Mar 19 2013, 21:50
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 14-09-10
Из: Уфа
Пользователь №: 59 479

|
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).
|
|
|
|
|
Mar 20 2013, 10:34
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Да писал сам.!!! Есть замечания, подправьте, буду только рад.
|
|
|
|
|
Mar 20 2013, 20:07
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Решил попробовать так, но звук не меняется Код #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; } }
|
|
|
|
|
Mar 21 2013, 18:09
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Подсказали через массив функций бахнуть, а результат 0, звук не меняется
|
|
|
|
|
Mar 21 2013, 18:22
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 14-09-10
Из: Уфа
Пользователь №: 59 479

|
В приложенном документе подробно расписана процедура программирования микросхемы PT2322 по шине I2C. Создайте отдельную программу, которая содержит три функции main(){}; функцию инициализации и настройки I2C и функцию, которая настраивает звуковой процессор. Пока в таком виде не заработает, лучше в дебри приложенного вами исхродника не соваться...
Прикрепленные файлы
pt2322.pdf ( 201.67 килобайт )
Кол-во скачиваний: 81
|
|
|
|
|
Mar 21 2013, 18:31
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Цитата(artkam @ Mar 21 2013, 20:22)  В приложенном документе подробно расписана процедура программирования микросхемы PT2322 по шине I2C. Создайте отдельную программу, которая содержит три функции main(){}; функцию инициализации и настройки I2C и функцию, которая настраивает звуковой процессор. Пока в таком виде не заработает, лучше в дебри приложенного вами исхродника не соваться... Все кроме тона работает, инициализация проходит нормально в функции main, настройки аналогично
|
|
|
|
|
Mar 21 2013, 19:38
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 14-09-10
Из: Уфа
Пользователь №: 59 479

|
Попробуйте, в качестве эксперимента, в функции загрузки параметров из ЕЕПРОМ после вызовов этих функций: 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();
Я тут присмотрелся... Нет, не будет и в таком виде работать. В общем, я Вам подправил исходник, в теории, должно "запеть"...
|
|
|
|
|
Mar 21 2013, 19:46
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Пробовал, но я писал только 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();
Кстати то я дефинил все переменные
|
|
|
|
|
Mar 21 2013, 19:55
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 14-09-10
Из: Уфа
Пользователь №: 59 479

|
Вот здесь:
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"};
Иначе, не компилицца...
|
|
|
|
|
Mar 21 2013, 19:57
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-13
Из: Украина / Харьков
Пользователь №: 75 894

|
Вы имеете ввиду Код i2c_start(); i2c_write(ADDR_2322); i2c_write(ACK); i2c_write(tsss &= ~0x02); //отключает байпасс регулятора тембра i2c_write(ACK); i2c_stop(); Изменил исходник, проверю на выходных, атмега сгорела из за халатности. Ну я так понял должно работать? А в чем физическая суть?
Сообщение отредактировал Дмитрий(846) - Mar 21 2013, 20:28
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|