Obsługa Impulsatora


0
Ocena: None

Impulsator (Enkoder obrotowy) jest elementem przeważnie stosowanym w układach mikroprocesorowych. Pełni podobną funkcję jak potencjometr w układach analogowych. Zazwyczaj impulsator posiada 3 wyprowadzenia (dwa wyjścia i wyprowadzenie wspólne). Po podłączeniu napięcia zasilania do wyprowadzenia wspólnego podczas kręcenia enkoderem na dwóch jego wyjściach otrzymujemy przebiegi prostokątne przesunięte w fazie o pół okresu.

Od kierunku obrotu zależy który z przebiegów ma jeko pierwszy zbocze narastające. Częstotliwość przebiegów zależy od szybkości kręcenia impulsatora a także od konkretnego egzemplarza (ilosć impulsów na obrót). Zawarte poniżej procedury służą do obsługi takiego właśnie enkodera

Język Bascom 8051

Procedura poniżej współpracuje z impulsatorem podłączonym wyprowadzeniem wspólnym do masy układu:

Impulsator:
 In1 = P3.0
 In2 = P3.1
 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
    Rezultat = 1
    Incr Tryb
   End If
   If In1 = 0 And In2 = 1 Then
    Rezultat = -1
    Incr Tryb
   End If
  Case 2:
   If In1 = 0 And In2 = 0 Then Incr Tryb
  Case 3:
   If In1 = 1 And In2 = 0 Then
    Rezultat = -1
    Tryb = 0
   End If
   If In1 = 0 And In2 = 1 Then
    Rezultat = 1
    Tryb = 0
   End If
 End Select
Return

Do poprawnego działania tej procedury wymagane są zmienne które należy zadeklarować na początku programu:

'//////////// Impulsator  ////////////////////
Dim In1 As Bit , In2 As Bit
Dim Tryb As Byte , Rezultat As Integer
'/////////////////////////////////////////////

Poniżej przedstawione jest przykładowe wywoływanie procedury obsługi impulsatora. Zmienna Wartosc_ustawiana jest zwiększana lub zmniejszana podczas kręcenia impulsatorem:

Do
  Gosub Impulsator
  Wartosc_ustawiana = Wartosc_ustawiana + Rezultat
Loop
End

ZałącznikWielkość
Przykładowy program testowy (Bascom 8051)1.42 KB



Portret użytkownika gosc

Cześć. Moge prosić to w

Cześć.
Moge prosić to w Bascomie:)

Portret użytkownika mirley

Nie rozumiem o co chodzi,

Nie rozumiem o co chodzi, prezentowany kod działa poprawnie i jest napisany w bascomie (tak jak napisałem wyżej)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika neo

hmm?

