смотри - сигнал регулируется относительно земли т.е. чем движок резюка от нее (условно) выше тем большее напряжение подается на усик..вот если резистор 68 посадить на землю после переменника, то громкость будет большой и не будет выключаться полностью...
Yes! сделал. работает. не нравится. в смысле хочу выпендриться ... а действительно, не регулировать ли уровень громкости программно ??? на выходных буду капать в эту сторону. вдруг малой кровью удастся? тогда все просто. резисторы на 10 кОм на аналоговом входе. читаем сопротивления и передаем в плайсаунд еще и громкость для канала. Мысль у кого есть? Гуру! код измененного плайсаунда привожу ниже (код не мой, я только добавил возможность выводить на 3,9 и 10 выводы к имеющемуся 11-му.)
// Все права на библиотеку, принадлежат
//компании КарМонитор http://carmonitor.ru/ru/-c-51_75.html
//Библиотеку запрещено использовать в коммерческих целях
//она распостраняется только для личного использования
#include "PlaySound.h"
volatile int ismypin;
volatile uint16_t sample;
volatile uint8_t lastSample, FirstSample;
volatile uint8_t new_data, future_data, old_data;
volatile uint8_t stat;
volatile uint8_t *wave;
volatile uint16_t length;
volatile int mypin;
//********************************************************************
void PlaySound::startPlayback(uint8_t *wave_data, uint16_t wave_length, int ismypin)
{
wave = wave_data; //массив звуковых семплов
length = wave_length; //длина звуковых семплов
sample = 0;
stat = 0;
lastSample = pgm_read_byte(&wave_data[wave_length-1]); //последний семпл для плавного выключение, устраняет щелчек
FirstSample = pgm_read_byte(&wave_data[0]); //Первый семпл для плавного включения, устраняет щелчек
mypin = ismypin;
// mypin = 1 то вывод № 11 (по умолчанию)
if (mypin==1) {DDRB |= (1<<3); PORTB &= B11110111;}
// mypin = 2 то вывод № 3
if (mypin==2) {DDRD |= (1<<3); PORTD &= B11110111;}
// mypin = 3 то вывод № 10
if (mypin==3) {DDRB |= (1<<2); PORTB &= B11111011;}
// mypin = 4 то вывод № 9
if (mypin==4) {DDRB |= (1<<1); PORTB &= B11111011;}
if (mypin < 3) // используем таймер №2 для портов 11 и 3
{
ASSR |=(1<<AS2); //AS2 Asynchronous Timer/Counter2
TCCR2A |= ((1<<COM2B1)|(0<<COM2B0)|(1<<COM2A1)|(0<<COM2A0)|(1<<WGM21)|(0<<WGM20)); // WGM22=0 WGM21=1 WGM20=0 режим Mode2 (CTC)
TCCR2B = ((0 << CS22) | (0 << CS21) | (1 << CS20) | (0<<WGM22) | (1<<FOC2A) | (1<<FOC2B)); // без делителя
TCNT2 = 0;
TIMSK2|=(1<<OCIE2A); //включить прерывание таймера 2
}
else // используем таймер №1 для портов 10 и 9
{
ASSR |=(0<<AS2); //AS1 Asynchronous Timer/Counter1
TCCR1A |= ((1<<COM1B1)|(0<<COM1B0)|(1<<COM1A1)|(0<<COM1A0)|(0<<WGM13)|(1<<WGM12)|(0<<WGM11)|(0<<WGM10)); // режим CTC
// TCCR1B = ((0 << CS12) | (0 << CS11) | (1 << CS10) | (0<<WGM12) | (1<<FOC1A) | (1<<FOC1B)); // без делителя
TCCR1B = ((0 << CS12) | (0 << CS11) | (1 << CS10) | (1<<WGM12) | (1<<FOC1A) | (1<<FOC1B)); // без делителя
TCNT1 = 0;
TIMSK1|=(1<<OCIE1A); //включить прерывание таймера 1
}
sei();
for (int i=0; i <FirstSample; i++)// Цикл для плавного нарастания что бы небыло щелчка
{
new_data=i;
stat=2;
sample = 0;
// _delay_us(10);
}
stat=0;
}
//********************************************************************
ISR(TIMER2_COMPA_vect) //Обработчик прерывания по совпадению с OCR2
{
switch (stat)
{
case 0:{
old_data = pgm_read_byte(&wave[sample]); //загрузить текущий семпл
// OCR2A = old_data; //положить семпл для воспроизведения в регистр сравнения
if (mypin==1) {OCR2A = old_data;} // выводим на 11 пин
if (mypin==2) {OCR2B = old_data;} // выводим на 3 пин
stat=1;
++sample; //увеличиваем счетчик
if (sample == length) stat=4; //проверяем на конец файла
future_data = pgm_read_byte(&wave[sample]); //получаем следующий семпл для интерполяции
new_data = (old_data+future_data)/2; //вычисляем интерполированый семпл
}
break;
case 1: {
if(mypin==1){OCR2A=(old_data+new_data)/2; stat=2; } // выводим на 11 пин
if(mypin==2){OCR2B=(old_data+new_data)/2; stat=2; } // выводим на 3 пин
}
break;
case 2: {
if(mypin==1) {OCR2A = new_data; stat=3;} // выводим на 11 пин
if(mypin==2) {OCR2B = new_data; stat=3;} // выводим на 3 пин
}
break;
case 3: {
if(mypin==1) {OCR2A=(new_data+future_data)/2; stat=0; } // выводим на 11 пин
if(mypin==2) {OCR2B=(new_data+future_data)/2; stat=0; } // выводим на 3 пин
}
break;
case 4: {
if(mypin==1){
if(lastSample==0) stat=5; else {--lastSample; OCR2A=lastSample;} // выводим на 11 пин
}
if(mypin==2){
if(lastSample==0) stat=5; else {--lastSample; OCR2B=lastSample;} // выводим на 3 пин
}
}
break;
case 5: {
if(mypin==1){TIMSK2&=(0<<OCIE2A); TCCR2B &=(0<<CS10); PORTB &= B11110111;} // выводим на 11 пин
if(mypin==2){TIMSK2&=(0<<OCIE2A); TCCR2B &=(0<<CS10); PORTD &= B11110111;} // выводим на 3 пин
}
break;
}
}
ISR(TIMER1_COMPA_vect) //Обработчик прерывания по совпадению с OCR1
{
switch (stat)
{
case 0: {
old_data = pgm_read_byte(&wave[sample]); //загрузить текущий семпл
if(mypin==3){OCR1B = old_data;} // выводим на 10 пин
if(mypin==4){OCR1A = old_data;} // выводим на 9 пин
stat=1;
++sample; //увеличиваем счетчик
if (sample == length) stat=4; //проверяем на конец файла
future_data = pgm_read_byte(&wave[sample]); //получаем следующий семпл для интерполяции
new_data = (old_data+future_data)/2; //вычисляем интерполированый семпл
}
break;
case 1: {
if(mypin==3){OCR1B=(old_data+new_data)/2; stat=2; } // выводим на 10 пин
if(mypin==4){OCR1A=(old_data+new_data)/2; stat=2; } // выводим на 9 пин
}
break;
case 2: {
if(mypin==3){OCR1B = new_data; stat=3;} // выводим на 10 пин
if(mypin==4){OCR1A = new_data; stat=3;} // выводим на 9 пин
}
break;
case 3: {
if(mypin==3){OCR1B=(new_data+future_data)/2; stat=0;} // выводим на 10 пин
if(mypin==4){OCR1A=(new_data+future_data)/2; stat=0;} // выводим на 9 пин
}
break;
case 4: {
if(mypin==3){
if(lastSample==0) stat=5; else {--lastSample; OCR1B=lastSample;}} // выводим на 10 пин
if(mypin==4){
if(lastSample==0) stat=5; else {--lastSample; OCR1A=lastSample;}} // выводим на 9 пин
}
break;
case 5:
{TIMSK1&=(0<<OCIE1A); TCCR1B &=(0<<CS10); PORTB &= B11111011;} // выводим на 10 пин и на 9 пин
break;
}
}
узнать бы, где тут громкость зарыта .... или какой ассемблерной командой задается ...
Забыл всем сказать СПАСИБО ОГРОМНОЕ, принимавшим участие в этой ветке! С-П-А-С-И-Б-О !!!
Привожу ПРАВИЛЬНЫЙ вариант - резисторы друг-другу не мешают, регулируется звук плавно на всем секторе. сказка, а не схема!
исправленный скетч я приводил выше - пост #66 . его не менял.
пока 1 канал. звук регулируется Ок!
зажмурившись, начинаю припаивать второй канал ...
держим пальцы крестиком! на второй канал нет реакции ... паяю третий канал! пробую, пишу сюда результаты ...
RC сброшу позже или завтра утром, до обеда буду дома можем побороться с фоном.., да будет все норм...
СПАСИБИЩЕ !!!! Очень буду ждать. Ща паяю на чистовую. Отпишу позже.
С ув.,
Д.
помоему ты паяешь переменник неправильно , крайние ноги нужно поменять местами попробуй на 4 канале.... тогда не понадобится 68к а 1к оставь...
а как нужно ??? я этим переменником эмитирую переменник на 50 кОм, который на схеме усилителя. у него с полозка уходит в усилитель.
просто не трогая среднего поменяй местами выводы, если смотреть на него со стороны ручки регулятора левый вывод -земля...
нет не на усилителе, а регулятор с пина..
а какая разница? это же резистор .... он будет работать либо громче-тише либо тише-громче ... или я не прав? (чайник все таки в этих делах)
получается что у меня ИНЕТ быстрее?
а можно трассу словами, пожалуйста? пин - резистор .... - диод - резитор переменный нога ... и т.д. плиз .....
ты же увеличиваешь громкосто по часовой стрелке?
черт его знает ... пока на чистовую не паяю. жду указаний к новому тестированию.
да, по часовой.
смотри - сигнал регулируется относительно земли т.е. чем движок резюка от нее (условно) выше тем большее напряжение подается на усик..вот если резистор 68 посадить на землю после переменника, то громкость будет большой и не будет выключаться полностью...
скайп есть?
я - iGor. omusman
есть. panochkin.denis
Yes! сделал. работает. не нравится. в смысле хочу выпендриться ... а действительно, не регулировать ли уровень громкости программно ??? на выходных буду капать в эту сторону. вдруг малой кровью удастся? тогда все просто. резисторы на 10 кОм на аналоговом входе. читаем сопротивления и передаем в плайсаунд еще и громкость для канала. Мысль у кого есть? Гуру! код измененного плайсаунда привожу ниже (код не мой, я только добавил возможность выводить на 3,9 и 10 выводы к имеющемуся 11-му.)
узнать бы, где тут громкость зарыта .... или какой ассемблерной командой задается ...
Забыл всем сказать СПАСИБО ОГРОМНОЕ, принимавшим участие в этой ветке! С-П-А-С-И-Б-О !!!
Привожу ПРАВИЛЬНЫЙ вариант - резисторы друг-другу не мешают, регулируется звук плавно на всем секторе. сказка, а не схема!
исправленный скетч я приводил выше - пост #66 . его не менял.
С ув.,
Д.