Obsluga rejestratora dzwieku ISD2560

Witam,

mam problem z prawidłową obsługą rejestratora dźwięku ISD2560, podłączonego do mikrokontrolera (Atmel Mega 32). Nagrałem tam kilkanaście komunikatów, da się je po kolei odtworzyć np. w trybie push button. Potrzebna jest mi jednak możliwość odtworzenia konkretnego komunikatu.

Układ ISD2560 działa z A4(M4)=A8=A9=1, A0(M0) sterowane przez mikrokontroler (ozn. Isd_m0), pozostałe Ax=0. Mikrokontroler steruje wejściami P/!R (ozn. Isd_pr), PD (ozn. Isd_pd), !CE (ozn. Isd_ce).

Według dokumentacji, ogólna idea odtworzenia n-tego komunikatu jest następująca:

- "przewijamy" pamięć na początek (impuls dodatni na PD)

- włączamy "przyspieszone odtwarzanie" (M0=1) przy !CE=1

- impulsujemy !CE (1->0->1) n-1 razy

- włączamy normalne odtwarzanie (M0=0)

- impulsujemy !CE jeden raz.

Niestety, efekty są przypadkowe... Odtwarzany (pseudo)losowy komunikat (tzn. nie ten, którego potrzebuję) albo w ogóle nic. Wstawiałem między instrukcje zmieniające stan linii różne opóźnienia i wpływało to (również "losowo") na wyniki. Jak to należy prawidłowo zrobić? Poniżej kod w Bascomie, z pominiętymi opóźnieniami (waitms 1 albo więcej po każdym przypisaniu) (oczywiście kod niedziałający).

Isd_pr = 1 Isd_pd = 0 Isd_pd = 1 Isd_pd = 0

For i = 2 To n Isd_m0 = 1 Isd_ce = 0 Isd_ce = 1 Next i

Isd_m0 = 0 Isd_ce = 0 Isd_ce = 1

Pozdrawiam P.

Reply to
Piotrne
Loading thread data ...

Piotrne pisze:

Witam,

prawdopodobnie przyśpieszone odtwarzanie, to nie jest natychmiastowy skok do końca komunikatu. Sprawdź, czy nie jest wymagane czekanie na EOM\ po każdym cyklu CE\, podczas adresowania.

Pozdrawiam, Mariusz Łacina

Reply to
Mariusz Łacina

Mariusz Łacina pisze:

To też sprawdzałem (czekanie na End Of Message) i nie wyszło dobrze (EOM miał stan niezgodny z moim oczekiwaniem...). Sprawdzę to jeszcze raz.

Doszukałem się informacji, że przyspieszenie jest 800-krotne. Jeśli jeden komunikat trwa ok. pół sekundy, to 1-milisekundowa pauza po impulsie CE powinna wystarczyć. Zresztą zwiększałem ją do 10 ms i więcej, efekt zawsze zły. Tzn. błędy są inne, chociaż przy danych opóźnieniach zawsze takie same.

Przypuszczam, że problemy biorą się z trochę dziwnego protokołu obsługi odtwarzania w trybie "przyciskowym". Pojedynczy impuls CE zaczyna odtwarzanie komunikatu aż do jego końca. Chyba, że podczas trwania komunikatu wyśle się jeszcze jeden impuls - wtedy robi się pauza. Jeśli nie ma kontroli nad odtwarzaniem (a w trybie "przyspieszonym" nie za bardzo ta kontrola działa), to nie wiadomo, czy kolejne impulsy CE inicjują kolejne komunikaty, czy też robią start - pauzę - start... Sądziłem, że odczekanie kilku milisekund po impulsie CE (w trybie przyspieszonym) rozwiąże problem, ale niestety nie. Zresztą gdyby konieczne były aż tak duże opóźnienia, rzędu kilkudziesięciu milisekund, to "przewinięcie" do wybranego komunikatu trwałoby trochę za długo (kilka sekund?) Sprawdzę jeszcze raz zachowanie wyjścia EOM.

Dziękuję i pozdrawiam Piotr

Reply to
Piotrne

Mariusz Łacina pisze:

Sprawdziłem to jeszcze raz - zaczęło działać! Rzeczywiście, przed kolejnym impulsem na CE\ trzeba poczekać na EOM\ = 0. To też jest tylko krótki impuls, o długości 12.5 milisekundy. Mam podłączone EOM\ do zwykłego wejścia (nie wyzwalającego przerwań) i muszę stan EOM\ odpytywać w pętli. Ale program nadąża i działa dobrze. Sprawdzę jeszcze, dlaczego nie wystarczało odczekanie po impulsie CE\ "wystarczająco długiego czasu", np. 50 ms (bez badania EOM\).

Po odtworzeniu komunikatu z normalną prędkością też należy odczekać na EOM\=0. Próba wcześniejszego odtworzenia innego komunikatu kończy się czasem ciszą.

Pozdrawiam Piotr

Reply to
Piotrne

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.