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



Teraz jest 20 kwi 2024, o 12:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 27 ] 
Autor Wiadomość
PostNapisane: 25 mar 2013, o 12:30 
Offline
Nowy

Dołączył(a): 25 mar 2013
Posty: 20
Pomógł: 0

Witam, potrzebuje zmierzyć odległość za pomocą czujnika ultradźwiękowego HC-SR04, wiem, że żeby to zrobić trzeba pierw dać impuls o długości 10uS na pin Trig a następnie czujnik poda nam impuls na pinie Echo którego długość po podzieleniu przez 58 daje nam odległość w cm .(nota - http://www.arduino.com.pl/wp-content/up ... C-SR04.pdf)Problemem jest to, że nie wiem jak zmierzyć czas tego impulsu . Znalazłem nawet kod na Arduino, czy mógłby ktoś przetłumaczyć i wytłumaczyć mi go na C do użycia na AVR najlepiej Atmega 8/16 ale jeśli nie będzie to możliwe mogę użyć innego . Z góry dziękuje . Pozdrawiam .


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



Ps: z obsługą LCD sobie poradzę chodzi tylko o fragment zliczający czas impulsu.

Kody umieszczamy w znacznikach syntax =c -- SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 12:44 

Pomógł: 0

Zobacz to Zobacz tu https://github.com/arduino/Arduino/blob ... ng_pulse.c :)



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 12:55 
Offline
Użytkownik
Avatar użytkownika

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

nie arduino , a na C by chciał zaraz machnę koda bo akurat mam parę HC-SR04 tylko poczekaj

------------------------ [ Dodano po: 50 minutach ]

nio i masz ....

mam nadzieję że jasno i klarownie opisałem ....

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


Pobaw się ...

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 18:56 
Offline
Nowy

Dołączył(a): 21 sty 2013
Posty: 14
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:02 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Moge przy okazji pytanie? Jak dokladnosc tego HC-SR04, bo cena na znanymportaluaukcyjnym.pl calkiem ciekawa?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:09 
Offline
Użytkownik
Avatar użytkownika

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

może być do mini sumo i takich tam sie nadaje , max wydusiłem ok 230cm z dokładnością do ~1mm
na małych dystansach jest bardzo dobry czyli tak do 50-60cm

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:09 
Offline
Nowy

Dołączył(a): 21 sty 2013
Posty: 14
Pomógł: 0

mi działa do około 3 i pól metra, pewnie da się wycisnąć trochę więcej. Zauważyłem też że pomiar bardzo zależy od kąta pod którym ustawiony jest przedmiot oraz ze względu na dosyć spory kąt pomiarowy dane mogą być niedokładne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:14 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Calkiem calkiem jak za swoja cene. A jakbym chcial cos lepszego, to czego szukac?



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

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

dokładnie tak jest , pololu są lepsze , ale cenowo tez wiadomo :)

na dużych odległościach ważne i może nawet krytyczne są czasy oraz kompensacja "starego" echa , co uwzględniłem w kodzie
dzięki czemu można bardzo dokładnie (jak na niego) mierzyć odległość -- chodzi o to by przy nowym pomiarze .. czasem stare echo nie wpadło bo zafałszuje wynik :) zresztą masz to w kodzie :)

------------------------ [ Dodano po: kilkunastu sekundach ]

charsz http://www.pololu.com/catalog/product/1605

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:22 
Offline
Nowy

Dołączył(a): 25 mar 2013
Posty: 20
Pomógł: 0

Wielkie dzięki niedługo zamówię ten czujnik i przetestuje waszymi programami :) Jeszcze raz dziękuje za poświęcony mi czas . Pozdrawiam .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:29 
Offline
Nowy

Dołączył(a): 21 sty 2013
Posty: 14
Pomógł: 0

no faktycznie, może są lepsze, ale 11-13zł to nie to samo co 29,99 $ :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:34 
Offline
Użytkownik
Avatar użytkownika

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

ot własnie :)

ale powiem ci swierku że jak odpowiednio zadbasz o kompensację echa , to chodzą tak samo praktycznie tyle , ze w paralaxie
masz gotowy sygnał a tu musisz zadbać o wszystko

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:44 
Offline
Nowy

Dołączył(a): 21 sty 2013
Posty: 14
Pomógł: 0

jak tylko rozkminię Twój kod SunRiver to pewnie zmodyfikuję swój. Moje doświadczenia opieram na prymitywnych w porównaniu do Twoich rozwiązaniach, ale fajnie, bo za bardzo w necie ludzie nie bawią się tym pod C więc ciężko o dobre rozwiązanie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:49 
Offline
Użytkownik
Avatar użytkownika

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

oj tak jakoś wyszło :)
nic wielkiego

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 19:53 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

Dzieki Sun!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 20:41 
Offline
Użytkownik

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

Sun, ja obsługuje ten czujnik tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Uruchamiam czujnik co 50ms, i co jakiś czas wyrzuca mi błąd (tj. wyrzuca mi liczbę w ogóle wziętą z kosmosu lub zbyt małą), ja to skompensowałem tym ERR (pętla if...else), no ale nie wiem czy to wina czujnika (zbyt często go uruchamiam) czy wina kodu, jak uważasz?

Druga sprawa to to, jak Ty kompensujesz echo? Przecież na wyjściu (ECHO) mamy tylko stan wysoki, a uaktywniamy 10uS na TRIG. Więc gdzie tu jest pola do manewrowania do kompensacji? :D



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

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

To proste .... czytam rzadziej i czekam ze startem nowego pomiaru aż mam ciszę na Echu :)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 21:50 
Offline
Użytkownik

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

