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



Teraz jest 26 wrz 2018, o 15:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 9 wrz 2018, o 21:36 
Offline
Nowy

Dołączył(a): 14 sie 2016
Posty: 18
Pomógł: 0

Witam
Nadeszła w moim projekcie pora na uruchomienie pomiarów z dwóch modułów HC-SR04.
Kiedy wcześniej testowałem działanie na Atmega32 i zastosowaniu kodu z poradnika Mirka wszystko działało poprawnie.
Ale teraz używam Atmega 2560 i nie jest już tak prosto. Nie dość że to inny mikrokontroler to do tego muszę użyć dwóch modułów HC.

Piny jakich używam do modułów HC to :

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



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


Gdzie piny mikrokontrolera L0 i L1 to ICP.

Wydaje mi się że problemem jest tu konfiguracja timera.
Do dyspozycji mam sprzętowy Timer3.
Robię to 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 zapewne pierwszy błąd znajduje się właśnie tu. Bo o ile preskaler i zbocze potrafię ustawić to problemem jest odblokowanie przerwania.
Zwyczajnie nie wiem jak powinienem zabrać się za obsługę dwóch modułów. W sumie na tym mikrokontrolerze nawet jednego nie potrafię uruchomić :/

Może znajdzie się wśród kolegów i koleżanek ktoś kto zechciałby nieco mi pomóc w tej kwestii.
Chciałbym w pierwszej kolejności poprawnie ustawić timer i dokonać odczytu z jednego modułu HC. Potem przyjdzie pora na kolejny.



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

Dołączył(a): 04 cze 2014
Posty: 715
Lokalizacja: pod Warszawą
Pomógł: 52

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

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

No i nie masz ustawionego trybu pracy timera
Obrazek
jeżeli chcesz tryb CTC to bit WGM32 w rejestrze TCCR3B
Zapoznaj się z notą kontrolera tam masz wszystko
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

przykładowo można tak zależy co ile chcesz przerwanie


Autor postu otrzymał pochwałę

_________________
Pomóżcie mi stanąć na nogi



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

Dołączył(a): 14 sie 2016
Posty: 18
Pomógł: 0

A więc tak.
Ja potrzebuję mierzyć czas w mikrosekundach poprzez wejścia timera ICP
Zacznijmy od tego że potrzebuję przerwania od ICP.

Czyli (jeśli chodzi o kod z Atmega 32) powinno to wyglądać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ale ja używam M2560.


Znalazłem przykład dla M2560 i Timera4 na Avrfreaks (z tym że dla kwarcu 1MHz)

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


W zasadzie mogę użyć Timera4 ale muszę dopasować go do mojego kwarcu czyli 14745600.
Dodatkowo nie do końca rozumiem jak mam obsłużyć dwa moduły HC-SR04 odczytywane z pinów ICP4 i ICP5.

Czy chodzi o to:

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


i dla drugiego pinu ICP powinienem ustawić to w taki sposób ?

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



Jeśli to dobrze rozumiem to odczyt dla ICP4 powinien wyglądać tak:

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: 11 wrz 2018, o 22:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 715
Lokalizacja: pod Warszawą
Pomógł: 52

Strasznie mieszasz Kolego
nie wiem skąd wziąłeś to
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

mieszasz rejestry i numery timerów
dla timera4 powinno być
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i spróbuj z jednym czujnikiem a jak zadziała to pójdziemy dalej


Autor postu otrzymał pochwałę

_________________
Pomóżcie mi stanąć na nogi



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

Dołączył(a): 14 sie 2016
Posty: 18
Pomógł: 0

No właśnie przy takim ustawieniu timera procesor się cyklicznie restartuje.

A przy tym kodzie pomiar na jednym czujniku działa ale nie zgadza się odległość. Niby ma być wynik w CM a jest w milimetrach. Ale i tak nieco się różni od rzeczywistego.

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



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 metody prób i błędów problem w dużej mierze tkwi tutaj:

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


Liczba 4608 wychodzi mi z obliczenia cyklu 80ms dla odczytu.

80ms cycle: 14745600/256 = 57600 counts/second => 57600/10 = 5760 counts/100ms => 5760/100*80 = 4608 counts / 80ms

Producent zaleca powyżej 60ms.

Dodatkowo kolejny błąd tkwi tutaj. Ma to kluczowe znaczenie przy końcowym wyliczeniu odległości.
Teoretycznie powinno to wyglądać tak:

us_per_count = 128; // 14745600/256 = 57600 counts/second => 14745600/57600

Ale w miarę zbliżony do prawdziwego wyniku pomiaru odległości muszę wprowadzić wartość

us_per_count = 164;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2018, o 20:13 
Offline
Nowy

Dołączył(a): 14 sie 2016
Posty: 18
Pomógł: 0

No dobrze. Udało mi się odpowiednio skonfigurować wszystko aby odległość mierzona była poprawna.
Wygląda to tak:

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



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


Tylko teraz muszę jeszcze obsłużyć drugi HC-SR05.
Pierwszy czujnik obsługuję z pinu ICP4 (pin 49). Drugi mam podpięte pod ICP5.
Proszę o jakąś poradę jak tego dokonać nie rozbudowując niepotrzebnie zbytnio kodu.
Z resztą już sobie poradzę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2018, o 14:04 
Offline
Nowy

Dołączył(a): 14 sie 2016
Posty: 18
Pomógł: 0

Na prawdę nikt,nic? Może ktoś z kolegów dysponuje jakimś przykładowym kodem na tą atmegę?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2018, o 18:30 
Offline
Użytkownik

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

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


Autor postu otrzymał pochwałę

_________________
Miksowanie kodu C i ASM przy użyciu GCC



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

Dołączył(a): 14 sie 2016
Posty: 18
Pomógł: 0

Dziękuję za pomoc. Dzięki przykładowi kolegi Andrews zmodyfikowałem ( i zrozumiałem) działanie własnego kodu i używając Timera5 ,umożliwiłem obsługę drugiego modułu HC.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO