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



Teraz jest 8 cze 2026, o 19:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 22 mar 2017, o 18:44 
Offline
Nowy

Dołączył(a): 08 paź 2016
Posty: 21
Pomógł: 0

Posiadam Ultradźwiękowym Czujnikiem Odległości HC-SR04. Podłączyłem go tak jak trzeba, Triger do nóżki PB2, a Echo do nóżki PB1.
Nie wszystko działa poprawnie, czujnik mierzy odległość ale potrzebuje na to dużo czasu. Poniżej kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Powyżej ustawienie Trig jako wyjścia, a Echo jako wejście, oraz inicjalizacja Timera2.
Timer ten generuje przerwanie z f=100.000Hz, czyli co 10us.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Część główna programu, ma co 1 sekundę wyświetlić zmierzoną odległość, i tutaj występuje problem bo pomiar dokonywany jest znacznie dłużej, jakąś minutę. Mogę co prawda zmienić opóźnienie na _delay_ms(10); i wtedy pomiar jest wykonywany raz na jakąś sekundę.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

powyżej przerwanie, ustawia ono stan dodatni na 10us na Trigerze, a następnie czeka na sygnał Echo. Jeśli się pojawi to odlicza czas tego sygnału aż do zakończenia sygnału. Następnie przetwarza wynik na cm.

Nie wiem co tu jest nie tak, może jakieś problemy ze stosem?



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

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

Pokaż cały kod razem z UltInfo, Port i reszta rzeczy oki?

_________________
Situs != Situs



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

Dołączył(a): 08 paź 2016
Posty: 21
Pomógł: 0

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

Broszę bardzo XD, ktoś wie co może być nie tam?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2017, o 21:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

spróbuj może tak:

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


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


sprawdzałem u mnie i działa na atmega32 na 8 mhz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2017, o 22:37 
Offline
Nowy

Dołączył(a): 08 paź 2016
Posty: 21
Pomógł: 0

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

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

powyższe linijki dają taki sam efekt, a więc można je stosować zamiennie. Dziwne. Bardziej mnie zastanawia dlaczego ten pomiar jest wykonywany tak długo gdy dam _delay_ms(1000) (pomiar ok. raz na minutę); , a jeśli dam _delay_ms(10); to zdecydowanie szybciej (co jakąś jedną sekundę jest pomiar wyświetlany). Skąd się biorą takie duże opóźnienia? Może coś z tym przerwaniem, czy coś się zawiesza że tak długo to trwa. Może ktoś wie XD



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2017, o 08:49 
Offline
Użytkownik
Avatar użytkownika

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

zb111112 napisał(a):
powyższe linijki dają taki sam efekt, a więc można je stosować zamiennie.
Nie można. Pierwsza linijka oznacza "dopóki UltInfo jest równe stop", natomiast druga "dopóki UltInfo jest różne od stop"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2017, o 20:18 
Offline
Nowy

Dołączył(a): 08 paź 2016
Posty: 21
Pomógł: 0

To zbuduj układ i zobacz, układ pracuje tak samo wolno



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

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

W tym kodzie może i działa, ale napisanie, że == i to != działa tak samo, z założenia jest błędne.
A co do działania programu, jesteś pewien, że to będzie działać poprawnie? Piszesz:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I już w kolejnej linijce:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
(wartości mniej więcej te, nie sprawdzałem dokładnie). Jesteś pewien, że w tym czasie przerwanie od timera wykonało się odpowiednią ilość razy? Jakoś nie mogę rozpisać tego działanie, gdzieś mi się gubią wartości.
Możesz rozpisać, jak po kolei, w zamyśle, ma ten program 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: 8 ] 

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