Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Zliczanie obrotów za pomocą uC AVR - dziwne rzeczy

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała
Zliczanie obrotów za pomocą uC AVR - dziwne rzeczy

Postautor: _Wojciech_ » 10 kwie 2004, o 10:08

Jak realizować zliczanie obrotów przez AVR? Wiadomo, licznikiem.
Zrobiłem taki układ i nie działa :(
Konkretnie:
Zliczam impulsy zewnętrzne licznikiem T0 (8bit). Licznik jest ustawiony jak trzeba.
Impulsy pochodzą z kolektora fototranzystora na podczerwień (950nm). Dioda na podczerwień świeci cały czas. Jak "trafi" na otwór, to tranzystor się otwiera i jest na nim ok. 0,3V (mierzyłem, to działa). Normalnie tranzystor nie przewodzi i jest na nim prawie 5V.
No i stwierdzam, że w liczniku są jakieś przypadkowe liczby :?
Nawet kręciłem tarczą ręcznie (powoli), to powinien się stan licznika zmieniać o 1. A tu nie! Kolejne wartości są jakby przypadkowe, np: 59, 211, 4, 199, itp. :o
Gdzie może być błąd? Czy to opadające zbocze na wejściu licznika AVR musi mieć jakieś konkretne parametry? W PDF'ie do procka nic na ten temat nie pisze.
Tu jest schemat:
http://www.redchaos.republika.pl/obroty.jpg

Obrazek

Awatar użytkownika
Kamilkozi
-
-
Posty:229
Rejestracja:19 mar 2004, o 11:48
Lokalizacja:Gdańsk
Kontaktowanie:

Postautor: Kamilkozi » 10 kwie 2004, o 12:27

W pliku pomocy jest:

Config Timer0 = Counter , Edge = Rising
'Config Timer0 = Counter , Edge = falling
'unremark the line aboven to use timer0 to count on falling edge

'To get/set the value from the timer access the timer/counter register
'lets reset it to 0
Tcnt0 = 0

Do
Print Tcnt0
Loop Until Tcnt0 >= 10
'when 10 pulses are count the loop is exited
'or use the special variable TIMER0
Timer0 = 0

Używasz tej "specjalnej" zmiennej systemowej do odczytywania zawartości licznika?

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała

Postautor: _Wojciech_ » 10 kwie 2004, o 15:59

Ja piszę w C korzystam z kompilatora WinAVR.
Odczyt jest banalny: JakaśZmienna=TCNT0 i tyle. Ale nie w tym problem. Dla licznika T1 to działa, dla T0 w trybie Timera też.
Zresztą zrobiłem tak: Zwierałem wejście do masy i działa. Liczy poprawnie-jedno zwarcie licznik o 1 do góry.
Problem jest w fototranzystorze. Nie mam oscyloskopu, bo bym zobaczył jak wygląda przebieg na wejściu licznika. Ale wygląda na to, że jest jakiś chaotyczny pomiedzy stanami +5V a masą.

Awatar użytkownika
gruszek
-
-
Posty:178
Rejestracja:20 lis 2003, o 13:31
Lokalizacja:bytom

Postautor: gruszek » 10 kwie 2004, o 16:45

w zaleznosci od rodzaju 'chaotycznosci' sygnalu zstosuj albo przerzutnik shmidta albo moze jakis obwodzik rc...

Awatar użytkownika
Kamilkozi
-
-
Posty:229
Rejestracja:19 mar 2004, o 11:48
Lokalizacja:Gdańsk
Kontaktowanie:

Postautor: Kamilkozi » 10 kwie 2004, o 20:41

No właśnie jeśli to nie wina programu to muszą się tam na kolektorze fototranzystora pojawiać "smieći" które licznik zlicza. Zastosuj filtr dolnoprzepustowy RC, jak radzi Gruszek, tylko dostosuj go do czestotliwosci pożądanych impulsów. I proponuje też zwiększyć wartość rezystora kolektorowego, myślę, że lepszy będzie taki z zakresu 1k - 10k.

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała

Postautor: _Wojciech_ » 10 kwie 2004, o 23:45

A moglibyście jakiś konkretny szkic schematu zrobić?
Filtr RC, tzn. jak podłączyć i jakie wartości. Częstotliwość impulsów to maksymalnie 100Hz (czyli raczej nie dużo).

A jak myślicie: czy kontaktron+magnesy byłby lepszy?

Wacek
-
-
Posty:58
Rejestracja:1 paź 2003, o 03:54
Lokalizacja:Toronto

Licznik

Postautor: Wacek » 11 kwie 2004, o 02:39

Czesc
Kontaktron i magnesy bylby lepszy, tylko nie wiem czy do 100Hz.
Pamietaj jednak, ze styki podczas zalaczania sie odbijaja i mozesz
miec nawet kilka dodatkowych impulsow. Musle, ze sugestia
z zastosowaniem triggera shmidta, byla by najlepsza.
Pozdrowienia

PiotrCn
-
-
Posty:6
Rejestracja:10 mar 2004, o 16:54
Lokalizacja:Radlin

Postautor: PiotrCn » 13 kwie 2004, o 15:51

Przepuść sygnał z kolektora twojego tranzystora przez dwie bramki schmidta układu CD4093 ( kolektor do zwartych pinów 12 i 13 , połacz 8,9 i 11 , sygnał pobierz z 10 , zasilanie oczywiście + na 14 GND na 7 ) .
Jak nie potrzebujesz mieć zgodnosci stanów z Twoim projektem to wystarczy jedna bramka i sygnał wyjsciowy z pinu 11.
To powinno wykluczyć problemy sprzętowe. Ja z reguły daje znacznie większy rezystor polaryzacji fototranzystora ( ok 100kOm) .Ale to zalezy od jasności oświetlenia zakłucającego .

_Wojciech_
-
-
Posty:269
Rejestracja:1 kwie 2003, o 20:32
Lokalizacja:Bielsko-Biała

Postautor: _Wojciech_ » 13 kwie 2004, o 16:33

Rezystor w kolektorze fototranzystora zwiększyłem do 4,7kOhm, ale niczego to nie zmieniło :( Dzięki za rady, na dniach będę miał oscyloskop, to popatrzę co tam się właściwie dzieje,

Wróć do „AVR/AVR32”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości