logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

STM32 [Keil] - Jak zintegrować ADC1 i zapis na SD z użyciem FATFS?

Dawid Piesak 25 Lis 2011 23:09 2508 5
REKLAMA
  • #1 10183055
    Dawid Piesak
    Poziom 2  
    Posty: 3
    Witam, chciałbym stworzyć prosty układ pomiarowy, który by miał za zadanie pobrać w krótkim czasie sporą liczbę pomiarów (np 1000 pomiarów w ciągu sekundy przy 12 bitowym przetworniku adc) i jednocześnie zapisać te pomiary na kartę sd ( system plików fatfs ) po to aby móc swobodnie w dłuższym czasie przesłać otrzymane dane poprzez port rs232 na PC . Opieram się na przykładach z książki Pana Paprockiego " Mikrokontrolery STM32 w praktyce" oraz układzie zl27arm . Sam prosty przykładowy program obsługujący zapis i odczyt z karty sd już napisałem. Następnie bez problemu dołożyłem do tego programu obsługę portu rs232. Lecz niestety nie poszło tak z górki gdy próbowałem dołączyć choćby najprostszą obsługę adc1 (pin pc4). Proszę o jakieś przykłady programów na stm32 [keil] gdzie dzałałyby sd (na fatfs) oraz adc . (wkrótce dożucę swój program )
  • REKLAMA
  • REKLAMA
  • #3 10184911
    Dawid Piesak
    Poziom 2  
    Posty: 3
    Przepraszam , że nie dokończyłem wczoraj ale przysnołem. Nie poszło tak prosto bo nie otrzymuje zapisu na kartę , cały program kompiluje się mi w porządku tzn otrzymuje hex -a, zadaniem poniżej przedstawionego programu jest tylko odczyt jednej wartości z wejścia adc1 oraz zapisanie jej na karcie do pliku o nazwie plik, poniżej przedstawiam listing z programu main :
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 10185169
    nibbit
    Poziom 20  
    Posty: 270
    Pomógł: 40
    Ocena: 4
    Ok, tylko że w tym co pokazałeś nie ma nic co odpowiada za init karty, SPI/SDIO i RCC do SPI/SDIO. Wróżki to nie na tym forum.
  • REKLAMA
  • #5 10185225
    Jado_one
    Poziom 22  
    Posty: 650
    Pomógł: 43
    Ocena: 12
    Napisanie programu, a uruchomienie go to nie to samo :-)
    Teraz dopiero zaczyna się właściwa "zabawa"...

    Kilka pytań pomocniczych: Jakie elementy tego programu działają? Sprawdzałeś, że działa zapis na kartę, przesyłanie przez UART'a?
    Masz jakąś możliwość wyprowadzenia danych z wnętrza mikrokontrolera np. poprzez UART'a do komputera PC, wyświetlacz, diody LED/whatever? - tak żeby móc sobie podejrzeć jakieś dane z wnętrza mikrokontrolera? A może poprzez debuger?

    Musisz oprzeć się na jakiś pewnikach, które działąją w Twoim programie, a potem stopniowo dokładać następne elementy i patrzeć "czy wszystko nadal działa".

    Ja zacząłbym od sprawdzenia RS'a i użycia go jako monitora danych z wnętrza mikrokontrolera, potem przetestował działanie FatFs - wpisując na początek jakąś stałą liczbę i sprawdzając czy dobrze się zapisuje, itp....a potem przetestował działanie ADC - wyrzucając liczbę z pomiaru A/C poprzez RS'a do PC....

    Może się również tak zdarzyć, że mimo oddzielnego dobrego działania poszczególnych fragmentów kodu - całość złożona "do kupy" nie bedzie chciała dobrze działać.
    To może oznaczać, że fragmenty te zakłócają się wzajemnie np. blokując dostęp do procesora - "zawisajac" zbyt długo w którymś fragmencie (tzw. martwe pętle oczekiwania).
  • #6 10185578
    Dawid Piesak
    Poziom 2  
    Posty: 3
    Co do rady abym zaczął od małych kroczków , to akurat robię łącząc jeden odczyt z adc i zapis do karty (Póki co Rs'a - bedzie to następny etap).Wyświetlacz mam ale on pracuje na drugim spi i na wszelki wypadek nie używam , z diodami to pomyśle, natomiast debuger jest mi obcy ( mam programator zl30prg i niepełnego keila ) Co do kolejności rozbudowywania programu to niedługo będę chciał napisać program łączący adc z rs232.

    W przykładzie z którego korzystam za wszelkie zadania związane z obsługą zapisu i odczytu (po spi) danych z karty odpowiedzialne są funkcje znajdujące się w pliku sd_stm32.c
    Kod: text
    Zaloguj się, aby zobaczyć kod


    W listingu powyżej są funkcje które zostały dopisane (nie przeze mnie) jest to funkcja :
    rcvr_spi() - odpowiada za odbieranie danych z kontrolera magistrali SPI
    xmit_spi()- wysyła bajty przez spi do karty pamięci
    Select() i Deselect() - sterowanie sygnałem wyboru układu CS


    Kod: text
    Zaloguj się, aby zobaczyć kod


    Kod: text
    Zaloguj się, aby zobaczyć kod


    Istnieje jeszcze funkcja wait_ready() która służy do sprawdzania zajętości karty (jej zadaniem jest oczekiwanie przez 500ms aż odebrany bajt będzie miał wartość 0xff) jeśli to nie nastąpi to funkcja kończy swoje działanie zwracając ostatnią wartość odczytaną z spi
    Kod: text
    Zaloguj się, aby zobaczyć kod


    za konfiguracje kontrolera SPI portów wejścia/ wyjścia i ich sygnałów zegarowych odpowiada funkcja power_on()
    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA