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



Teraz jest 28 mar 2024, o 21:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 11 maja 2013, o 14:05 
Offline
Użytkownik

Dołączył(a): 02 lut 2013
Posty: 75
Pomógł: 0

Witam

Zakupiłem ultradźwiękowy miernik odległości HC-SR04, napisałem program lecz niezbyt dokładny jest pomiar odległości.

Składnia: [ Pobierz ] [ Ukryj ]
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
?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2013, o 15:16 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

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

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2013, o 15:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

gdzieś już pisałem o tym na forum poszukajcie , całkiem fajnie chodzą i tańsze od pololu

Obrazek

brak dokładności na małych odległościach wynika z nakładania się echa na nowy pomiar

topic2655.html

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2013, o 15:35 
Offline
Użytkownik

Dołączył(a): 12 paź 2012
Posty: 207
Lokalizacja: Rzeszów
Pomógł: 16

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:
Składnia: [ Pobierz ] [ Ukryj ]
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.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2013, o 15:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2012
Posty: 174
Lokalizacja: Gliwice
Pomógł: 19

Pod tym linkiem masz fajnie działający krótki kod. http://www.elektroda.pl/rtvforum/topic2443109.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2013, o 21:55 
Offline
Użytkownik

Dołączył(a): 18 paź 2012
Posty: 244
Pomógł: 2

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 08:30 
Offline
Użytkownik

Dołączył(a): 02 lut 2013
Posty: 75
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 maja 2013, o 09:21 
Offline
Użytkownik

Dołączył(a): 12 paź 2012
Posty: 207
Lokalizacja: Rzeszów
Pomógł: 16

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.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 gru 2013, o 23:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

W sumie sporo przydatnych softów. O rezultacie napiszę jutro.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 gru 2017, o 20:23 
Offline
Użytkownik

Dołączył(a): 09 lis 2014
Posty: 78
Pomógł: 0

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

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



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: 10 ] 

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO