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



Teraz jest 30 lis 2024, o 11:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 36 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 11 mar 2016, o 12:12 
Offline
Użytkownik

Dołączył(a): 19 gru 2014
Posty: 155
Zbananowany użytkownik

Pomógł: 0

kicajek napisał(a):
Witam
Tak szczerze mówiąc to nie wiem jak byś to miał robić za pomocą ADC - ale nie znam tematu; być może tak się robi tylko zastanawia mnie sposób pomiaru bo jego częstotliwość jest ograniczona. Jeśli jeszcze nic nie robiłeś na tych czujnikach to możeT U T A J coś się dowiesz. Co prawda kod "nie po naszemu" ale dobrze komentowany wię można podejrzeć. Tak nawiasem mówiąc na naszym forum często jest jak w kryminale - na samym końcu dowiadujemy się kto jest głównym winowajcą ;) - może trzeba było zacząć od nakreślenia celu, a nie od luźnego zagadnienia "Pomiar czasu trwania impulsu".
Pięć czujników - ( jak wspominałem nie znam tematu ) tutaj chyba trzeba wykorzystać PCINT - więc jednak odsyłam do (najlepiej od początku ) do cz.III przerwań.

Pozdr.


Za pomocą ADC, można to zrobić ale za pomocą innych czujników które na wyjściu dają napięcie proporcjonalne do odległości, są sporo droższe niestety.

------------------------ [ Dodano po: 11 minutach ]

Cytuj:
ISR(INT0_vect){
if(INT0_down)


Ten warunek if to do sprawdzenia z jakim zboczem powodującym przerwanie mamy do czynienia?

Twój kod jest bardzo prosty, a przez to bardzo skomplikowany :), aby go pojąć trzeba myśleć jak sam procesor a to jeszcze nie mój poziom :(



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

Dołączył(a): 17 paź 2014
Posty: 233
Lokalizacja: Rzeszów
Pomógł: 11

Jeśli impuls może być podany na inny port niż INT0, a chcesz bardzo dokładnie zmierzyć jego długość, proponuję wykorzystać mechanizm input capture dla timera.

W przerwaniu musiałbyś zmienić bit ICES.

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 mar 2016, o 16:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Hannibal9 napisał(a):
Ten warunek if to do sprawdzenia z jakim zboczem powodującym przerwanie mamy do czynienia?

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

a wiesz, że jest to makro sprawdzające czy na danym PIN'ie jest stan niski - tak samo jak dla klawiszy bo to bez różnicy.
Cała robota ;) wykonywana jest w zależności od tego jaki stan wywołał przerwanie - a któryś musiał bo ono wystąpiło.
Po wejściu w przerwanie jest sprawdzany poziom logiczny wejścia (bo można to robić - a z uporem maniaka odsyłam...) i jeśli jest stan niski "włazi" do:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

zatrzymywany jest TIMER0 który liczył nam tyknięcia TCNT0, odczytana jest wartość TCNT0 i ustawiona flaga. Jeśli poziom jest inny ( czyli wysoki ) następuje:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wyzerowanie, wyzerowanie i wio :)
Użycie flagi jak i buf_t0 jest chyba jasne.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2016, o 07:25 
Offline
Użytkownik

Dołączył(a): 19 gru 2014
Posty: 155
Zbananowany użytkownik

Pomógł: 0

APAP75 napisał(a):
Jeśli impuls może być podany na inny port niż INT0, a chcesz bardzo dokładnie zmierzyć jego długość, proponuję wykorzystać mechanizm input capture dla timera.

W przerwaniu musiałbyś zmienić bit ICES.

Taki sposób już przerobiłem, chodzi bardzo dobrze.

Do czego służy bit TOV1?

------------------------ [ Dodano po: 34 minutach ]

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
, a ten zapis?
rozumiem że przerwania wykonywane są z częstotliwością 8000000/64/256, jeżeli przesuniesz wynik 0 8 bitów w lewo to pozbywasz się tego dzielnika 256 - tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 mar 2016, o 08:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Hannibal9 napisał(a):
jeżeli przesuniesz wynik 0 8 bitów w lewo

...to tak jakbyś pomnożył przez 256 - czyli w sumie Twój zapis jest OK - taki zbieg okoliczności :) .
W kodzie jest
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czyli co jedno przerwanie ( 256 tyknięć ) jest zwiększane o jeden. Jeśli wystąpiło kilka przerwań to wynikiem sumarycznym tyknięć jest te klika * 256 co jest jednoznaczne z kilka<<8

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2016, o 18:34 
Offline
Użytkownik

Dołączył(a): 19 gru 2014
Posty: 155
Zbananowany użytkownik

Pomógł: 0

Musiałem przerwać prace nad moim projektem, ale wracam do niego, jak myślicie czy można mierzyć odległości za pomocą 3 czujników HC-SR04 poprzec ICP1?

- wejścia czujników Trig podpinam pod wyjścia procesora,
- wyjścia czujników Echo czujników podpinam przez diody do wejścia procesora ICP1,
- podaję impuls na wejście Trig pierwszego czujnika i odczytuję długość impulsu z pierwszego czujnika
- itd z pozostałych czujników
- czy moja koncepcja jest słuszna?



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: 36 ]  Przejdź na stronę Poprzednia strona  1, 2

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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