-
11. Data: 2017-07-07 12:56:43
Temat: Re: Arduino - zliczanie impulsów
Od: "Michal M. Lechanski" <m...@d...eu>
W dniu 07/07/2017 o 11:01, Michal M. Lechanski pisze:
> Ja po prośbie do doświadczonych bardziej niż ja...
Panowie, dziękuję bardzo - spróbuję najpierw wyeliminować wpływ opóźnień
związanych z obsługą LCD.
Pozdrawiam
--
Michał
-
12. Data: 2017-07-07 12:58:36
Temat: Re: Arduino - zliczanie impulsów
Od: Cezar <c...@B...pl.invalid>
On 07/07/2017 11:53, Michal M. Lechanski wrote:
> W dniu 07/07/2017 o 11:40, Nifhelm pisze:
>
>> Swoją
>> drogą dziwię się, że przy wolnych obrotach nie zlicza po dwa, trzy i
>> więcej impulsów na obrót.
>
> Taki efekt zaobserwowałem z magnesami i kontaktronem - zliczane były
> impulsy gdy kontaktron "najeżdzał" nad magnes i gdy się od magnesu
> oddalał. Czyli licznik zliczał dwa razy więcej impulsów niż było
> magnesów. Zmniejszenie odległości kontaktronu od magnesu usunęło ten efekt.
>
Ale w dalszym ciągu możesz dostać złe dane. Przez odsunięcie magnesów
skróciłeś długośc impulsów. Musisz zliczać *zbocza* a nie stany.
c.
-
13. Data: 2017-07-07 13:00:33
Temat: Re: Arduino - zliczanie impulsów
Od: Cezar <c...@B...pl.invalid>
On 07/07/2017 11:56, Michal M. Lechanski wrote:
> W dniu 07/07/2017 o 11:01, Michal M. Lechanski pisze:
>
>> Ja po prośbie do doświadczonych bardziej niż ja...
>
> Panowie, dziękuję bardzo - spróbuję najpierw wyeliminować wpływ opóźnień
> związanych z obsługą LCD.
>
> Pozdrawiam
>
to jest (nie) rozwiązanie problemu od dupy strony :-)
c.
-
14. Data: 2017-07-07 13:04:01
Temat: Re: Arduino - zliczanie impulsów
Od: Nifhelm <pytaj@grupie>
W dniu 07.07.2017 o 12:53, Michal M. Lechanski pisze:
> W dniu 07/07/2017 o 11:40, Nifhelm pisze:
>
>> Swoją
>> drogą dziwię się, że przy wolnych obrotach nie zlicza po dwa, trzy i
>> więcej impulsów na obrót.
>
> Taki efekt zaobserwowałem z magnesami i kontaktronem - zliczane były
> impulsy gdy kontaktron "najeżdzał" nad magnes i gdy się od magnesu
> oddalał. Czyli licznik zliczał dwa razy więcej impulsów niż było
> magnesów. Zmniejszenie odległości kontaktronu od magnesu usunęło ten efekt.
>
Funkcja loop() wykonuje się ciągle od nowa. Za każdym przejściem
dokonywane jest sprawdzenie wartości na pinie analogowym i za każdym
razem gdy wykrywana jest taśma stan jest zwiększany. Przy każdym
przejściu zapisywane są też dane d wyświetlacza LCD. Efektem jest długi
czas przejścia pętli oraz to, że jeśli nastąpi dwukrotne sprawdzenie
wejścia analogowego za jednym przejściem taśmy przed czujnikiem, to
zliczone zostaną dwa impulsy.
Po pierwsze zrezygnuj z pomiaru analogowego, bo jest zbyt wolny. Dodaj
komparator i wynik na wejście cyfrowe.
Po drugie zrezygnuj z zapisu LCD jeśli nie zmienia się wartość licznika.
Po trzecie zastosuj wykrywanie przejścia z koła na taśmę, a nie
wykrywanie taśmy (zmiana sygnału a nie jego stan).
A najlepiej zastosuj przerwania.
Pozdrawiam.
-
15. Data: 2017-07-07 13:42:16
Temat: Re: Arduino - zliczanie impulsów
Od: Pcimol <...@...com>
On 2017-07-07 12:09, Michal M. Lechanski wrote:
> W dniu 07/07/2017 o 11:05, Zenek Kapelinder pisze:
>> Kup za 20 zlotych licznik do roweru. Bedzie dzialal i jeszcze bedzie mial bezcenna
czesc. Bedzie mial ladna obudowe.
>>
> Już kupiłem.
> Nadal jednak próbuję to zrozumieć.
Do zliczania impulsów najprosciej skonfigurować licznik TCNT1 by zliczał
z wejścia T1.
Osobiście jednak trzymam się z dala od kompilatorów typu Arduino, więc
nie wiem jak to dokładnie się robi w tym czymś kompilatoropodobnym.
Natomiast w dowolnym C robi się to bez problemu.
-
16. Data: 2017-07-07 13:45:17
Temat: Re: Arduino - zliczanie impulsów
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Michal M. Lechanski" napisał w wiadomości grup
dyskusyjnych:ojnp7k$c2c$1$m...@n...chmurka.net...
W dniu 07/07/2017 o 11:40, Nifhelm pisze:
>> Swoją
>> drogą dziwię się, że przy wolnych obrotach nie zlicza po dwa, trzy
>> i
>> więcej impulsów na obrót.
>Taki efekt zaobserwowałem z magnesami i kontaktronem - zliczane były
>impulsy gdy kontaktron "najeżdzał" nad magnes i gdy się od magnesu
>oddalał. Czyli licznik zliczał dwa razy więcej impulsów niż było
>magnesów. Zmniejszenie odległości kontaktronu od magnesu usunęło ten
>efekt.
Tu nam moze program to filtrowac.
Wylapujemy pierwsze zwarcie, wyswietlamy cos na ekranie, czas mija,
odczytujemy pin ponownie ... i z powodu minietego czasu drgan juz nie
ma ..
J.
-
17. Data: 2017-07-07 14:03:55
Temat: Re: Arduino - zliczanie impulsów
Od: Nifhelm <pytaj@grupie>
W dniu 07.07.2017 o 13:42, Pcimol pisze:
> On 2017-07-07 12:09, Michal M. Lechanski wrote:
>> W dniu 07/07/2017 o 11:05, Zenek Kapelinder pisze:
>>> Kup za 20 zlotych licznik do roweru. Bedzie dzialal i jeszcze bedzie
>>> mial bezcenna czesc. Bedzie mial ladna obudowe.
>>>
>> Już kupiłem.
>> Nadal jednak próbuję to zrozumieć.
>
> Do zliczania impulsów najprosciej skonfigurować licznik TCNT1 by zliczał
> z wejścia T1.
>
> Osobiście jednak trzymam się z dala od kompilatorów typu Arduino, więc
> nie wiem jak to dokładnie się robi w tym czymś kompilatoropodobnym.
> Natomiast w dowolnym C robi się to bez problemu.
>
W sumie dość prosto.
Trzeba podłączyć sygnał do wejścia D2 lub D3 w Arduino, uruchomić
przerwania zewnętrzne na tym wejściu i napisać procedurę obsługi
przerwania która będzie zwiększać wartość licznika o 1 o ile od
poprzedniej zmiany minął określony czas (likwidacja drgań). I sprawa
załatwiona.
Pozdrawiam.
-
18. Data: 2017-07-07 14:18:59
Temat: Re: Arduino - zliczanie impulsów
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Pcimol" napisał w wiadomości grup
dyskusyjnych:ojns34$tgg$...@m...internetia.pl...
On 2017-07-07 12:09, Michal M. Lechanski wrote:
>Do zliczania impulsów najprosciej skonfigurować licznik TCNT1 by
>zliczał z wejścia T1.
Ale wtedy bedzie wszystkie drgania zliczal.
I trzeba zmienic koncepcje, albo dodac na plytce uklad eliminujacy
drgania :-)
Wiec zmieniajac watek ... no nie, tu sie z Piotrem zgodze, ze to zaden
przyklad, bo o drganiach to w kazdej ksiazce pisza, wiec projektant
powinien od poczatku dobrze zaprojektowac.
P.S. te optyczne uklady chyba maja jakas histereze ... wiec zachodzi
potrzeba rozpoznania bojem czy wystarczajaca.
Aaa ... tu mamy jakis "analogowy", to histerezy nie ma, a bój sie
komplikuje :-)
Summa summarum - moze kolega dobrze zrobil, ze pod DAC podpial, tylko
teraz trzeba bedzie dobry program napisac :-)
J.
-
19. Data: 2017-07-07 17:22:10
Temat: Re: Arduino - zliczanie impulsów
Od: Marek <f...@f...com>
On Fri, 7 Jul 2017 13:42:16 +0200, Pcimol <...@...com> wrote:
> nie wiem jak to dokładnie się robi w tym czymś kompilatoropodobnym.
Akurat Arduino to opakowany avr-gcc więcć trudno to nazwać
kompilatoropodobnym...
--
Marek
-
20. Data: 2017-07-07 22:19:33
Temat: Re: Arduino - zliczanie impulsów
Od: s...@g...com
W dniu piątek, 7 lipca 2017 12:01:02 UTC+2 użytkownik Michal M. Lechanski napisał:
> Ja po prośbie do doświadczonych bardziej niż ja...
>
> Otóż próbuję zliczać obroty koła.
>
(...)
> Z góry dziękuję za jakiekolwiek sugestie.
>
Zacząc nalezy od tego że wykrywasz poziom zamiast zmiany stanu.
Zmien program na dwa sposoby:
po pierwsze wykrywaj zmiane stanu. Czyli jak czujnik przechodzi ze stanu 0 do 1 i
odwrotnie to zliczaj te zmiany.
Po drugie zmien program tak aby szybko ustalał jaki jest stan czujnika.
Po trzecie musisz pamietac że styki mogą podskakiwać więc musisz to też oprogramować.
Moja sugestia:
Korzystaj z kontaktronu o ile tenże kontaktron pozwala na tak szybkie zmierzenie
stanu.
W przypadku koła o średnicy 28 cali masz obwód 223cm.
Przy prędkości 30km/h (8m/sek) to daje około 4 obroty na sekunde. I do tego czas
styku kontaktronu to pi*oko 1/100 z tej ćwiartki sekundy.
Musisz upewnic się że ten kontaktron potrafi sie otwoerać i zamykać te 5-10x na
sekunde.
Warto to zmierzyć np. przepuszczając przez niego sygnał dzwiekowy i nagrac przez
karte muzyczna jesli nie masz oscyloskopu.
Tak zobaczysz czy ten kontaktron po pierwsze potrafi sie tak często rozłączać i
łączyć oraz jak mocno mu styki podskakują.
Program napisz tak aby procedura działała na przerwaniach zegarowych. Odczytuj status
kontaktronu około 500-1000-2000x na sekunde i wynik pomiaru wkładaj do zmiennej jako
pojedynczy bit i przesuwaj bity w lewo (zwiekszasz wartośc zmiennej) w sytuacji kiedy
masz w zmiennej odpowiednio wysoką wartość wiesz ze styk jest trwale zwarty.
Zgodnie z tym ustawiasz sobie wartosci globalnych zmiennej w rodzaju "styk_zwarty".
Jest jeszcze pare alternatyw ale jak zrobisz powyższe to raczej będzie najprościej o
ile całośc sie uda (kontaktron nadąży sie zamykać itp.).
Kolejny krok to zbudowac sobie układ z histerezą i nim wywoływać przerwanie.