[154] Obsługa kart SD
W poprzednim artykule odtwarzaliśmy sample, używając pamięci pokładowej Arduino. W przypadku emisji dźwięków ile by jej nie było, zawsze będzie za mało. Czas więc sięgnąć po najtańszy i jakże wygodny nośnik pamięci: karty SD. I tu mamy złą wiadomość: Arduino Uno R3 i pozostałe ośmiobitowe układy tej serii nie mają natywnego interfejsu współpracy z jakimikolwiek kartami pamięci jak również nie będą współpracować z pendrive’ami. Jeśli czegoś nie ma, to trzeba to zrobić, a więc w tym wypadku napisać. Powstało kilka bibliotek współpracy z kartami SD, gdyż takie są najbardziej popularne. Co prawda łatwiej dobrać się do kart CF, ale te już prawie wyginęły, a poza tym pracują z interfejsem równoległym, zjadającym sporo wyprowadzeń.

Karty SD rozmawiają ze światem w wielu narzeczach, w zależności od generacji. Jedyne sensowne do rozmów z ośmiobitowym mikroprocesorem będzie zarazem najstarszym – to protokół SPI, który w Arduino został zaimplementowany sprzętowo. Karty te odziedziczyły go jeszcze po wersji MultiMediaCard, prawie identycznych rozmiarami, ale nieco cieńszych i posiadających więcej wyprowadzeń.

Spójrzmy na szczegóły: karta taka potrzebuje trzech linii danych, czwartej – linii aktywacji oraz zasilania. Zatem podłączenie do Arduino będzie proste, lecz tylko o ile wybierzemy wersję pracującą z trzema woltami, bo w takim standardzie pracują karty. Problem w tym, że po pierwsze: Uno pracuje z pięcioma woltami, a po drugie: przy niższym napięciu nie pogonimy mikrokontrolera z pełną szybkością, a więc 16 MHz. A przy zadaniach audio każdy megaherc jest na wagę złota.

Na szczęście rozwiązanie problemu jest proste: wystarczy sześć rezystorów, które zabezpieczą kartę przed niebezpiecznym dla niej napięciem.

Coś takiego możemy sobie zlutować sami, używając nawet starego adaptera do kart w wersji micro albo też możemy kupić za kilka złotych i w tutaj dostaniemy nie tylko czytnik, ale i porządny konwerter napięć oraz zasilacz. Skoro o sprzęcie wiemy już wszystko, zmajstrujmy sobie odtwarzacz dźwięków.

Na początek – czytnik. Podłączamy go do wyprowadzeń: 11, 12, 13 i 4, przy czym tylko ten ostatni możemy sobie zmienić. Jak zwykle użyję płytki edukacyjnej TME, bo mam tam klawiaturkę, która mi się za chwilę przyda.
Wyjście audio także jest związane z jedyną parą PWM, która może hulać z wymaganą częstotliwością. Zatem na początek podłączmy mały głośnik – koniecznie przez kondensator kilkadziesiąt mikrofaradów – do pinu 9 i masy. Ja bym jeszcze wstawił w szereg rezystor 100 omów i to będzie wszystko. Choć – nie. Potrzebna jest jeszcze karta pamięci i pliki, które na nią wrzucimy. Prezentowany projekt współpracuje z kartami sformatowanymi w FAT16 albo FAT32. Ze względu na uproszczenia, wymaga się, by pliki tkwiły w głównym katalogu i trzymały się zasady DOS-a, czyli do ośmiu liter nazwy i do trzech rozszerzenia.
Autor biblioteki postawił na jakość audio kosztem uproszczeń współpracy z kartą, w związku z czym mamy jeszcze dwa ograniczenia: pliki nie mogą być pofragmentowane, ponieważ adres położenia ustala się tylko na początku odtwarzania, a potem czytanie leci zgodnie z licznikiem bajtów. Dlatego przed zabawą należy kartę sformatować w trybie pełnym, a następnie można tam dorzucać dowolną liczbę plików, niekoniecznie wszystkie od razu, ale nie należy niczego usuwać.

Jeśli chcemy usunąć zbędny nadmiar, znowu formatujemy kartę i wrzucamy wszystko, co nam będzie potrzebne. Mamy jeszcze jedno ograniczenie, które paradoksalnie zrobi nam świetną robotę, ale o tym za chwilę.
Kartę z zawartością znajdującą się w załączniku pierwszym wsadzamy do adaptera i uruchamiamy edytor.
#include <SimpleSDAudio.h> // Biblioteka odtwarzania sampli z karty SD.
void setup() {
SdPlay.init(SSDA_MODE_FULLRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER); // Inicjalizacja biblioteki.
SdPlay.setFile("mono.afm"); // Pobierz plik "mono.afm"
SdPlay.play(); // Odtwórz go.
}
void loop() {}Szkic będzie śmiesznie mały i ograniczy się do importu biblioteki SimpleSDAudio.h którą należy sobie wcześniej ściągnąć, jej inicjalizacji, importu pliku według nazwy, który znajduje się na karcie i włączenia odtwarzania. Jak widać, używamy biblioteki zawierającej zarówno obsługę karty SD jak i odtwarzania plików. Po skompilowaniu powinniśmy usłyszeć to, co znajdziemy w załączniku drugim. Skoro już wiemy, jak przechowywać dźwięki na karcie SD – czas na coś ambitniejszego. Ale o tym napiszę w kolejnym artykule.















































































































