Wav плеер на Atmega. Просадка напряжения pam8403.

Обсуждаем контроллеры компании Atmel.
Ответить
X-HUNTER
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Ср янв 23, 2019 20:18:44

Wav плеер на Atmega. Просадка напряжения pam8403.

Сообщение X-HUNTER »

Приветствую.
Имеется схема Wav плеера (PCM 16KHz, 8 bit, Mono.) на МК Atmega328. Вывод звука осуществляется через ШИМ (вывод OCR1A) и ФНЧ на УНЧ. Питание через адаптер 5 В. 1,5 А. (5 вольт на УНЧ, 3.3 на МК)


Схема ФНЧ:
Изображение
Схема УНЧ (Вход P не используется.):
Изображение

Код: Выделить всё


ISR(TIMER1_OVF_vect)  
 {   
 if (sp % 2 == 0) // 31250 / 2 = ~16000 Герц
  {    
  OCR1A = readNextByte()  ;  
  fileSize--;   
  }  
 sp++;   
 }

.......
//8000000/256 = 31250 Герц

TCCR1A = 0x81;
 TCCR1B = 0x09;
 TCNT1  = 0x00;
 OCR1A  = 0x00;
 
 
//----------------------------------------
// Убрать щелчек

 uint8_t start = flash.readNextByte(); 
 fileSize--; 
 

//---------------------------------------
//При добавлении этого кода начинает сильно мигать подсветка дисплея. 
 while (OCR1A < start)   
  {     
  _delay_us(100);   
  OCR1A++;   
  }
//---------------------------------------- 


 TIMSK1 |= (1<<TOIE1); // разрешаем прерывание по переполнению таймера
 
 while(fileSize > 0) asm("nop");

 TIMSK1 &= ~(1<<TOIE1); 
 
 
 //---------------------------------------
 //При добавлении этого кода начинает сильно мигать подсветка дисплея. 
  while (OCR1A > 0)  
   {
   OCR1A--; 
   _delay_us(100);    
   }
 //---------------------------------------
 
При воспроизведении первого файла имеется щелчок, от которого можно избавиться таким образом:

Код: Выделить всё

// Убрать щелчек
 uint8_t start = readNextByte();  //перввый байт WAV  файла
 fileSize--; 
 while (OCR1A < start)
  {     
  _delay_us(100);   
  OCR1A++;   
  }

При этом начинает достаточно заметно мигать подсветка дисплея. Почему?
Реклама
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Wav плеер на Atmega. Просадка напряжения pam8403.

Сообщение NStorm »

А где схема подключения дисплея?
Реклама
X-HUNTER
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Ср янв 23, 2019 20:18:44

Re: Wav плеер на Atmega. Просадка напряжения pam8403.

Сообщение X-HUNTER »

Дисплей LCD1602 подключен по I2C шине. Питание напрямую к адаптеру.

Добавлено after 1 minute 30 seconds:
Разводку под PAM8403 скопировал с китайского модуля, самовозбуждения вроде не наблюдается.
Изображение

Добавлено after 20 minutes 5 seconds:
Если переписать код следующим образом:

Код: Выделить всё

ISR(TIMER1_OVF_vect) 
 {   
 if (sp % 2 == 0) // 31250 / 2 = ~16000 Герц
  {   
  OCR1A = readNextByte()  ; 
  fileSize--;   
  } 
 sp++;   
 }

.......
//8000000/256 = 31250 Герц

TCCR1A = 0x81;
 TCCR1B = 0x09;
 TCNT1  = 0x00;
 //OCR1A  = 0x00;



 TIMSK1 |= (1<<TOIE1); // разрешаем прерывание по переполнению таймера
 
 while(fileSize > 0) asm("nop");

 TIMSK1 &= ~(1<<TOIE1);
 
Мигания почти нет.
Ответить

Вернуться в «AVR»