Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

STM32L4, SDIO czy SPI karta SD + klawiatura 3x4

...KUBA... 29 Jun 2017 20:36 1476 7
  • #1
    ...KUBA...
    Level 25  
    Witam, chcę zrobić urządzenie które będzie miało niski pobór prądu bo chcę, żeby było zasilane z baterii(prócz klawiatury i karty SD chcę podłączyć jeszcze mały wyświetlacz i transmiter RF). Chciałem na razie uruchomić to na bibliotekach HAL.. Dla próby mam Nucleo z uC STM32L452RE. Zdecydowałem się na niego, bo ma port SDIO, przez który chciałem podłączyć kartę SD, i stąd teraz pytanie czy jest jakaś znaczna różnica w poborze prądu między podłączeniem karty SD przez SPI a SDIO? SPI ma pin Chip select (CS) którym wydaje mi się, że mógłbym usypiać kartę, a w SDIO nie wiem czy istnieje taka możliwość, czy trzeba byłoby odcinać zasilanie, chyba, że bez wykonywania operacji na karcie nie pobiera ona za wiele prądu.

    Druga sprawa to klawiatura matrycowa 3x4, czy żeby zaoszczędzić pobór prądu korzystać z klawiatury matrycowej? Na razie nie myślę o usypianiu uC;/ Czy mniej energochłonne byłoby podłączenie 12 przycisków osobno do portów uC? i próbowałem obsłużyć klawiaturę matrycową za pomocą HAL w funkcji callback dla zewnętrznych przerwań "HAL_GPIO_EXTI_Callback" i w przypadku wystąpienia tego przerwania zmienić kolejno stany na sygnałach wyjściowych na klawiaturę, i zobaczyć na którą linię zareaguje, ale to chyba zła droga tym bardziej, że jak użyję funkcji HAL_Delay(1000); w callbaku przerwania to zawiesza mi przerwanie;/ Czytałem żeby wykorzystać do tego timer, ale nie wiem czy tylko do odliczania czasu na wykrywanie drgania styków, czy też do multipleksowania pinów wyjściowych na klawiaturę?

    Proszę o pomoc, bo utknąłem w tym miejscu z projektem.
  • #2
    User removed account
    User removed account  
  • #3
    ...KUBA...
    Level 25  
    Zrezygnowałem z "obsługi klawiatury" w przerwaniu i robię to w głównej pętli programu ale do eliminacji drgań styku korzystam jeszcze z HAL_Delay(20), to chyba tutaj jest miejsce na wykorzystanie timera?? Bo nie wiem jak inaczej można byłoby zastosować timer do obsługi odczytu klawiatury?

    Co do karty SD, skorzystałem z interfejsu SDIO i middleware FatFs, próbowałem zapisać coś na karcie SDHC 16GB ale dostaje błąd FR_DISK_ERR i pytanie czy FatFs w podstawowej konfiguracji wygenerowanej w CubeMX potrafi obsłużyć kartę SDHC?
  • #4
    trol.six
    Level 31  
    ...KUBA... wrote:
    Bo nie wiem jak inaczej można byłoby zastosować timer do obsługi odczytu klawiatury?

    Można na przeróżne sposoby ;) Może te tematy cię natchną : (UWAGA nie wszystkie kody są właściwe, ale chodzi o idee):
    https://www.elektroda.pl/rtvforum/topic3353777.html
    https://www.elektroda.pl/rtvforum/topic3355789.html
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=16547897#16547897

    Jak masz problem konkretny, to polecam założyć konkretny temat, wielotematyczność i tematy ogólne mają słabsze wsparcie.
  • #5
    BlueDraco
    MCUs specialist
    Zawsze mnie dziwiło, jak można wpaść na pomysł, by sprawdzać stan klawiszy inaczej, niż w przerwaniu timera.
    Poodbno chodzi Ci o oszczędność energii. Jeśli faktycznie o to chodzi, to dwie zasady:
    - żadnej "pętli głównej"
    - usypiaj procesor na końcu main, po włączeniu SleepOnExit.

    Ponadto odcinanie zasilania karty SD zawsze jest pożyteczne.
  • #6
    trol.six
    Level 31  
    BlueDraco wrote:
    Zawsze mnie dziwiło, jak można wpaść na pomysł, by sprawdzać stan klawiszy inaczej, niż w przerwaniu timera.

    Akurat tego procka nie znam, ale ogólnie, w trybach głębokiego uśpienia mogą nie działać timerki, a nawet jak działają, to w ramach oszczędności się je wyłącza.

    Przeważnie zawsze jest jakiś watch-dog który też może budzić. Ale znowu jak wygląda częstość wybudzania?

    Więc można podłączyć wtedy przyciski pod przerwanie zewnętrzne. :)
  • #7
    BlueDraco
    MCUs specialist
    Od każdej reguły są wyjątki. D wybudzania z głębokiego uśpienia możesz użyć przerwań od przycisków, tylko wtedy musisz również użyć przerwania timera i obsługa przycisków z 2 linii na pojedynczy przycisk rośnie do jakichś15..20. Masz też timer LPTIM, pracujący w trybach głębokiegu uśpienia - do testowania przycisków wystarczy jakieś 20 Hz.
  • #8
    ...KUBA...
    Level 25  
    Chciałbym w jakiś sposób przechodzić w tryb uśpienia, ale potrzebuję też odmierzania czasu z dokładnością do 1ms, i inaczej niż pobieranie SysTick z taką częstotliwością nie potrafię tego rozwiązać, tym bardziej, że chciałbym, żeby drugi stm32 podłączony do tego poprzez moduł RF (na SPI) też tak samo odliczał czas, próbowałem na RTC, ale tam jest dokładność rzędu 1s.. Dlatego zastanawiałem się, nad obsługą klawiatury w głównej pętli, ale jak dałoby się przenieść odmierzanie potrzebnego mi czasu na timer i tak samo obsługę klawiatury. byłoby naprawdę super.