Skocz do zawartości

[STM32] HC-SR04


paweleh

Pomocna odpowiedź

Ponieważ brakuje mi tutaj ustawiania explicite pewnych pól, czy możesz wypisać zawartość rejestrów CCMR1, CCMR2, CCER takie, jakie zostają po zakończeniu inicjalizacji? Może dla pewności jeszcze CR1, CR2 i SMCR.

Aby odróżnić sytuację w której do rejestru CCRx wpisuje się zero od tej w której dany kanał Input Capture nie działa, w obsłudze przerwania możesz sprawdzać stan bitów CC1IFi CC2IF w rejestrze SR (przed odczytem CCRx, bo to je kasuje). Jeśli oba są ustawione to znaczy, że w obu rejestrach CCRx jest coś sensownego.

Czy impuls z czujnika na pewno się pojawia? Może jest tam cały czas stan 1? Jak wyglądają odczyty z CCR2? Czy wyglądają na losowe (to dobrze) czy raczej oscylują wokół podobnych wartości?

Link do komentarza
Share on other sites

Wartości zaraz po inicjacji:

CCMR1 - 258
CCMR2 - 0
CCER - 2
CR1 - 0
CR2 - 0
SMCR - 0

Odczyty wyglądają tak: Co pewien okres stopniowo zmieniają się idąc w dół bardzo losowo.

Przykładowy odczyt:

CCR2: 7282  ## CCR1:0 ...;
CCR2: 56124 ## CCR1: 0 ...;
CCR2: 36768 ## CCR1: 0 ...;
CCR2: 30693 ## CCR1: 0 ...;
CCR2: 14062 ## CCR1: 0 ...;
CCR2: 60268 ## CCR1: 0 ...;
CCR2: 46233 ## CCR1: 0 ...;
CCR2: 26927 ## CCR1: 0 ...;

(... - oznacza, że dane zostały powtorzone jeszcze z 50razy)

CC1IF i CC2IF występują w pierwszym i drugim bicie SR, jak odczytać ich wartości?

Z bibliotek HALa nie mogę się do nich dostać bezpośrednio :/

Natomiast wartość rejestru samego SR przed odczytem CCR1 i CCR2 to 25 i to zawsze.

Teraz to dla mnie kompletna abstrakcja 🙁

Link do komentarza
Share on other sites

Dobra, nie wiem jak są podefiniowane stałe w tych bibliotekach i co robią funkcje, ale po prostu czytam opisy rejestrów timera w Reference Manual i spodziewam się pewnych wartości jeśli timer ma robić to co zaplanowałeś. No i coś mi nie pasuje.

Weźmy dla przykładu CCMR1 - ten ustawia filtry, prescalery zdarzeń i co najważniejsze podłącza wejścia timera do kanałów Input Capture 1 i 2. Tak więc jeśli chcesz by oba kanały odpalały się z TI1 to moim zdaniem powinno być CC2S = 10 a CC1S = 01 (wartości binarne). Natomiast Twój odczyt 258 to binarnie 0000 0001 0000 0010 czyli.. odwrotnie. Wg tego oba kanały są zmapowane na wejście TI2.

Dalej, CCER - rejestr odpowiadający za polaryzację triggerów (czyli kierunek wykrywanych zboczy) oraz za globalne załączanie pracy kanałów Input Capture powinien mieć kanały 1-2 włączone przy czym jeden z nich z odwrotną polaryzacją. Za to odpowiadają bity CCxE (załączanie) i CCxP (polaryzacja). Spodziewałbym się zatem wartości 0000 0000 0001 0011, gdzie oba bity CC2E i CC1E powinny być ustawione. Odczytana przez Ciebie wartość 2 to ustawiony zaledwie bit CC1P (czyli OK, jeden kanał ma odwróconą polaryzację czyli kierunek zbocza), ale w takim razie gdzie i kiedy następuje włączenie kanałów?

Albo coś tu jest grubo nie tak i kompletnie tego nie rozumiem albo te biblioteki są niewiele warte. Może spróbuj "na piechotę" wyznaczyć wartości rejestrów, powpisuj do nich bezpośrednio co trzeba (tak jak czytasz wprost np. z CCR1) i zobacz, czy coś zaczyna działać. Te timery są naprawdę fajne i działają bez pudła a Ty masz jakieś kosmiczne problemy chyba jednak z warstwą abstrakcji oddzielającą Cię od sprzętu. Oczywiście metoda bezpośredniego dostępu do rejestrów nie jest polecana, bo kod nie jest przenośny itd, ale może w tej sytuacji rasowi programiści wybaczą..

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.