Теперь вот только не могу понять...
Написал код, регулирует громкость:
Код:
void R2A_set_volume(){
unsigned char vol_H = (89-Volume)/10 , vol_L = (89-Volume)%10;
i2c_start();
i2c_write(0b10000010);
i2c_write(0x00);
i2c_write((vol_H << 4) | vol_L);
i2c_write((vol_H << 4) | vol_L);
i2c_stop();
LCD_draw_volume();
}
Но, есть косяк.
разница в уровне звука между 49 и 50 заметно выше, чем между 50 и 51...
И так со всеми переходами между десяток.
прибавляешь, к примеру, от 40 до 49 - растет звук плавно. Однако, после увеличения с 49 до 50 - резкий скачек уровня громкости, а дальше в пределах десятки опять нормально растет.
Проблемы в самом звуке быть не может: источником взял тактовую частоту дисплея 2кГц. На слух очень заметные перепады, особенно если прибавляешь резко (вообще "лесенка" получается"...
Думал, что опять натупил с логикой, вывел в отдельные знакоместа выражения:
(89-Volume)/10 и (89-Volume)%10
Показывают как положено, познаково модуль от затухания...