Проигрывание WAV файла через SD-карту.

Octodoctor
Offline
Зарегистрирован: 04.02.2017

Использую библиотеку TMRpcm, чтобы проиграть файл 1.wav, находящийся на SD-карте.Возникает такая ошибка в программе:
https://i.gyazo.com/12d9952b2acf61a842faf10eb0fa1f9d.png
Делал по примеру:
http://mozgochiny.ru/electronics-2/kak-sdelat-prostoy-pleer-iz-arduino-i...

Почему это происходит?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы не могли бы ошибки и текст скетча копипастить сюда текстом, а не картинками?

Это не ошибка, а предупреждение, что Вы использовали устаревшую конструкцию языка. По идее, всё должно при этом нормально работать. Работает?

Octodoctor
Offline
Зарегистрирован: 04.02.2017
#include <SD.h>                     
#include <TMRpcm.h>           
TMRpcm tmrpcm;  
void setup(){
  tmrpcm.speakerPin = 9;
  int SD_ChipSelectPin=10;
  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)) {  
    Serial.println("SD fail");  
    return;   
  }
  tmrpcm.volume(10);
  tmrpcm.play("1.wav"); 
}

void loop(){  
}

Да, прошу прощения.Не работает.Я подумал, что проблема в этом, но как раз прочитал о том, что программа продолжает работать после предупреждения.
По какой-то причине в Мониторе порта пишет "SD fail", хотя модуль SD-карты подключен правильно(отдельно проверил с помощью CardInfo)/

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

У авторов стандартов С и С++ есть некие тараканы в голове, по поводу совместимости процедурного и объектного языка.

Если таки предупреждения не нравятся из чисто эстетических соображений, то они лечатся ЯВНЫМ преобразованием типа:

вместо:

your_func("1.wav");

нужно писать:

your_func((char *)"1.wav"); 

 

Octodoctor
Offline
Зарегистрирован: 04.02.2017

Спасибо за исправление, теперь это не будет мозолить глаза.Однако ж проблема с "SD fail" остаётся.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Гоняй другие примеры из библиотеки. Не используй пин 13, замени его. Ну уж не знаю, что тебе еще предложить.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ну и карточку аккуратно отформатируй, драйвер капризен. Тут, на форуме, уже поднималась эта тема.

Octodoctor
Offline
Зарегистрирован: 04.02.2017

Каким образом можно заменить 13 пин для примеров?У них ведь в инструкции сказано использовать его.
 ** CLK - pin 13

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Да, не получится для хардварного SPI. Эт я загнул.

Octodoctor
Offline
Зарегистрирован: 04.02.2017

Вся проблема в SD.begin().Карта просто не инициализируется.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

там вызывется три инициализации внутри библиотеки:

1. карта

2. том

3. корневая директория.

--------------------

поставь туда отдельные принты, поймешь, кто из этих трех не срабатывает.

Octodoctor
Offline
Зарегистрирован: 04.02.2017
boolean SDClass::begin(uint8_t csPin) {
  /*
 
    Performs the initialisation required by the sdfatlib library.
 
    Return true if initialization succeeds, false otherwise.
 
   */
  return card.init(SPI_HALF_SPEED, csPin) &&
         volume.init(card) &&
         root.openRoot(volume);
}
Собственно, отсюда взял по-очереди card.init, volume.init и root.openRoot.
Последние две вернули false.
Sergeyevd
Sergeyevd аватар
Offline
Зарегистрирован: 25.03.2014

Здравствуйте. Собрал устройство по схеме:

Откуда берётся свист?

https://www.youtube.com/watch?v=6hRN98XPAD4

 

Sergeyevd
Sergeyevd аватар
Offline
Зарегистрирован: 25.03.2014

Вход усилителя через резистор на минус не спасает ситуацию.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Разведите землю от одного источника, но раздельно на цифровую чпсать схемы и на усилитель. Т.е от источника провод к цифровой земле с фильтрующим конденсатором и от того же источника к аналоговой тоже с фильтрующим конденсатором. Еще раз земля от БП идет раздельно на цифровую часть и на аналоговую и на каждую со своим фильтром. Конденсаторы, например по 100uF

Посмотрите вот эту статью. Вы сделали как на рисунке 2, а надо, как на рисунке 3.

vvadim
Offline
Зарегистрирован: 23.05.2012

ЕвгенийП пишет:

Разведите землю от одного источника, но раздельно на цифровую чпсать схемы и на усилитель. Т.е от источника провод к цифровой земле с фильтрующим конденсатором и от того же источника к аналоговой тоже с фильтрующим конденсатором. Еще раз земля от БП идет раздельно на цифровую часть и на аналоговую и на каждую со своим фильтром. Конденсаторы, например по 100uF

Посмотрите вот эту статью. Вы сделали как на рисунке 2, а надо, как на рисунке 3.

полезная статейка, спасибо...

Sergeyevd
Sergeyevd аватар
Offline
Зарегистрирован: 25.03.2014

ЕвгенийП, за статью большое спасибо.

Но разводка питания результата не принесла.

Поключив динамик к 9 выходу ардуино и минусу (без усилителя) слышится писк.

Sergeyevd
Sergeyevd аватар
Offline
Зарегистрирован: 25.03.2014

Без усилителя писк на расстоянии не слышно, но, и музыки тоже(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Sergeyevd пишет:

Поключив динамик к 9 выходу ардуино и минусу (без усилителя) слышится писк.

Не понял, что значит к ардуино, Вы что его не с прогирыватель слушаете? Я думал, Вы динамик к модулю проигрывателя подключаете.

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

Sergeyevd
Sergeyevd аватар
Offline
Зарегистрирован: 25.03.2014

Вот так поключал, на питание ставил 10мкФ  16 В

Что значит проигрывателя? Это же модуль для работы с SD картами

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, в общем, я конденсаторов на схеме не вижу. Надеюсь, Вы правильно делали. Если так и не помогло, то берите осциллограф и смотрите что там за писк. Узнайте его частоту и постарайтесь понять кто его издаёт: модуль, ардуина, истоник питания ...  а там уже будем думать как устранять (меня, например, как-то задолбала писком MAX7219 - она крутит свои 8кГц, землю просаживает, а усилитель это честно усиливает - вот и пищало).

renoshnik
Offline
Зарегистрирован: 11.04.2013

10 мкФ параллельно входу УНЧ...

Sergeyevd
Sergeyevd аватар
Offline
Зарегистрирован: 25.03.2014

Конденсатор на входе УНЧ помог. Спасибо.

Sergeyevd
Sergeyevd аватар
Offline
Зарегистрирован: 25.03.2014

Звук получился чисты, но негромкий.

Вопрос по поводу усилителя.

Посмотрел схему оповещателя сигнализации, усилитель  собран на 6 транзисторах.

Усиливается сигнал который идёт от микросхемы HT2860 (DIP 16) с 11 и 12 пина (Инвертирующий выход и неинвертирующий выход)

Хочу к этому усилителю подключить свой мсточник звука, правильно ли я подключаю?