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



Teraz jest 4 lut 2025, o 00:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 36 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
 Tytuł: Obrotomierz
PostNapisane: 5 sty 2013, o 09:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Witam. Chcę stworzyć program do mojego układu, lecz mam kilka problemów.
Na wstępie mam dylemat co do timerów.
Ponieważ korzystam z atmegi8 który jest podłączony do 4x wyświetlacz 7segmentowy.
Wykorzystałem tu kod autora książki, do tego wyświetlacza, tylko że przerobiłem na timera2 i pod inne piny wyjściowe uC.
Z tego co już wiem do pomiaru będą potrzebne 2 timery.
jeden odliczający np. 1s
drugi zliczający liczbę impulsów w czasie tej jednej s.
Nie wiem czy dobrze chcę zrobić. Bo w atmege8 timer0 może być skonfigurowany tylko jako licznik prosty więc ten by musiał być licznikiem impulsów.
a timer1 do odmierzenia 1s.
Co chyba nie jest dobrym rozwiązaniem, bo wolał bym 16bit licznik zastosować właśnie do zliczania impulsów.
Ale z kolei na timer0 nie wiem jak zrobić 1s :(
Ktoś doradzi jak to najprościej i logiczniej wykonać ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 10:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2013
Posty: 328
Lokalizacja: Rzgów k. Łodzi
Pomógł: 11

Poczytaj o timerach programowych, są w dziale o projekcie wielozadaniowym ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 10:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
Taka mała podpowiedź. Skoro masz już jeden timer (timer2) użyty to w jego przerwaniu możesz sobie zrobić ustawienie flagi co oczekiwaną wartość. Np. Timer generuje przerwanie co 100ms to jak zliczysz sobie 10 zdarzeń i ustwisz flagę to będziesz miał odmierzanie 1s.

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 10:45 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Do zliczania impulsów można wykorzystać wejście ICP związane z timer1 ale równie dobrze jedno z dwóch przerwań zewnętrznych INT0 i INT1 lub w ostateczności pooling na dowolnym innym porcie. Dwa timery na obsługę obrotomierza to imho trochę rozrzutność jest.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 10:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Wystarczy jeden timer i przerwania od INT.
Ale to jest słaba jakość pomiaru.

Poszukaj informacji o przerwaniu od porównania (ICP).
Timerem mierzysz okres a w pętli przeliczasz na obroty.

Dodano:
O... kolega mnie wyprzedził.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 10:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Rozumiem zaraz coś poszukam sobie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 15:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Znalazłem coś co szukam, ale nie za bardzo rozumiem ten kod.
Na dodatek jak próbowałem kod wykorzystać do mojego przypadku to mi nie udało to nie udało.
topic1712.html

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

Zastanawia mnie dlaczego tu jest timer0 jak nie został wcześniej włączony?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 15:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

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


Coś mi się wydaje ze został...
Mam gotowca pod mege16 i wyświetlacz LCD ale to szczegół.
Trochę zrobię porządek to podeślę go.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 15:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

To jest 1 kod, ja z tego 2 korzystałem



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 15:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Ale zobacz porządek w głównej funkcji, jest najpierw wywoływana funkcja uruhamiająca Timer, czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


do tego jest jeszcze kod który podałeś, a on po przepełnieniu się Timera0 zaznacza flagę która dalej jest wykorzystywana void timer0_event(void) a tutaj odbywa się dodatkowe zliczanie tych flag i gdy doliczy do 1 sek to zwraca tą sekundę. Tak w skrócie. Więc sam kawałek kodu który zaznaczyłeś nie wykonuje prawie żadnej funkcji.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 16:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Tak wszystko się zgadza ale parę postów niżej podał zmieniony kod.
I w tym kodzie tego nie ma.
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  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 16:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Zacznijmy od podstaw. W tym kodzie używa innego wyświetlacza niż HD44780.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 16:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 gru 2012
Posty: 161
Pomógł: 9

Może zacznijmy od tego co chcesz właściwie zrobić? Przystosować podany w przytoczonym poście kod do swojego kodu? Czyli wykorzystać gotowe wstawki czy po prostu zrobić wszystko od nowa na podanym kodzie?

Łatwiej by było gdyby inni mogli zobaczyć Twój kod. Wtedy by były wychwycone błędy. A jeśli chodzi tylko o to czemu tam jest przerwanie z timer0 a nie jest on włączany to dobrze się dopatrzyłeś, tam jest błąd. Timer0 musi być załączony, połączenie kodu 1 i 2 z tamtego tematu działa ładnie.

Dokładnie o takie połączenie mi chodzi:

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


I jak można zauważyć ten kod służy mi do migania ledem, wyłączyłem wszystko z obsługą LCD, ale całkiem możliwe że te kilka linijek kodu obsługi lcd tak wpływa na czas, że powstaje dokładnie 1 sekunda.

Jeśli miałbym oceniać to [...cenzura... mirekk36 - BARDZO uprzejmie proszę, na tym forum tak nie dyskutujemy OK? A ten kolega o którym tu wspomniałeś mógłby być WZOREM na naszym forum i nie tylko - jak należy podchodzić do nauki języka C!] się tutaj nie popisał :D
Pan Mirek zawsze powtarza: "Pisz kod tak jakbyś pisał dla grupy programistów". A tutaj nie ma wcale komentarzy, nie wiadomo na jakiej częstotliwości pracuje procesor itp itd :P
Zresztą już nie raz próbowałem w ten sposób uzyskać jedną sekundę... O wiele prościej jest wykorzystać kwarc zegarkowy 32khz :)


Odnośnie cenzury:
Ok, przepraszam. Tylko chciałem zaznaczyć, że brakuje komentarzy które pomogłyby czytającym kod...
Też Pana KtóregoNickaNieWolnoWymieniać podziwiam, jest dla mnie wzorem...
Pozdrawiam

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 19:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Ja swojego czasu coś takiego na skrobałem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przyznam się ze ostatnio prawie rok temu tego używałem i nie pamiętam czy jest skalibrowany do jednego impulsu na obrót.



Ostatnio edytowano 5 sty 2013, o 22:29 przez tom1988p, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 19:47 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27352
Lokalizacja: Szczecin
Pomógł: 1042

Antystatyczny napisał(a):
Po prostu interesuje mnie kiedy używać ATOMIC_BLOCK, a kiedy takiego czegoś co ja prezentuję


Jak ci się kiedyś odechce w kółko pisać tych kilka linijek to w końcu zaczniesz używać tych makr ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 19:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27352
Lokalizacja: Szczecin
Pomógł: 1042

Antystatyczny napisał(a):
A ja sobie wyobrażałem nie wiadomo co :D


No i tak sobie właśnie czasem narzucamy bariery ;) ja przyznam że przez to że wcześniej wciąż pisałem te choinkowe linijki to teraz jeszcze one u mnie pokutują zamiast dać makro i już ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 20:19 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27352
Lokalizacja: Szczecin
Pomógł: 1042

Antystatyczny napisał(a):
Ok, od tej pory będzie makro ;) Przyznaję szczerze, że chyba tylko raz musiałem na moment wyłączyć przerwania. Zwykle nie jest mi to do niczego potrzebne, bo staram się, by wszystko cykało jak w szwajcarskim :)


No ale czasem to bywa że i przy najzwyklejszej inkrementacji czy dekrementacji jakiejś zmiennej 16-bitowej, która również używana jest w przerwaniach - trzeba z tego skorzystać, bo wiadomo że operacja na 16-bitach nie zajdzie atomowo na procku 8-bitowym. Oczywiście rzadko kiedy w sumie zdarzają się takie potrzeby ale zawsze trzeba mieć to na uwadze, bo inaczej można sobie czasem kwiatków narobić.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 21:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Chcę osiągnąć pomiar obrotów np z silnika wentylatora komputerowego.
Do tej pory wykorzystałem kod Mirka do zliczania impulsów i wyświetlania go na wyświetlaczu 4x 7segment.
Nie umiem jeszcze sam niczego sklepać więc opieram się na gotowych rozwiązaniach jak mi się uda je zrozumieć.
Cel jest taki by na tym wyświetlaczu pojawiały się obr/min. Początkowo chciałem to wykorzystać na 2 timerach.
Ale doradzili że można to zrobić na jednym. I zacząłem szukać i znalazłem ten post.
Ale teraz wynika z tego że ten kod wymaga też 2 timerów.
Trochę poczytałem na temat ICP i tak nie do końca wiem jak się za to zabrać. :(

Kolega tom1988p widzę ciekawy kod udostępnił który zaraz zacznę analizować i spróbuję go dopasować do mojego.
Widzę że ten kod jest przerobiony z książki Tomasza Francuza? Też na niego patrzyłem ale moja wiedza tak daleko nie sięga bym mógł se z nim poradzić. :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 22:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Tak. Masz rację gdzie ściągałem... Ale to na podstawie miernika częstotliwości tam opisanego oraz informacje z internetu do przeliczenia na obroty. Jakoś w coś posklejałem.
Tam się nauczyłem "atomować" w ten sposób.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 5 sty 2013, o 22:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Ja próbowałem coś zrozumieć ale nie wyszło mi. Twój program działa świetnie.
I dla wentylatorka komputerowego jak i dla miernika obrotów bezdotykowego:)
Na pewno go jeszcze gdzieś wykorzystam. Tylko msze dokładnie każdą linie kodu zrozumieć co i jak się dzieje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 6 sty 2013, o 16:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Antystatyczny napisał(a):
Wiadomo, każdy zrobi tak dokładnie, na ile potrzebuje.