aa no tak, najprostsze rozwiązania zawsze najlepsze :)

Ogólnie mnie zdenerwowałeś :D Myślałem ze już nawet nawet ogarniam ten C, popatrzyłem się na Twój kod - i stwierdziłem że jeszcze dużo nauki przede mną :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 22:05 
Offline
Użytkownik
Avatar użytkownika

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

przepraszam .... obiecuję, że to było przedostatni raz :P

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 22:20 
Offline
Nowy

Dołączył(a): 21 sty 2013
Posty: 14
Pomógł: 0

kiclaw, miałem to samo, myślałem ze coś tam ogarniam a teraz zwątpiłem w siebie... :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 17:31 
Offline
Nowy

Dołączył(a): 25 mar 2013
Posty: 20
Pomógł: 0

Pojawił się problem z twoim programem SunRiver mianowicie po skompilowaniu w bibliotece lcd z książki Mikrokontrolery AVR język c podstawy programowania w pliku lcd44780.h podkreśla mi 4 linijki na czerwono .
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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

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



Z góry dziękuje za pomoc . Pozdrawiam .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 18:23 
Offline
Użytkownik
Avatar użytkownika

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

widzisz uzywałem sobie bezszczelnie innej biblioteki :(

ale możesz spokojnie przepisać do nowego pliku

jak widzisz kompilator wrzeszczy o braki ")" gdzieś ci musiał może wylecieć ??

i kilka pomniejszych w main :)

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2013, o 10:17 
Offline
Użytkownik

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

Witam,
Mam takie pytanko do kodu Sun'a
A mianowicie, że w kodzie nigdzie nie jest uważna wartość INSTR_PER_US. Więc wartość
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
odległości nie uwzględnia w ogóle częstotliwości taktowana - działa tylko dla 1MHz. Mylę się czy mam rację ?:)
pozdrawiam.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2014, o 16:37 
Offline
Użytkownik

Dołączył(a): 25 sty 2014
Posty: 185
Lokalizacja: Działoszyn
Zbananowany użytkownik

Pomógł: 8

SunRiver napisał(a):
result = (timerCounter * 256 + TCNT0) / 58;


mógbyś wytłumaczyc co w tej lini robsz dlaczego * 256 i pozniej jest dodawane tcnto ??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2015, o 11:56 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 59
Lokalizacja: Lubliniec
Pomógł: 3

karolek napisał(a):
SunRiver napisał(a):
result = (timerCounter * 256 + TCNT0) / 58;


mógbyś wytłumaczyc co w tej lini robsz dlaczego * 256 i pozniej jest dodawane tcnto ??



Sun też tego nie łapie jakbyś mógł wytłumaczyć o co chodzi. Może napiszę jak ja to rozumiem bo tutaj okaże się czy dobrze załapałem timery również no więc;)

1. Procesor masz taktowany Fcpu = 16 Mhz
2. Timer 0 ustawiasz następująco :
- brak preskalera
- wartość początkowa rejestru TCNT0 = 0
- odblokowanie przerwania od przepełnienia
3. No więc w momencie wykrycia zbocza narastającego na INT1 rozpoczynamy pomiar poprzez wyzerowanie rejestru TCNT0 oraz licznika programowego timerCounter. NO I TERAZ zasadnicze pytanie czy dobrze myślę, skoro procesor jest taktowany 16MHz -> preskaler 1 -> czyli sygnał wchodzący do timera ma częstotliwość 16Mhz co jest równe T = 1/F = 62,5 us (czas jednego impulsu) -> skoro timer działa w trybie zwykłym to zlicza do 255 co powoduje, że na wyjściu dostajemy sygnał z częstotliwością 16Mhz/256 lub 62,5[us]*256 czyli 62,5kHz lub 16ms
4. Czyli programowy timer timerCounter zwiększa się o 1 co 16 ms tak?
5. Jeśli tak to dlaczego taki wzór?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 mar 2015, o 19:10 
Offline
Nowy

Dołączył(a): 21 lut 2015
Posty: 2
Pomógł: 0

Witam.
Wzorując się na tym temacie napisałem swoją wersję kodu do obsługi tego czujnika. Działa on w miarę dobrze na tym kodzie lecz czasami zdarzają się dosyć spore przekłamania i nie wiem z czego one mogą wynikać. Nie chcę zakładać nowego tematu na forum żeby nie spamować.


Kod z Eclipsa:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 mar 2016, o 23:26 
Offline
Nowy

Dołączył(a): 29 lis 2015
Posty: 12
Lokalizacja: Lublin
Pomógł: 0

Jestem całkowicie początkującym adeptem programowania AVRów. Chcę wykonać drobny projekcik z zastosowaniem czujnika HC-SR04, więc zacząłem przeglądać forum, żeby zobaczyć, co mądrzejsi ode mnie na ten temat wymyślili i trafiłem na post kol. Miodek11. Co prawda jest sprzed roku, ale skoro nikt nie odpowiedział, postanowiłem to zrobić. W końcu kiedyś trzeba zacząć aktywnie uczestniczyć w forumowych dyskusjach. Wydaje mi się, że w kodzie kol. Miodek11 brakuje wyzerowania licznika TCNT1 na początku obsługi przerwania TIMER1_CAPT. Wobec tego pomiar rozpoczyna się przy przypadkowym stanie licznika. Jeśli podczas pomiaru nastąpi przepełnienie licznika, jako wynik otrzymamy całkiem przypadkową liczbę. Stąd te przekłamania.



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

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