moze i poprawnie dziala ale przy malych obrotach impulsatora troszke szybszy obrot i niestety z poprawnym dzialaniem niema nic wspolnego ;( dawalem nawet kondensatory 100n przeciw zakluceniom ale dalej niepomoglo ;(

Portret użytkownika mirley

Re: Impulsator

Popatrz na rozwiązanie jakie zastosowałem w układzie http://mirley.firlej.org/cyfrowy_przedwzmacniacz . Miałem tani impulsator za 4 zł i zachowywał się całkowicie inaczej niż taki porządny za kilkanaście złotych. W tym projekcie zobaczysz procedurki dla takiego taniego impulsatora a jak znajdę trochę czasu to zamieszczę odpowiedni fragment kodu także dla niego.

Ps. Kod działa dla dobrego impulsatora który po obrocie o jeden impuls ma raz stany 11 a raz 00. Nie daję na stronę niesprawdzonych kodów źródłowych pisanych na sucho. To wszystko to wycinek z działającego programu.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika neo

Probuje twój kod i dalej nic

Probuje twój kod i dalej nic dodam ze robie to na atmega8 a impulsator to alps (japan) po oborocie o jeden impuls ma 11 a raz 00 tak jak pisales co robie zle ?

$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 24 * 2
 
 
Dim Tryb As Byte , Rezultat As Integer
Dim Wart As Byte
Dim In1 As Bit , In2 As Bit
 
Config Pinb.0 = Input
Config Pinb.1 = Input
I1 Alias Pinb.0
I2 Alias Pinb.1
Set Portb.0
Set Portb.1
 
Cls
Do
Locate 1 , 1
Lcd "wartosc: " ; Wart ; "   "
Locate 2 , 1
Lcd In1 ; " " ; In2
Gosub Impulsator
Wart = Wart + Rezultat
Loop
End
 
Impulsator:
 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
 
Return


Portret użytkownika mirley

Re: Impulsator

Obsługa LCD nie może być bezpośrednio w Do Loop:

Do
Locate 1 , 1                    '<<LCD tu nie może być
Lcd "wartosc: " ; Wart ; " "    '<<LCD tu nie może być
Locate 2 , 1                    '<<LCD tu nie może być
Lcd In1 ; " " ; In2             '<<LCD tu nie może być
Gosub Impulsator
Wart = Wart + Rezultat
Loop

Wyświetlanie LCD zajmuje strasznie dużo czasu i gdy w każdej iteracji pętli głównej ma on to wykonać to poprostu za wolno wywołuje obsługę impulsatora a co za tym idzie gubi obroty itp. Daj jakiegoś ifa który będzie wyswietlał na LCD dopiero np po kliknięciu w przycisk. Lepiej jednak w tym przypadku całą obsługę LCD wywoływać co np 100ms za pomocą flagi ustawianej przez przerwanie

Możesz jeszcze zamiast LCD sprawdzić działanie podłączając do portu kilka diod led i wyświetlać wynik binarnie. Nie spowoduje to znaczących opóźnień.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

wydaje mi sie ze i tak

wydaje mi sie ze i tak wyswietlanie wyniku co 100ms niepomoglo by poniewarz w chwili wyswietlania i tak nastąpiły by opoznienia dla impulsatora ;( a skoro mam juz wykorzystac przerwanie na wyświetlanie LCD to chyba bedzie lepiej zastosowac to przerwanie do impulsatora ?
tzn kanał A do int a kanał B do jakiegos portu i sprawdzac stan np jesli 1 to obrotu w lewo jesli 0 to w prawo tylko czy w takim przypadku da sie wyeliminowac zakłucenia powstajace z drgania styków ? czy raczej dodac kondensatory 100n (port a i masa port b i masa) ? bo wiem ze wyjście INT jest bardzo czułe...

Portret użytkownika mirley

Re: Impulsator

Po pierwsze to "wydawać" to się może jak siedzisz przy piwie :) Trzeba poprostu sprawdzić jak działa lepiej. Tutaj przedstawiam tylko jedno z zapewne bardzo wielu rozwiązań. Poza tym to napisałem abyś wykorzystał przerwanie timera (a nie przerwanie zewnętrzne) i odpowiedni dzielnik na zmiennej aby wygenerować flagę obsługi wyswietlacza (wyświetlacz dalej będzie tam w Do Loop ale odpowiedni if pozwoli go włączyć tylko co jakiś czas). Już tak robiłem z impulsatorem i LCD i nie było problemów. Plik z moim starym programem testowym jest w załączniku.

Ps. Ten pomysł z twoimi wejściami A i B to wytłumacz dokładniej bo nie wiem o co Ci chodzi z kanałem A i B z których jeden podłączony jest do przerwania a drugi do innego portu.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika gosc

int

Masz racje trzeba to przy piwie przemyslec ;) bede probował na diodach tak jak wczesniej pisales a zamiast timera mozna by chyba wykorzystac jakas zmienna ktora po kazdym przejsci do porocedury byla by zwiekszana o 1
oczywiscie niebedzie to tak dokladne jak na timer.

impulsator:
incr A
....
return

do
gosub impulsator
if a > 200 then
a=0
gosub wyswietl_wynik
end if
...
loop

Jesli chodzi o przerwania to pomysl byl taki podlanczam jeden kanal impulsatora do int0
np kanal A i ustawiam aktywowanie przerwania na zbocze opadajace w trakcie przerwania sprawdzam stan drugiego wyjscia

przerwanie:
if B=1 then
incr wartosc
else
decr wartosc
end if
return

i jeszcze jeden mankament zeby w zmiennej Wartosc_ustawiana wartosc zmienila sie o jednen trzeba obrocic impulsator o 2 impulsy

Portret użytkownika mirley

Re: Impulsator

To rozwiązanie z licznikiem co napisałeś jest już troszkę lepsze od poprzedniego. Prześledź jeszcze mój kod przedwzmacniacza cyfrowego, tylko obsługę impulsatora daj tą co tutaj jest. Zobaczysz tam o co chodziło mi z przerwaniami, mimo że nie ma tam LCD

Jak znajdę czas to napiszę taki prosty program testowy z LCD i tu umieszczę. Narazie jednak są święta więc czas na jakiś odpoczynek :)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MULTIMEN

