ATNEL tech-forum https://forum.atnel.pl/ |
|
HC-SR04 i Atmega 32 https://forum.atnel.pl/topic3090.html |
Strona 1 z 1 |
Autor: | Badman [ 11 maja 2013, o 14:05 ] |
Tytuł: | HC-SR04 i Atmega 32 |
Witam Zakupiłem ultradźwiękowy miernik odległości HC-SR04, napisałem program lecz niezbyt dokładny jest pomiar odległości. język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Według dokumentacji zmierzony czas trwania stanu wysokiego powinien być podzielony przez 58, żeby otrzymać wynik w cm. Metodą prób i błędów doszedłem, że zmierzony czas muszę podzielić przez 10, aby wynik w cm był w miarę wiarygodny. Różnica w odległości sięga nieraz 10 cm dla odległości 186 cm. Czyli na wyświetlaczu mam 196 cm. Co jest przyczyną: 1. mój program, 2. wewnętrzny oscytalor atmegi ustwiony na 8 MHz ma znaczny rozrzut, 3. kiepsko skalibrowany uklad HC-SR04 ? |
Autor: | Janadamis [ 11 maja 2013, o 15:16 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
Ja też w zeszłym tygodniu kupiłem ten czujnik. Jeszcze nie zacząłem pisać programu ale wydaje mi się że lepiej jakby wykorzystać przerwanie od ICP. Tak jak są odbierane kody z pilota RC5 Po drugie po co w przerwaniu wyłączasz timer? ------------------------ [ Dodano po: 5 minutach ] I może przez ten _delay_ms(350); z pętli głównej program źle chodzi |
Autor: | SunRiver [ 11 maja 2013, o 15:25 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
gdzieś już pisałem o tym na forum poszukajcie , całkiem fajnie chodzą i tańsze od pololu brak dokładności na małych odległościach wynika z nakładania się echa na nowy pomiar topic2655.html |
Autor: | Lukasz89 [ 11 maja 2013, o 15:35 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
Janadamis napisał(a): Po drugie po co w przerwaniu wyłączasz timer? Dokładnie, nie ma takiej potrzeby, preskaler ustaw raz na początku zaś w przerwaniu rób coś innego: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Poza tym możesz ustawić kombinacje bitów ISC01:0 na 10 i wtedy przerwanie będzie występowało przy zmianie stanu - nie będzie potrzeby ciągłych zmian sposobu wyzwolenia przerwania w samym przerwaniu. Bo jeśli się nie mylę, to przy takim sposobie zmian w trakcie działania programu - przed każdą zmiana należy wyłączać przerwanie z tego źródła, następnie zmienić sposób wyzwalanie, skasować flagę przerwanie - która może się ustawić przy takiej zmianie, i na końcu aktywować przerwanie. |
Autor: | sz4t4n [ 11 maja 2013, o 15:57 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
Pod tym linkiem masz fajnie działający krótki kod. http://www.elektroda.pl/rtvforum/topic2443109.html |
Autor: | kiclaw [ 11 maja 2013, o 21:55 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
yhh ile ja to się nawalczyłem z tym HC-SR04 Oczywiście musisz wykorzystać przerwanie od ICP, wtedy preskaler ICP na 8 i potem w kodzie programu jeszcze na dwa, i wtedy masz pięknie podaną szerokość w mikrosekundach. (tylko że u mnie był kwarc 16MHz) To co piszesz o dzieleniu przez 10 jest błędne, wynik w mikrosekundach dzielisz przez 58 i wtedy wychodzi wynik w cm. Nie inaczej. Pozatym tak masz w nocie katalogowej. W kodzie który podał kolega wyżej ma nie być tego odejmowania 7 od zmiennej PulseWidth. |
Autor: | Badman [ 12 maja 2013, o 08:30 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
Lukasz89 napisał(a): Janadamis napisał(a): Po drugie po co w przerwaniu wyłączasz timer? Dokładnie, nie ma takiej potrzeby, preskaler ustaw raz na początku zaś w przerwaniu rób coś innego: Jeszcze nie sprawdziłem, ale jeżeli nie zatrzymam TIMER0 to zmienna licznik będzie się wciąż inicjować. Więc na jakiej podstawie ma być prawidłowo odczytany czas ? Cytuj: Poza tym możesz ustawić kombinacje bitów ISC01:0 na 10 i wtedy przerwanie będzie występowało przy zmianie stanu - nie będzie potrzeby ciągłych zmian sposobu wyzwolenia przerwania w samym przerwaniu. Bo jeśli się nie mylę, to przy takim sposobie zmian w trakcie działania programu - przed każdą zmiana należy wyłączać przerwanie z tego źródła, następnie zmienić sposób wyzwalanie, skasować flagę przerwanie - która może się ustawić przy takiej zmianie, i na końcu aktywować przerwanie. Zastosuje się do Twojej wskazówki, tyle że należy mieć pewność, że HC-SR04 na wyjściu echo nie wygeneruje "przypadkowej" zmiany stanu. |
Autor: | Lukasz89 [ 12 maja 2013, o 09:21 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
Inicjować czy inkrementować ? A no tak, to pod zerowaniem TCNT0 wyzeruj zmienną licznik. Co do przypadkowego stanu to raczej pojawić się nie powinno. Zerknij jak rozwiązał to SunRiver, link powyżej. |
Autor: | Paul Dirac [ 10 gru 2013, o 23:05 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
W sumie sporo przydatnych softów. O rezultacie napiszę jutro. |
Autor: | robo1973 [ 9 gru 2017, o 20:23 ] |
Tytuł: | Re: HC-SR04 i Atmega 32 |
W linku podanym przez kol sz4t4n jaki ma być preskaler dla taktowania 8MHz ? Czy coś jeszcze trzeba zmienić dla tego zegara bo jakieś dziwne wartości pokazuje wyświetlacz |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |