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



Teraz jest 26 wrz 2018, o 15:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
 Tytuł: Czujnik HC-SR04
PostNapisane: 10 wrz 2018, o 10:48 
Offline
Nowy

Dołączył(a): 06 mar 2018
Posty: 24
Pomógł: 0

Witam.

Postanowiłem się zabrać za czujnik HC-SR04. Kod wygląda na chwilę obecną tak i coś źle mierzy czas w us i też źle przelicza na cm.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 11 wrz 2018, o 10:29 przez Pixelxx, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2018, o 17:06 
Offline
Użytkownik

Dołączył(a): 13 sty 2016
Posty: 270
Pomógł: 10

Jaki masz zegar mikrokontrolera? Timer liczy non stop więc może być potrzebne obsługa przerwań od przepełnienia, lub przynajmniej zerowanie TCNT1 po wysłaniu impulsu w funkcji hc_pomiar



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 wrz 2018, o 17:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 cze 2016
Posty: 247
Lokalizacja: Rybnik
Pomógł: 13

Zakładając że konfiguracja timera jest OK, radziłbym Ci zerowac TCNT1 w funkcji hc_pomiar() a w przerwaniu tylko przypisywać do EchoWidth TCNT1.


Do tego ten delay dać tuż po hc_pomiar()

_________________
Situs != Situs



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2018, o 05:28 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 379
Pomógł: 93

Pixelxx napisał(a):
#define HC_ECHO (1<<PD6)
#define ECHO_PORT PORTC
#define ECHO_DIR DDRC

Jaki typ mikrokontrolera i właściwie do którego pinu masz podłączony sygnał ECHO?
Próbowałem szukać mikrokontrolera z pinem ICP1 na szóstym pinie PORTC i jakoś nie mogłem znaleźć.

Pixelxx napisał(a):
coś źle mierzy czas w us

Mógłbyś sprecyzować, co to dokładnie oznacza?

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2018, o 09:53 
Offline
Nowy

Dołączył(a): 06 mar 2018
Posty: 24
Pomógł: 0

uC to Atmega32 i częstotliwość ma na 8Mhz i rezonator wewnętrzny.

Zle mierzy tzn pokazuje jakiś czas i jakąś odległość, ale na wysokość gdzieś 1m pokazuje 15cm
I ICP1 jest na PD6 w Atmega32


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2018, o 10:07 
Offline
Tech-support
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 698
Lokalizacja: Kraków
Pomógł: 60

Jak kolega wyżej zauważył, w programie echo port masz ustawiony na port C



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2018, o 10:21 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 379
Pomógł: 93

Pixelxx napisał(a):
ICP1 jest na PD6 w Atmega32

Gdzie jest to wiadomo. Pytanie było raczej gdzie to fizycznie podłączyłeś, bo w programie masz pomylone - podciągasz do Vcc pin 6 PORTC.
Pixelxx napisał(a):
Zle mierzy tzn pokazuje jakiś czas i jakąś odległość, ale na wysokość gdzieś 1m pokazuje 15cm

A jak zmieniasz wysokość, to wskazanie się zmienia proporcjonalnie?

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2018, o 10:28 
Offline
Nowy

Dołączył(a): 06 mar 2018
Posty: 24
Pomógł: 0

Fakt pomyliłem DDRD miało być, poprawiłem już to i nadal to samo.
Tak zmienia się proporcjonalnie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2018, o 17:06 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 379
Pomógł: 93

Pixelxx napisał(a):
Fakt pomyliłem DDRD miało być, poprawiłem już to i nadal to samo.

Oczywiście, że to nic nie zmieni, bo przecież i tak do tego rejestru nic nie wpisujesz. Wpisujesz za to do rejestru zdefiniowanego jako ECHO_PORT, któremu przypisałeś PORTC, a intencją było raczej wpisanie do PORTD. Ale to mniej istotne, chciałem się upewnić, że to pomyłka w kodzie, a wyjście ECHO z modułu HC-SR04 masz prawidłowo podłączone do pinu 6 portu D, bo uznałem, że skoro pomyliłeś się w kodzie, to może też źle podłączyłeś. A Ty i tak nie odpowiedziałeś na moje pytanie (czyli gdzie jest podłączone, a nie jak jest w kodzie). To co jest w kodzie i tak jest zapewne nieistotne, bo to tylko włącza na pinie rezystor podciągający do Vcc, co najprawdopodobniej jest zbędne, bo ja nie zauważyłem w dokumentacji modułu, że jest to wymagane.

Poprawiłem nieco Twój kod. Teraz powinien działać prawidłowo (o ile masz to prawidłowo podłączone). Główny błąd znajdował się w linii 31 Twojego kodu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Właściwie zwykle wymagane jest także zapewnienie atomowego dostępu do zmiennej wielobajtowej modyfikowanej w przerwaniu, jednak w tym przypadku nie jest to konieczne, chyba że znacząco skrócisz opóźnienie po wywołaniu funkcji hc_pomiar();

_________________
Miksowanie kodu C i ASM przy użyciu GCC



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2018, o 10:01 
Offline
Nowy

Dołączył(a): 06 mar 2018
Posty: 24
Pomógł: 0

Dziękuje za pomoc. Działa!



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ł: Google [Bot] i 0 gości


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