:) wiec chce uzywac

:) wiec chce uzywac impulsatora z programem centrafuse to skorka fronted zamiast explorera obslugujacy multomedia ,gps, etc.... w setupie CF jest mozliwosc przypisania kombinacji klawiszy danej funkcji ja chce uzyc z funkcja poglasniania i sciszania, a takze jak bedzie mozna basy i soprany kozystajac z impulsatora z SW poprzez klikniecie, w trakcie ustwaiania danej fukcji w programie wystarczy kliknac rejestruj i w tym momecie naciniecie klawisza na klawiaturze jest przypisywane do tej funkcji, zrobilem to na usb z klawiatury numeycznej nie przeszkadza potem w uzywaniu klawiatury tekstowej czy cyfr podczas dzwonienia, do poglasniania uzylem Num 8 do sciszania Num 2 do przewijania mp3 nastepna podpiolem do Num 6 a cofnij do Num 4 wszytko na mikroswiczach jesli da sie w ATTiny 2313 zrobic tak by sterowal jak ta klawiatura numeryczna podajac na wejscie PS/2 kody tych klawiaszy bylo by fajnie zaoszczedzil bym USB jesli nie to wystarcz jak ATTiny bedzie podawal impulsy na diody porzy kreceniu impulsatorem a ja je sobie odpowiednio podepne do plytki z orginalnej klawiatury nie wiem jaki ma chip bo to tylko plama z zywicy na plytce :) w razie co moge narysowac w przebiegach 0 , 1 jak mialoby to dzialac

Portret użytkownika multimen

to moze narysuje diagram jak

to moze narysuje diagram jak ma to funkcjonowac bedzie berdziej zrozumiale :) juz obczailem na allegor impulsatory za 2,8zl jedne ma 20 impulsow na obrot drogi ma 30 impulsow na obrot rozniia sie tez oska jedna jest karbowana 2 jest z nacieciem

Portret użytkownika mirley

Re: Impulsator ATTiny2313

Żeby zrobić coś co wysyła znaki po PS/2 to muszę co nie co o tym poczytać. Najlepszy byłby RS232 bo to już wiem. Ewentualnie przejściówka RS232 na USB. Nie wiem tylko czy twój program ma możliwość sterowania przez RS232.

Jeśli była by mozliwość sterowania klawiszami poprzez zwieranie transoptorem odpowiedniej linni to z pewnością było by to łatwiejsze do zrobienia.

Zapiszę sobie na stronie głównej projekt do realizacji ale nie mogę zapewnić żadnego sensownego terminu realizacji.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika multimen

:) moze bylby potrzebny jakis

:) moze bylby potrzebny jakis plugin co do rs232 to mam 4 posty COM wolne :) byloby latwo podlaczyc tylko jak przypisac to klawiaturze :) w smumie to ja mam klawiaturke tylko musze miec cos co zastpi palec ktory naciska klawiasz przy pomocy impulsatora bo sam ipulsator przy kreceniu naciska oba klawiasze tylko w rozych odstepach czasu a musi naciska raz w jeden raz 2 :) oczywiscie za pomoca transoptora

Portret użytkownika mirley

Re: Impulsator

To żeby pojawiały się impulsy na jednym wyprowadzeniu przy kręceniu w prawo a na drugim przy kręceniu w lewo poprzez transoptor nie jest problemem jeśli dasz rady podłączyć to pod odpowiedni klawisz w klawiaturze.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika neo

ps2

witam z tego co pamietam BASCOM obsluguje klawiatore ps2 jest gotowa komenda. A jesli chodzi o ten impulsator to dziala ok ale trzeba obrucic o 2 impulsy zeby zmienic wartosc o 1
probowalem jeszcze na przerwaniach zrobic programik ale niewiem czego jak skonfiguruje w bascomie przerwanie na zbocze opadajace to niedziala tak jak powinno ! czyli dziala na zbocze opadajace i narastajace :/ i gdzies mi sie obilo o uszy ze ta komenda w bascomie niedziala zadobrze dla atmegi :/ albo ja cos robie nie tak ale podlanczam przycisk do masy druga nozka do INT0 wlanczam rezystor podciagajacy ustawiam przerwanie na falling i jak wcisne przycisk nastepuje przeskok do podprogramu tak jak powinno byc ! ale niestety jak puszcze to tez nastepuje przeskok do podprogramu :/

Portret użytkownika mirley

Re: Impulsator Ps2 itp

Tak wiem że jest gotowa komenda ale nie znaczy że bedzie mi działać, więc napisałem że musze potestować troszkę. A tak wogóle to ta komenda chyba odbiera znaki z klawiatury a nie wysyła do komputera. Ale mniejsza o to, będę się nad tym zastanawiał jak przyjdzie odpowiedni czas.

Odnośnie impulsatora to też tak miałem kiedyś ale drugi kod który umieściłem powinien załatwić sprawę bo u mnie działa w przedwzmacniaczu cyfrowym wszystko.

Odnośnie przerwań to jeśli masz podłączony przycisk do int i rezystorem podciągnięty do +vcc to drgania styków pewnie załatwiają Ci mnóstwo przerwań na opadającym zboczu. Dodaj kondensator równolegle do przycisku i zobacz efekt. Ja przerwania testowałem przy okazji układu wykrywania zera. Liczyło dokładnie 100 zer na okres w sieci :)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MULTIMEN

:) to by wystarczylo i

:) to by wystarczylo i wymyslilem ze skoro uzyc mam ATTiny2313 i zeby wykozystac wiecej wyjsc to te wyjscia parami rozszerzyc do 3 par +/- wybieranych sekwencyjnie kliknieciem impulsatora z warunkiem zeby po 5 sek samoczynie wracalo do pierwszej pary jesli sie nie kliknie albo nie obroci impulsatora, wtedy mialbym regolacje glosnosci a jak bede chcial regolowac basy albo soprany to sobie klikna raz albo 2 razy wtedy bylo by idealnie, z podlaczeniem transoptorow nie bedzie problemu bo teraz mam kabelki zakonczone mikrostykami i klikam na kazdy oddzielnie :), tylko miejscia z przodu malo i duzo klawiszy sie nie zmiesci a impulsator mi zastepuje 6 przyciskow w takim ukladzie jw. :) mysle ze to nie bylo by trudne do zrobienia a juz cudownie by bylo jakby mozna bylo jeszcze sterowac 3 kolorowa dioda zgodnie z sekwecja by sie zmienial kolor za kazdym nacisnieciem pokretla gdzie w spoczynku czyli glosnosc by mogla swiecic zielona, po jednym kliku basy czerwona i po nastepnym kliku niebieska soprany :)

Portret użytkownika mirley

Re: Impulsator

Takie rozwiązanie da się wykombinować, tylko trochę czasu potrzebuje bo aktualnie go nie mam. Zresztą nie będę się powtarzał bo już od dawna nie mam dużo czasu :)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika MULTIMEN

OK :) az tak mi sie nie

OK :) az tak mi sie nie spieszy impulsatorek bede mial najwczesniej w polowie maja :) co myslisz o PCDIMMER i sterowniku DMX znalazlem na necie interface na ATmega8 przez usb steruje dimmerami na triakach poprzez ATTiny2313 Program wyglada na dobry http://www.pcdimmer.de :) mysle ze moze to dzialac shcematy i wsady sa do scagniecia sterowniki do wina i rozne pluginy :), bede zagladal czasem :) tez mam mase roboty i na wlasne sprawy mniej :) WIEC CIE ROZUMIE :) pozdrowionka

Portret użytkownika neo

impuls

Witam interesuje mnie taki programik do obslugi impulsatora ale na procek -> attiny12 <- jest to wogule mozliwe ?? on niema sram-u a mam tylko atmege8 troche zaduza na taki prosty programik chodzi mi tylko zeby podawalo na pinach impulsy czyli jak krece w prawo to na jednym pinie podaje impulsy a jak krece w lewo to na drugim , attiny12 by sie do tego nadawal bo tylko 8 pinow akurat tyle ile trzeba ..

Portret użytkownika mirley

Re: impuls

Nie da się napisać takiego programu w bascomie, bo potrzebny jest RAM na zmienne. Może dałoby się w asemblerze ale nie znam tego języka.

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika neo

ale na attiny13 nie powinno

ale na attiny13 nie powinno byc problemu ???

Portret użytkownika mirley

Re: Impulsator

Nie tylko nie powinno być problemu ale wręcz nie ma problemu bo już taki układ zrobiłem tutaj

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika neo

i własnie o to mi chodziło

i własnie o to mi chodziło :D

Portret użytkownika joy_pl

Ostatnio bawiłem się

Ostatnio bawiłem się impulsatorami takimi najtańszymi z allegro chyba po 2,4pln szt. i mam trochę inne rozwiązanie, trochę szybsza reakcja. Mój wycinek programu zlicza każdą zmianę stanu, każdy impuls, potrzebuje tylko dwóch zmiennych bitowych (opcjonalnie dodatkowej zmiennej do zliczania)...

Impulsator:
Do
  If Pi1 = 0 And Pi2 = 0 Then
    I1 = 0
    I2 = 0
  End If
 
  If Pi1 = 1 And Pi2 = 1 Then
   I1 = 1
   I2 = 0
  End If
 
If I2 = 0 Then
 If Pi1 <> I1 Then
  Waitms 2
  If Pi1 <> I1 Then
'   Incr L
   Gosub Plus
   I2 = 1
  End If
 End If
 
 If Pi2 <> I1 Then
  Waitms 2
  If Pi2 <> I1 Then
'   Decr L
   Gosub Minus
   I2 = 1
  End If
 End If
  Locate 2 , 5                                                'wyświetlanie wyniku
  Lcd ; L ; "    "                                            'można pominąć
End If
 
'Powrut do petli glownej moze byc tez polecenie "Return"
 Debounce Sw , 0 , Poczatek
Loop
 
'podprogramy obrotu w lewo i prawo
Plus:
 Incr L                                                       'Zwiększa zmienna "L"
Return
 
Minus:
 Decr L                                                       'Zmiejsza zmienną"L"
Return

Proste jak budowa cepa. Szukając innych rozwiązań obsługi impulsatora znalazłem tą stronę, więc zamieszczam tu swój programik dla innych szukających...

Jeszcze deklaracje (te są akurat pod 8051, ale to nie ma większego znaczenia dla głównego programu):

'Zmienne impulsatora
Dim I1 As Bit
Dim I2 As Bit
Dim L As Word                                             'lub inny rodzaj     
 
'Aliasy impulsatora                          'pin 2 impulsatora podpięty pod mase (GND)
Pi1 Alias P2.1                                                'pin 1 impulsatora
Pi2 Alias P2.2                                                'pin 3 impulsatora
 
Sw Alias P2.3                                                'swich impulsatora

Pzdr.
Joy_pl

Portret użytkownika qwerty

Zmiana na impulsator

Witam
Wcześniej pisałem w temacie o sterowniku do wytrawiarki PCB. I mam mały problem. O tuż chciał bym zamienić mikro styki z tego projektu: Trawiarka plytek na impulsator. Nie mogę sobie poradzić z ta częścią kodu.

'***********************************************
'*****************  Przyciski     **************
Przyciski:
  If Sw1 = 0 And Tu <= 600 Then Incr Tu
  If Sw2 = 0 And Tu >= 250 Then Decr Tu
Return

Co muszę zrobić aby zadziałał impulsator?

Pozdrawiam

Portret użytkownika mirley

Re: Impulsator

Wstawić na końcu programu

Impulsator:
 In1 = P3.0
 In2 = P3.1
 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
    Rezultat = 1
    Incr Tryb
   End If
   If In1 = 0 And In2 = 1 Then
    Rezultat = -1
    Incr Tryb
   End If
  Case 2:
   If In1 = 0 And In2 = 0 Then Incr Tryb
  Case 3:
   If In1 = 1 And In2 = 0 Then
    Rezultat = -1
    Tryb = 0
   End If
   If In1 = 0 And In2 = 1 Then
    Rezultat = 1
    Tryb = 0
   End If
 End Select