Lub na ile umie :)

Ja kolegi @tom1988p wykorzystałem kod jednocześnie do pomiaru obrotów wentylatora komputerowego jak i do transoptora. Gdy podłączam wentylator to podłączam żółty kabelek bezpośrednio do portu ICP i dziele przez 2 bo mój wentylator daje 2 impulsy na obrót. rpm = (F_CPU/64/pr*60)/2; A jak przez transoptor to bez dzielenia. rpm = F_CPU/64/pr*60;
I gdy mierze przez żółty kabelek czy przez transoptor (ten sam wentylator) to wynik jest zbliżony ok 2900obr.min przy 12V



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 6 sty 2013, o 19:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Cytuj:
rpm = (F_CPU/64/pr*60)/2;

Dlaczego przedłużać kod? Przecież: rpm = F_CPU/64/pr*30; da ten sam wynik.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 6 sty 2013, o 23:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

No tak, nie pomyślałem o tym w ten sposób. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 1 kwi 2013, o 22:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Witam ponownie. :)
Jestem zmuszony kolejny raz skorzystać z kodu kolegi @tom1988p. Tylko mam pytanko. Ponieważ wcześniej korzystałem z tego kodu ale dla 4x 7-segmentowy wyświetlacz led i wszystko ładnie grało. Pokazywał obroty od ok 100 do ponad 3000. Teraz mam LCD i po wgraniu programu na LCD gdy nie kręci się wentylator mam wartość 2940 przy zwiększaniu obrotów to przy około 1500 widać jakiś wynik po czym dalej jest tak nie stabilnie i nie ładnie to wygląda na LCD. W porównaniu do 7-segment led to strasznie :(
Da się coś z tym zrobić by osiągnąć taki sam efekt jak na 7-segmentowych ledach ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 2 kwi 2013, o 17:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Hej.
Może błąd bardzo prosty, nie wina działania obrotka tylko wyświetlacza, może nie kasujesz wcześniejszych znaków i zostają "duchy". Wpisz przed liczbą obr, cztery spacje następnie ponownie ustaw kursor i wpisz wynik



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 2 kwi 2013, o 17:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

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

Nie podłączałem nic pod pin ICP i mam teraz lekko widoczne zero a czasem jakieś wartości 2000 coś 3000 coś które też są lekko widoczne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 2 kwi 2013, o 18:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Dobrze. Teraz tylko wsadź to w jakiś timer i niech co np. 50-200ms wyświetla zmienną, jak na razie to widocznie za szybko nadpisuje nowy znak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 2 kwi 2013, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

To dla prób mogę wykorzystać np _delay_ms() jak pomoże dopiero w tedy jakimś timerem się zająć.

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


I teraz Czytelniejsze są wyniki co prawda czasem mrugnie coś ale widać.
Tylko że cały czas pojawiają się dziwne wartości :(
Większość czasu jest 0 ale co jakiś czas na na chwilę pojawi się 60, 2880 3300 :(
Jakieś zakłócenia czy co?
Czy może trzeba by było nadać portowi jakąś konkretną pozycje Bo w tym kodzie nie jest zapisane czy jest to wyjście czy wejście i jakieś napięcia na tym porcie szaleją ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 2 kwi 2013, o 19:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Rezystor podciągający jest? Jakiś zewnętrzny np. 2k2 może po prostu czyta bzdury ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 2 kwi 2013, o 19:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lip 2012
Posty: 306
Pomógł: 0

Nie a ma być między PD6 a Vcc ?
A programowo jakoś też go ustawić ?

------------------------ [ Dodano po: 6 minutach ]

Po podaniu rezystora 2k2 to działa :)
Tylko czy wentylator może osiągać 4800RPM?



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ę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

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