Witam.
Temat ogólnie znany ale próbowałem pisać różne procedury, przeszukiwałem Elektrodę i niestety nie znalazłem dobrej obsługi enkodera bez używania systemu przerwań (nie pozwala mi na to konstrukcja programu, gdyż innym przerwaniem obsługuję RS'a dla którego bardzo ważne są timingi). Poniżej zamieszczam najbardziej optymalną procedurę (z sieci), która działa dobrze gdy wolno kręci się ośką enkodera ale już przy szybszym tempie, wskazania oscylują wokół ostatniej wartości (jeden w górę, jeden w dół itd.) - procedura "reaguje na zbocze sygnału". Dodatkowo, aby zapobiec drganiom styków między sygnałowe wyprowadzenia enkodera a +5V dałem rezystor 1K a między te wyprowadzenia a masę dałem kondensator 100nF. Nadal nic nie pomaga. MOŻE MACIE JAKIEŚ SPRAWDZONE PROCEDURY OBSŁUGI - bardzo proszę o pomoc i z góry dziękuję... robiw
Temat ogólnie znany ale próbowałem pisać różne procedury, przeszukiwałem Elektrodę i niestety nie znalazłem dobrej obsługi enkodera bez używania systemu przerwań (nie pozwala mi na to konstrukcja programu, gdyż innym przerwaniem obsługuję RS'a dla którego bardzo ważne są timingi). Poniżej zamieszczam najbardziej optymalną procedurę (z sieci), która działa dobrze gdy wolno kręci się ośką enkodera ale już przy szybszym tempie, wskazania oscylują wokół ostatniej wartości (jeden w górę, jeden w dół itd.) - procedura "reaguje na zbocze sygnału". Dodatkowo, aby zapobiec drganiom styków między sygnałowe wyprowadzenia enkodera a +5V dałem rezystor 1K a między te wyprowadzenia a masę dałem kondensator 100nF. Nadal nic nie pomaga. MOŻE MACIE JAKIEŚ SPRAWDZONE PROCEDURY OBSŁUGI - bardzo proszę o pomoc i z góry dziękuję... robiw
Dim Datas As Byte
Dim Current_clk As Bit
Dim Last_clk As Bit
Current_clk = P3.0
Last_clk = P3.0
Do
Set P3.0
Current_clk = P3.0
If Last_clk = 1 Then
If Current_clk = 0 Then
Set P3.1
If P3.1 <> 0 Then Incr Datas
If P3.1 <> 1 Then Decr Datas
End If
End If
Last_clk = Current_clk
'Tutaj jakieś instrukcje programu
loop