Return

zadeklarować potrzebne zmienne i w pętli głównej dac wywołanie do procedury impulasatora. Wszystko jest napisane wyżej. Nazwy pinów tylko musisz dać odpowiednie dla procesora.

Tak czy inaczej nawet jak to zrobisz to nie pójdzie to na tiny2313 który dałem w sterowniku trawiarki bo za mało miejsca na program

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika qwerty

Witam Tak właśnie zrobiłem

Witam
Tak właśnie zrobiłem jak piszesz, tylko nie wiem jak w pętli głównej dać wywołanie do procedury impulasatora.
Kod wygląda tak:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m16def.dat"
$crystal = 8000000
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11000111 : Portd = &B11111111
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2
 
'***************** Powietanie ******************
'***********************************************
Cursor Off Noblink
Cls
Lcd "   WYTRAWIARKA"
Lowerline
Lcd "   PLYTEK  PCB"
Wait 4
'************ Koniec powitania *****************
 
Cls
Config 1wire = Pind.2
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Grzalka Alias Portd.6
In1 Alias Pind.3                                            ' Dodatni
In2 Alias Pind.4                                            ' Ujemny
Buzzer Alias Portd.0
Pompka Alias Portd.1
 
Config Watchdog = 2048
Enable Interrupts
'********** Konfiguracja uC Koniec  ************
 
'************ Wyświetlanie znakow **************
'***********************************************
Lcd "T1:      T2:"
Lowerline
Lcd "Grzanie:"
'************ Koniec wiświetlania **************
 
'******************  Zmienne *******************
'***********************************************
Dim In1 As Bit , In2 As Bit
Dim Tryb As Byte , Rezultat As Integer
 
Dim Dziel(2) As Byte
Dim Flaga_1s As Bit , Flaga_100ms As Bit
 
Dim Hb As Byte , Hw As Word                                 'globalne uniwersalne zmienne pomocnicze
Dim N As Byte                                               'pomocnicza
 
Dim Tt As Word                                              'zmienna pomocnicza do wyświetlania liczb typu xx.x na lCD
Dim Tm As Word , Tu As Word
Dim Tdif As Integer
Dim Pomiar_odczyt As Bit
Dim Ster_licz As Byte
Dim Ster As Byte
'*************  Zmienne Koniec  ****************
 
'************ Warunki Poczatkowe ***************
'***********************************************
Tu = 400
Start Watchdog
'*******  Warunki Poczatkowe Koniec  ***********
'**************  Petla glowna ******************
'***********************************************
Do
 '***********************************************   co 100ms
  If Flaga_100ms = 1 Then
    Flaga_100ms = 0
    Gosub Przyciski
    Gosub Wysw_lcd
  End If
  '***********************************************
  '***********************************************   co 1s
  If Flaga_1s = 1 Then
    Flaga_1s = 0
    Reset Watchdog
    Gosub Temperatura
    Gosub Sterowanie
  End If
 
  If Grzalka = 0 Then
   Locate 2 , 10
   Lcd "ON "
   Else
  If Grzalka = 1 Then
   Locate 2 , 10
   Lcd "OFF"
  End If
  End If
 
  Gosub Impulsator
  Wartosc_ustawiana = Wartosc_ustawiana + Rezultat          ' Jak wywołać procedure impulsatora?
  '***********************************************
Loop
End
'*********** Petla glowna Koniec **************
 
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:
 Timer0 = 131
  Incr Dziel(1)
  If Dziel(1) = 25 Then                                     'liczy 25 przerwań czyli 100ms i ustawia flage
    Dziel(1) = 0
    Set Flaga_100ms
    Incr Dziel(2)
    If Dziel(2) = 10 Then                                   'liczy 10 razy po 25 przerwań czyli 1s
      Dziel(2) = 0
      Set Flaga_1s
    End If
  End If
Return
'******** Przerwanie timer 0 Koniec ************
Temperatura:
  Pomiar_odczyt = Not Pomiar_odczyt
  Disable Interrupts
  1wreset
  If Pomiar_odczyt = 1 Then
    1wwrite &HCC
    1wwrite &H44
  Else
    1wwrite &HCC
    1wwrite &HBE
    Tm = 1wread(2)
    Tm = Tm * 10
    Tm = Tm / 16
  End If
  Enable Interrupts
