Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 15 sty 2025, o 06:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 14 cze 2014, o 13:38 
Offline
Nowy

Dołączył(a): 15 sty 2014
Posty: 11
Pomógł: 0

Witam,

Buduję rejestrator ADC z zapisem/odczytem na kartę SD.Układ oparty jest na procesorze Atmega 1284P. Taktowany jest zewnętrznym kwarcem 16MHz. Cały układ pracuje na napięciu 5V poza kartą SD (zasilanie 3.3V + 74LCV125D). Od strony elektronicznej-hardware'owej wszystko pracuje prawidłowo, problemem jest oprogramowanie.

Urządzenie składa się z wyświetlacza, potencjometrów (ADC), przycisków zrobionych na drabince rezystorów oraz podświetlania przycisków za pomocą diód led.
Wyświetlacz 4x40 i podświetlanie przycisków mam zrobione na 3 rejestrach przesuwnych. Dane wysyłam za pomocą sprzętowego SPI.

Tutaj pojawia się pierwszy problem, ponieważ na sprzętowym SPI mam również podłączoną kartę SD, na którą chciałbym zapisywać dane, jednak nie chcę aby przełączanie/wysyłanie/odbieranie danych pomiędzy poszczególnymi slavami powodowało zakłócenia w transmisji.
Na karcie SD chciałbym rejestrować sygnał z 5 kanałów ADC w krótkich odstępach czasowych( np. co 1ms – zależy mi na dokładności) i zapisywać je na karcie SD w formacie .csv. Później chciałbym te dane odtwarzać i sterować wypełnieniem wyjść PWM z taką samą prędkością jak zapis nie zakłócając tym samym pracy wyświetlacza, czy też podświetlania klawiszy.
Dodam, że układ bez zapisu na kartę SD działa całkiem dobrze, jednak jak próbuję z kartą sd to nic nie działa...

Jak skutecznie przełączać się pomiędzy kartą, a rejestrami przesuwnymi aby zachować płynność i funkcjonalność?

Udało mi się zainicjować bibliotekę FatFS od Elm-chana. Przetestowałem ją i działa mi zapis na kartę, jak również odtwarzanie na przykładzie ze strony elm-chana z konsolą po RS232.

Próbowałem również zapisywać dane z 5 kanałów ADC co 1s. W zapisywanym pliku kolumny to poszczególne kanały, a wiersze to wartości dla poszczególnych kanałów. W utworzonym pliku na karcie w formacie.csv zapisują się dane z kanałów ADC, ale nieregularnie co 10 lub co 20 pomiar występują jakieś błędy w zapisie. Nie mówiąc już o problemie w wyświetlaniu czy podświetlaniu klawiszy stąd próby wykonywałem bez obsługi wyświetlacza i podświetlania...
Jest tylko gorzej jak zwiększę próbkowanie na 1ms coraz większe błędy w zapisie.

Wiem, że konwersja sygnału analogowego na cyfrowy trwa, zapis sformowanego wiersza danych dla 5 kanałów na kartę SD w systemie FAT również zajmuję trochę czasu no i dodatkowo 3 rejestry przesuwne 74HC595 ( 3x8 bitów danych).

Jak to wszystko ze sobą skutecznie ożenić?
Głównym moim problemem jest to by obrać jakąś prawidłową drogę lub koncepcję aby to wszystko ze sobą pracowało prawidłowo.
Jak coś takiego zrealizować?
Co proponujecie?

Z góry dziękuję za wszystkie odpowiedzi.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 cze 2014, o 15:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Najpierw proponuję sprawdzić czy jest odpowiednie sterowanie sygnałem /CS karty - czy nie zmieniasz stanu gdzieś za wcześnie żeby operować na rejestrach.
Najlepiej będzie przenieść rejestry na oddzielne piny i oprogramować dla nich software SPI. Jeżeli karta ma zapisywać dane tak często to dobrze dać jej SPI sprzętowe na wyłączność.

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 cze 2014, o 16:19 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27345
Lokalizacja: Szczecin
Pomógł: 1041

Powodów tego co opisujesz może być MILION albo MILIARD przy takim ciut bardziej skomlikowanym projekcie - więc próba odpowiedzi na pytanie co może być nie tak po takim opisie to raczej próba zgadywania :( ...

Generalnie mogę cię zapewnić - o ile o to chodzi w tym pytaniu długim ... że zapis na kartę co 1ms to ślimacze tempo .... i to nie może być powodem problemów jakie opisujesz ....

ja w tym projekcie: http://atnel.pl/avr-wav-player-recorder.html a jak widzisz jest to nie tylko odtwarzacz muzyki z karty ale i recorder, zapisuję próbki dźwiękowe wprost do pliku WAV na karcie z częstotliwością próbkowania do 10 kHz i to dla dwóch kanałów (stereo) .... fakt czasem jakaś próbka się zgubi no ale dla 6-8 kHz ... żaden problem ... a przecież 6 kHz to zapis na kartę co 166 us !!! więc zobacz ile jeszcze masz zapasu ze swoim odstępem czasowym 1 ms ..... to tak jakby próbkowanie dźwięku miało u mnie 1 kHz

Owszem w momencie nagrywania czy odtwarzania ale już plików WAV nagranych na kompie z próbkowaniem 22 kHz (stereo) bo to daje się radę zrobić - ciężko już zmieścić się z wieloma innymi operacjami ... no ale takie które wykorzystują sprzętowe zasoby procka jak UART czy SPI, czy przerwanie ICP1 (u mnie to odbioru podczerwieni) ... można jakoś wcisnąć

więc znowu .... dla 1000 Hz .... tym bardziej ODCZYT z karty to totalny luzik

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lip 2014, o 15:55 
Offline
Nowy

Dołączył(a): 15 sty 2014
Posty: 11
Pomógł: 0

Poradziłem sobie z odpaleniem wszystkiego razem, działającym przełączaniem kanałów SPI, LCD przyciski itp.
Wszystko działa poza poprawnością zapisu z buforów na kartę.

Założenia jakimi się kierowałem:
Chciałbym zapisywać wartości poszczególnych kanałów adc w przerywaniach ADC do buforów. Gdy skończy się zapis danych z kanałów adc do bufora 1 rozpoczyna się zapis na kartę SD z bufora 1 i w trakcie zapisu na kartę wykonywany jest zapis wartości adc do bufora 2. Gdy skończy się zapis na kartę SD z bufora 1 następuje zapis na kartę z bufora 2 oraz zapis wartości z adc do bufora 1. No i tak w kółko dzięki ustawianiu odpowiednich flag o przepełnieniu bądź o zezwoleniu na zapełnianie się poszczególnych buforów.
W tym celu stworzyłem przykładową ramkę danych buforów o rozmiarze 512 w których zapisywane mają być wiersze/pomiary - (493 komórki) wyglądające w następujący sposób:

Obrazek

Aktualnie zapis działa jednak w taki sposób, że gdy kręcę potencjometrem wartości adc zmieniają się w zapisie co 17 wierszy (czyli co bufor) skokowo choć czasem zdarzy się zapis różnych wartrości w 17 pomiarach w buforze 1 lub 2 . Chciałbym uzyskać w poszczególnych wierszach bufora również wartości pomiędzy tymi skokami. Poniżej przykład zapisywanych danych obecnie:

Obrazek

ADC mam ustawione następująco:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Pomiędzy kanałami ADC przełączam się po przez funkcję switch(channel) w przerywaniach od ADC. Przełączanie i zapisywanie do zmiennych adc0,adc1,adc2...itd działa poprawnie.

Mam wrażenie, że przerywania (od ADC) za szybko zapełniają bufory.
Zależy mi na zapisie ok 1000 wierszy danych na sekundę lub więcej nie tracąc wartości pośrednich tak jak dzieje mi się teraz.

Proszę Was o odpowiedz na pytania:
Kiedy zapisywać dane do buforów i gdzie najlepiej to wykonywać czy w przerywaniach czy w pętli głównej?
Jeśli w przerywaniach to: Czy zapełnianie bufora 1 i 2 mam wykonywać w przerywaniach od ADC czy np od Timera?
Czy przetwornik ADC powinien być ustawiony w tryb Free Running Mode?(gdzieś na forach znalazłem taką podpowiedź)
Myślałem również nad buforami kołowymi i kolejkach FIFO....ale nie wiem czy w moim przypadku jest to konieczne.


Bardzo proszę o wskazówki i pomoc.
P.S.
Przeglądałem projekt Pana Mirka - Wav recordera i wiem, że prędkość z częstotliwością 1kHz jest jak najbardziej osiągalna.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO