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



Teraz jest 23 mar 2026, o 00:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 25 paź 2016, o 20:19 
Offline
Nowy

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

Witam wszystkich bardzo serdecznie.

Jestem na etapie prototypowania takiego czujnika. Na pokładzie Attiny13 oraz HC-SR04.
Programator AVR PROG, zasilanie (na razie) z programatora.
Trzy diody: (zielona - daleko - PB4, żółta - blisko - PB3, czerwona - bardzo blisko - PB2).
Układ ma być umieszczony na ścianie w garażu i wskazywać diodami odległość
samochodu od ściany. Gdy auto się nie porusza, układ ma przestać świecić po 5s,
ale ma nadal mierzyć odległość i w razie stwierdzenia poruszenia się samochodu ma
wznowić wyświetlanie.
Uparłem się żeby to zrobić na Attiny13, a tu wciąż mnie coś ogranicza. Albo
ogranicza mnie własna nieumiejętność. Mam wrażenie że układ mierzy niedokładnie. Albo się nie chce wyciszyć przy braku ruchu, albo nie chce przejść w tryb uśpienia gdy obiekt nie zmienia
odległości od czujnika. Jeśli komuś się zechce rzucić okiem na kod, będę wdzięczny.

Attiny13 taktowana 4.8MHz, reszta komentarzy w kodzie.

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: 26 paź 2016, o 07:27 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

Co masz na myśli pisząc, że układ jest niedokładny?

Przede wszystkim twój kod jest mało czytelny przez stosowanie zapisu binarnego zamiast zapisu symbolicznego. volatile musi być tylko dla zmiennych czas i aktywny. Stosowanie _delay_us(), czy _delay_ms() w przerwaniu, to kiepski pomysł.

Założenie, że przy braku zmiany odległości od czujnika dostaniesz zawsze identyczny czas jest zbyt idealistyczne. Tam musisz wprowadzić jakiś margines błędu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2016, o 09:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

Z tym usypianiem to nie wierzę że twój licznik będzie w bez ruchu zawsze tykał dokładnie tak samo... Może daj jakąś strefę martwą... proponuję żebyś sobie odpalił jeszcze na tym jakiegoś uarta i tam wysyłał wartość zmiennej czas... bedzie ci łatwiej podpatrzeć co się dzieje w układzie...

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2016, o 12:53 
Offline
Nowy

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

Volatile tylko te zmienne, których wartość zmieniana jest w procedurach obsługi przerwania?

Nie mogę się przestawić na ten zapis symboliczny. Wybaczcie.
Dopiero zaczynam z mikrokontrolerami...uartowy debugger - fajna sprawa, dodaję do "to do".
Tak, robiłem strefę martwą, coś w stylu

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


ale wówczas tylko duży ruch obiektu uaktywniał wyświetlanie, co za tym idzie
wydaje się, że rozdzielczość pomiaru jest zbyt mała. 4800000/1024 = 4687
1/4687 = 0,000213s na jedno tykniecie zegara.
Czujnik odległosci, wg dokumentacji działa w zakresie
2cm (co daje 116us) do 400cm (co daje 23200us) o ile dobrze rozumiem, czyli 58us/1cm.

Ewidentnie moje 213us to za duży czas by dobrze (co do 1cm zmierzyć tę odległość).

Trzeba by mniejszy preskaler dać, ale wtedy będzie mi trudniej chociażby sensowne 16Hz zrobić
dla taktowania sygnału inicjującego czujnik. Ale chyba zostaje dać mniejszy preskaler i softwarowe, dodatkowe dzielenie częstotliwości,
tam gdzie potrzeba (np dla taktowania czujnika ultradźwiękowego) oraz wprowadzanie zmiennych pomocnicznych
dla pomiaru odległości?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2016, o 14:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

dlatego do tego używa się większego procka z wejściem ICP

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2016, o 15:11 
Offline
Nowy

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

A np wlasnie..na wiekszym to latwiej,a ja sie uparlem dla wprawki :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2016, o 19:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

Może nie nazwał bym tego łatwiej... ale po prostu chyba lepiej w tym przypadku ;) Albo chcesz dokładniej albo taką protezę jak zrobiłeś... ;)

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2016, o 09:09 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

A ja, skoro dopiero zaczynasz to bym najpierw odpalił na większym procku a jak kod zostanie dopieszczony i dokładnie będzie działał zgodnie z założeniami to bym go przeniósł na malucha.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2016, o 11:53 
Offline
Nowy

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

Jeszcze walczę. Gdy po takich długich bojach coś się udaje, to satysfakcja przeogromna.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2016, o 13:24 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2605
Pomógł: 129

Wierz mi, ze jak dopiescisz soft a potem go przeniesiesz to bedzie i satysfakcja i tez się dużo nauczysz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2016, o 14:16 
Offline
Nowy

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

Ok, ogólnie Twoja idea jest dobra, natomiast mój problem polega na konieczności podniesienia dokładności pomiaru czasu echa, które trwa od 116us do ok 230ms. Jak zrobię to na mocno preskalowanym Timerze, to dokladność leci na twarz. Jak zrobie mniej preskalowany timer, to w czasie trwania echa timer się przekręca (OVF) i z pobrania czasu trwania echa z Timer nic nie wychodzi. Wychodzi na to, że na takim Attiny13 tego zrobić się nie da, ale znając żart o tym, że jedyne co może się nie dać, to otwarcie parasola w pewnej części ciała :), zatem wydaje mi się, że podstawowym powodem jest to, że nie umiem tego zrobić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2016, o 14:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 maja 2013
Posty: 432
Lokalizacja: Gostyń / Poznań
Pomógł: 25

a gdyby tak w przerwaniu od przepelnienia timera inkrementowac jakis dodatkowy licznik przekrecen timera? Wtedy bys przeciez wyliczył ten czas...

_________________
Podpis...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 paź 2016, o 16:35 
Offline
Nowy

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

Nad tym właśnie pracuje, ale przy okazji - aby nie używać _delay_xx() musze tez oprogramować 10us impulsu na czujnik ultradźwiękowy, jednocześnie załatwić to, by po 5 sekundach od ostatniego poruszenia się obiektu diody wygasły. I to wszystko jednym timerem. Coś mi się wydaje że to faktycznie niewykonalne.



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO