Działanie:Schemat ideowy układu znajduje się na rysunku poniżej:
Sercem układu i jedyną jego aktywną częścią jest mikrokontroler U1 (ATTiny13). Kondensator C1 (100nF) filtruje zasilanie, a kondensatory C2 (100nF) i C3 (100nF). poprawiają pracę impulsatora, zmniejszając wrażliwość całego układu na fałszywe impulsy. Złącze Prog (Goldpin) jest złączem programującym ale po zaprogramowaniu procesora, wyprowadzenia MOSI i MISO tego złącza stanowia wyjście całego Enkodera. Złącze Sw(goldpin) stanowi wyprowadzenie przycisku impulsatora, jeśli jest on w niego wyposażony. Układ powinien być zasilany stabilizowanym napięciem 5V (plus podłączamy do +5V) za pomocą złącza Zas (goldpin) Budowa:Układ z powodzeniem można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Lutowanie należy rozpocząć od procesora U1, w drugiej kolejności montujemy kondensatory, a na końcu impulsator i goldpiny. Goldpiny muszą być wlutowane od strony druku (patrz na zdjęcia) aby umożliwić łatwe dołączenie przewodów. W przeciwnym wypadku będzie problem z przykręceniem impulsatora do obudowy. W przypadku kłopotów z lutowaniem ich w takiej pozycji można przewody przylutować bezpośrednio do płytki. Przy montażu należy zwrócić uwagę z której strony montujemy elementy i zastosować odpowiedni schemat montażowy (szczególnie dotyczy to mikrokontrolera). Pomocą w konstrukcji może okazać się schemat montażowy dostępny tutaj. Dla montażu SMD pomocny będzie także rysunek montażowy w odbiciu lustrzanym, dostępny tutaj Układ Enkodera jest tylko dodatkiem do juz istniejącego sprzętu a zatem należy go odpowiednio podłączyć do współpracy z innymi urządzeniami. Pomocą będzie rysunek niżej:
Wykaz Elementów:1x Impulsator z przyciskiem Programowanie:Kod Źródłowy do enkodera został napisany w BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej: '************* Konfiguracja uC ***************** '*********************************************** $regfile = "attiny13.dat" $crystal = 9600000 Config Portb = &B11100111 : Portb = &B11111111 $hwstack = 20 $swstack = 10 $framesize = 40 I1 Alias Pinb.3 I2 Alias Pinb.4 O1 Alias Portb.0 O2 Alias Portb.1 Config Timer0 = Timer , Prescale = 256 Enable Timer0 : On Timer0 Prztimer0 Enable Interrupts '********** Konfiguracja uC Koniec ************ '****************** Zmienne ******************* '*********************************************** Dim In1 As Bit , In2 As Bit Dim Tryb As Byte , Rezultat As Integer Dim Licz_sw As Byte Dim Impuls As Byte , Stan_wyjsc As Byte Dim F_6ms As Bit Dim Port As Byte '************* Zmienne Koniec **************** '************** Petla glowna ****************** '*********************************************** Do In1 = I1 In2 = I2 Rezultat = 0 Select Case Tryb Case 0: If In1 = 1 And In2 = 1 Then Incr Tryb 'jezeli dwa rozwarte Case 1: If In1 = 1 And In2 = 0 Then Tryb = 2 If In1 = 0 And In2 = 1 Then Tryb = 3 Case 2: If In1 = 0 And In2 = 1 Then Rezultat = 1 Tryb = 0 End If Case 3: If In1 = 1 And In2 = 0 Then Rezultat = -1 Tryb = 0 End If End Select Waitus 100 If Rezultat <> 0 Then If Rezultat = 1 Then Set O1 Reset O2 Else Set O2 Reset O1 End If End If If F_6ms = 1 Then F_6ms = 0 If O1 = 0 Or O2 = 0 Then Incr Impuls If Impuls = 15 Then Impuls = 0 O1 = 1 O2 = 1 End If Else Impuls = 0 End If End If Loop End '************ Petla glowna Koniec ************** '************ Przerwanie timer 0 *************** '*********************************************** Prztimer0: Timer0 = 5 Set F_6ms Return '******** Przerwanie timer 0 Koniec ************ Poniższy rysunek przedstawia ustawienia Fusebitów dla ATTiny13 (zrzut z programu Burn-O-Mat):
Zdjęcia Projektu:
|
|||||||||||||||||||||||||||


Nazwa tego urządzenia może wydawać się myląca ale jest to poprostu konwerter zamieniający sygnał z impulsatora na dwa sygnały (impulsy w lewo i w prawo). Dwa przebiegi przesunięte w fazie o połowe okresu, generowane przez impulsator są zamieniane na impulsy na dwóch wyjściach. Na jednym pojawiają się przy obrocie w prawo a na drugim przy obrocie w lewo. Całe urządzenie zostało zaprojektowane na niewielkiej płytce drukowanej, w którą bezpośrednio wlutowany jest impulsator. Nad sterowaniem całością czuwa mikrokontroler 











