4 выхода ШИМ - 1 усилитель. Не работает.

Deniska407
Offline
Зарегистрирован: 03.11.2014

пока 1 канал. звук регулируется Ок!

Deniska407
Offline
Зарегистрирован: 03.11.2014

зажмурившись, начинаю припаивать второй канал ...

Deniska407
Offline
Зарегистрирован: 03.11.2014

держим пальцы крестиком! на второй канал нет реакции ... паяю третий канал! пробую, пишу сюда результаты ...

omusman
Offline
Зарегистрирован: 21.09.2014

RC сброшу позже или завтра утром, до обеда буду дома можем побороться с фоном.., да будет все норм...

Deniska407
Offline
Зарегистрирован: 03.11.2014

СПАСИБИЩЕ !!!! Очень буду ждать. Ща паяю на чистовую. Отпишу позже.

С ув.,

Д.

omusman
Offline
Зарегистрирован: 21.09.2014

помоему ты паяешь переменник неправильно , крайние ноги нужно поменять местами попробуй на 4 канале.... тогда не понадобится 68к а 1к оставь...

 

 

Deniska407
Offline
Зарегистрирован: 03.11.2014

а как нужно ??? я этим переменником эмитирую переменник на 50 кОм, который на схеме усилителя. у него с полозка уходит в усилитель.

omusman
Offline
Зарегистрирован: 21.09.2014

просто не трогая среднего поменяй местами выводы, если смотреть на него со стороны ручки регулятора левый вывод -земля...

 

Deniska407
Offline
Зарегистрирован: 03.11.2014

omusman
Offline
Зарегистрирован: 21.09.2014

нет не на усилителе, а  регулятор с пина..

Deniska407
Offline
Зарегистрирован: 03.11.2014

а какая разница? это же резистор .... он будет работать либо громче-тише либо тише-громче ... или я не прав? (чайник все таки в этих делах)

omusman
Offline
Зарегистрирован: 21.09.2014

получается что у меня ИНЕТ быстрее?

Deniska407
Offline
Зарегистрирован: 03.11.2014

а можно трассу словами, пожалуйста? пин - резистор .... - диод - резитор переменный нога ... и т.д. плиз .....

omusman
Offline
Зарегистрирован: 21.09.2014

ты же увеличиваешь громкосто по часовой стрелке?

Deniska407
Offline
Зарегистрирован: 03.11.2014

черт его знает ... пока на чистовую не паяю. жду указаний к новому тестированию.

Deniska407
Offline
Зарегистрирован: 03.11.2014

да, по часовой.

omusman
Offline
Зарегистрирован: 21.09.2014

смотри - сигнал регулируется относительно земли т.е. чем движок резюка от нее (условно) выше тем большее напряжение подается на усик..вот если резистор 68 посадить на землю после переменника, то громкость будет большой и не будет выключаться полностью...

omusman
Offline
Зарегистрирован: 21.09.2014

скайп есть?

я - iGor. omusman

Deniska407
Offline
Зарегистрирован: 03.11.2014

есть. panochkin.denis

Deniska407
Offline
Зарегистрирован: 03.11.2014

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 . его не менял.

С ув.,

Д.