Return
'***********************************************
'*****************  Sterowanie    **************
Sterowanie:
  Tdif = Tu - Tm
  Tdif = Tdif + 7
  If Tdif <= 0 Then
    Ster = 0
  Else
    Ster = Tdif
    If Ster > 50 Then Ster = 50
  End If
 
  Incr Ster_licz
  If Ster_licz = 50 Then Ster_licz = 0
  If Ster_licz < Ster Then Reset Grzalka Else Set Grzalka
 
  If Tm >= 600 Then
    Set Grzalka
    Toggle Buzzer
  Else
    Buzzer = 1
  End If
 
  If Tm <= 300 Then
    Pompka = 1
  Else
    Pompka = 0
  End If
 
Return
'***********************************************
'*****************  Przyciski     **************
Przyciski:
  If Sw1 = 0 And Tu <= 600 Then Incr Tu
 
  If Sw2 = 0 And Tu >= 250 Then Decr Tu
 
Return
'***********************************************
Wysw_lcd:
  Locate 1 , 4
  Tt = Tm
  Gosub Showt
 
  Locate 1 , 13
  Tt = Tu
  Gosub Showt
 
  Locate 2 , 15
  If Ster < 5 Then Lcd " "
  Lcd Ster
Return
 
Showt:
 Hw = Tt / 10
 Lcd Hw ; "."
 Hw = Tt Mod 10
 Lcd Hw
Return
 
Impulsator:
 In1 = Pind.3
 In2 = Pind.4
 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
    Rezultat = 1
    Incr Tryb
   End If
   If In1 = 0 And In2 = 1 Then
    Rezultat = -1
    Incr Tryb
   End If
  Case 2:
   If In1 = 0 And In2 = 0 Then Incr Tryb
  Case 3:
   If In1 = 1 And In2 = 0 Then
    Rezultat = -1
    Tryb = 0
   End If
   If In1 = 0 And In2 = 1 Then
    Rezultat = 1
    Tryb = 0
   End If
 End Select
Return

Miejsca na programik starczy bo używam atmega16. :)

Pozdrawiam

Portret użytkownika mirley

Re: Impulsator

Właśnie w tym miejscu trzeba by to było dac co dałeś. Z tym że zamiast:

Wartosc_ustawiana = Wartosc_ustawiana + Rezultat

trzeba wstawić obsługę akcji po przekręceniu. jak nic nie przekręcone to zmienna rezultat jest 0 jak kręcisz w prawo to zmienna przyjmie wartość +1 a jak w lewo to -1. Więc trzeba zrobić coś takiego:

if rezultat = 1 then
 'zwiększanie parametru + ify w zależnosci od pozycji menu
  rezultat = 0
end if
if rezultat = -1 then
 'zmniejszanie parametru + ify w zależnosci od pozycji menu itp
  rezultat = 0
end if

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika qwerty

Witam Chodzi ci o coś

Witam

Chodzi ci o coś takiego?

Gosub Impulsator
  if rezultat = 1 then
   Select Case Poz_menu
    Case 0:
      If Rezultat = 1 Then
        If Sw1 < 254 Then Incr Sw1
      Else
        If Sw1 > 224 Then Decr Sw1
       Rezultat = 0
    End If
 
  Select Case Poz_menu
    Case 1:
      If Rezultat = -1 Then
        If Sw2 > 254 Then Incr Sw2
      Else
        If Sw2 < 224 Then Decr Sw2
      Rezultat = 0
      End If

Obecnie wyskakują błędy w tym.

Pozdrawiam

Portret użytkownika mirley

Re: Impulsator

Raczej tak

if rezultat = 1 then
  Select Case Poz_menu
    Case 0:
      'zwiększ coś
    case 1:
      'zwiększ coś innego
  End select
  rezultat = 0
end if
 
if rezultat = -1 then
  Select Case Poz_menu
    Case 0:
      'zmniejsz coś
    case 1:
      'zmniejsz coś innego
  End select
  rezultat = 0
end if

błędy wyskakują bo end select nie masz nigdzie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika qwerty

Witam Zrobiłem tak: Gosub

Witam
Zrobiłem tak:

Gosub Impulsator
If Rezultat = 1 And Tu <= 600 Then Incr Tu
If Rezultat = -1 And Tu >= 250 Then Decr Tu

Jakoś to działa. Ale jest mały problem bo jak delikatnie przekręcę, ale nie do końca jednego skoku to już mi zwiększa temperaturę lub zmniejsza, zależności w którą stronę kręcę. Wydaje mi się że to jest wina impulsatora bo ma małe luzy.
Natomiast gdy na kończy dam
rezultat = 0

Impulsator kompletnie przestaje działać.

Portret użytkownika mirley

Re: Rezultat

Jak teraz patrze to faktycznie nie trzeba dawać tego rezultat=0 bo na samym początku obsługi impulsatora wartośc ta jest resetowana. Zamień jeszcze procedurę na tą poniżej. Są różne impulsatory....

Impulsator:
 In1 = Pind.3
 In2 = Pind.4
 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
Return

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika qwerty

Witam Jeżeli chodzi o reakcje

Witam
Jeżeli chodzi o reakcje co opisywałem wyżej to się poprawiło ale teraz są dwa małe problemy które nie zawsze występują.
1) Czasami kręcąc impulsatorem do góry to czasami potrafi najpierw zjechać o 0.3 stopnia w duł, a później normalnie w górę.
2) Jak się przekręci szybciej impulsator to procesor nie nadąża wyłapać wszystkie impulsy.

Portret użytkownika mirley

Re: Imulsator

Spróbuj dołożyć dwie pojemności po 100nF ad dwóch wejść impulsatora do masy

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika pawel3008

Witam Próbuje napisać

Witam
Próbuje napisać program do sterowania silnika dc + enkoder sterowany dwoma sygnałami Step i dir przy czym mam problem z obsługą enkodera, posiadam enkoder o impulsacji 1000 imp/obr przy szybszym obrocie są pomieszane sygnały tzn. nie rozpoznaje kierunku kręcenia nie moge poradzić sobie z tym problemem jak bym mógł prosić o podpowiedz był bym wdzięczny

Pozdrawiam

Portret użytkownika mirley

Re: Impulsator

Procedura tutaj zawarta nie nadaje się do precyzyjnych ani szybkich zastosowań.... trzeba zastosować przerwanie zewnętrzne i operację xor do wykrywania kiedy został impulsator przekręcony i w którą stronę

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Marian84384268

Impulsator

Witam. Czy impulsator do radia Audi Chorus za 40 zł nie posiada zjawiska drgania styków?. Pozdrawiam.

Portret użytkownika EDC

Odp. Impulsator

Jest uczciwiej wykonany. To pewnie Alps. W środku normalne styki, ale precyzyjniejsza mechanika. Cena mówi sama za siebie. Mam tylko nadzieję że kolega nie chce w ten sposób tego radia naprawić bo tam powodem dziwnego zachowania implsatora jest uszkodzona pamięć eeprom w procesorze.

-

BARTek
Moja strona

Portret użytkownika Marian84384268

Enkoder do radia Audi Chorus

Witam. Mam pytanie w sprawie sprzedawanych na allegro enkoderach do radia Audi Chorus za 40zł. Link: http://allegro.pl/radio-audi-concert-chorus-1-impulsator-enkoder-i4106444628.html. Moje pytanie: czy taki enkoder warto kupić, bo nie chcę mieć zjawiska drgania styków?
Pozdrawiam.

Portret użytkownika Marian84384268

Impulsator

Nie, to nie do radia, tylko do wzmacniacza własnej roboty na TDA7560+TDA7313+ATMega8. Chodzi mi tylko, by nie było drgania styków. Dzięki za odp. i pozdrawiam.

Portret użytkownika kw

We wszystkich mechanicznych

We wszystkich mechanicznych impulsatorach (przyciskach czy włącznikach występuje drganie styków przy przełączaniu). Jeśli to takie ważne kup optyczny- jest kilka na all... ale i ceny wysokie.

Portret użytkownika gazmajster

impulsator

jak u mnie Twoja procedura obsługi impulsatora lepiej działa od "fabrycznej bascomowej"
gdzie jej użyłem w modyfikacji kitu avt3143
Pozdrawiam,
gaz