Jak tego dokonałeś ???
Jak jest możliwe dodać tyle zmiennych na ATTiny13 ???
Ja nie mogę dodać jednej Byte. A ty 5 typu Byte , 1 INTEGER! i kilka BIT !!!
Pozdrawiam.
PS: Telephone 792834647
http://www.youtube.com/user/Hubert7323
Ciekawe filmy z urządzeniami mojej konstrukcji.
Re: Tiny2313
Zmniejszyłem rozmiar stosu i uwolniłem kilka bajtów ramu:
nie można przez to robić wielu skoków do podprogramów ani etkiet gosub. Przez co wszystko jest włożone bezpośrednio w do loop
:: Zapoznaj się z regulaminem :: Załóż konto! :: Wesprzyj stronę
?
Witam.
Dzięki za odpowiedź. To bardzo pomogło rozwojowi mojej wiedzy na temat Bascoma.
http://www.youtube.com/user/Hubert7323
Ciekawe filmy z urządzeniami mojej konstrukcji.
Prosze o pomoc!
Witam.
Zastosowałem ten enkoder z attiny13 do potencjometru cyfrowego DS1802 i mam problem, mianowicie aby zgłosic lub z ciszyć muszę sporo sie nakręcić impulsatorem; DS1802 ma 65 posyzji; czy da rade zmienić program w taki sposób aby przekręcając impulsator o 360 stopni, zwiększyło amplitude na maksymalny poziom.
Nie znam Bascoma dlatego proszę o pomoc.
Z góry dziękuję
Re: Impulsator
Można zastosować impulsator o większej liczbie impulsów na obrót. Nad programem trzeba się głębiej zadumać mimo jego prostoty
:: Zapoznaj się z regulaminem :: Załóż konto! :: Wesprzyj stronę
Program impulsatora
Witam :)
Układ wykonałem na płytce testowej i okazało się, że układ ma wadę...
Mianowicie nie jest "odporny" na szybkie kręcenie się impulsatora lub szybką zmianę kierunku...
Posiedziałem, pomyślałem i wymyśliłem :)
Podaję kod który działa bardzo ładnie.
Pracę impulsatora należy wcisnąć w postaci podprogramu - tak najlepiej.
Sprawdzone i potwierdzone praktycznie :)
Techniczne: impulsator podaje impulsy w postaci jedynek - czyli impulsu 5v zasilania układu, wejścia muszą być podciągnięte opornikami 10k do masy - można wykonać programowo ale ja wolę dolutować opornik :P
Układ działa w taki sposób, że zwiększa lub zmiejsza liczbę w zakresie 0-255
Łatwo można go też przerobić aby działał jak układ przedstawiony powyżej.
Mam nadzieję, że się przyda do dalszej zabawy ten kod :)
Dodatek
Popijając "złoty trunek" zmieniłem podprogramik 'wys' w taki sposób, że na określonych portach pojawiają się impulsy - kiedy kręcę w jedną stronę to mryga dioda zielona kiedy w drugą to dioda czerwona. Dioda świeci przez 30 ms i gaśnie - oczywiście można ten czas zmienić w zależności od potrzeby.
Oczywiście kod jest w pełni "odporny" szybkie kręcenie impulsatorem lub szybką zmianę kierunku obrotu.
Załączam kod - oczywiście w Bascomie :)
Pozdrawiam! :)
Re: Enkoder
na jakim procesorze było to testowane? Ma to zadziałać w Tiny 13 w którym można zrobić jedną może dwie zmienne. Odpornośc na bardzo szybkie kręcenie lub szybką zmianę kierunku akurat w tym przypadku nie mają znaczenia ale dzięki za fragment kodu. potestuje w swoim zakresie w kolejnych konstrukcjach z impulsatorem.
tak na marginesie to twój kod tez ma wady a mianowicie program wisi w pętli głównej czekając na zmianę stanu impulsatora, ale w zalezności od zastosowania należy korzystać z róznych rozwiązań
:: Zapoznaj się z regulaminem :: Załóż konto! :: Wesprzyj stronę
Programik
Testowałem to na atmega8 z częstotliwością 8MHz.
Ale jestem przekonany, że będzie działało na attiny13.
W programie to zaledwie jedna zmienna...
A kolega użył w swoim aż (nie wiem czy prawidłowo liczę) 8 zmiennych i do tego jeszcze timer0... :P
Mój program na 99% będzie śmigał na attiny13 w układzie pierwotnego projektu powyżej :)
Co do polecenia 'bitwait' no jest to mała wada ale wciskając sterowanie impulsatora w podprogram nie jest to żaden problem ponieważ zmieniamy wartość zmiennej i wychodzimy z podprogramu i jest gitara :)
Post new comment