Azoknak, akik nem tudják mi az a rotary encoder itt van a link, itt van kapcs. rajz, videó+képek
rotary encoder + Bascom
- puzzafutar
- DrótVégénSzéndarab
- Hozzászólások: 47
- Csatlakozott: 2007. május 13. vasárnap, 6:00
rotary encoder + Bascom
Sziasztok! Talán többeket is érdekel a HDD motorból készűlt rotary encoder építése. a youtube-on van pár ilyen videó. Nekem a hardware megvan és működik is, de belefutottam egy programozói gondba..... Mégpeddig, hogy ha egyik irányba forog a motor, akkor elöbb az első utánna a másik megszakítás lép életbe, ha fordítva forgatom, akkor fordított sorrend lépnek életbe. Ezt nem tudom kitalálni, hogy a Megszakítások sorrendjét hogyan rögzítsem. Én olyan elven indúltam el, hogy kellene egy 2 elemű verem, amely mindig a legfrisebb 2 értéket jegyzi meg, a régebbieket eldobja, de ezt nem tudom, hogy Bascom alatt hogyan lehetne megvalósítani. Ebben kérem a segítségeteket és abban hogy jó felé tapogatózok-e.
Azoknak, akik nem tudják mi az a rotary encoder itt van a link, itt van kapcs. rajz, videó+képek
http://www.fleurey.com/franck/pmwiki.ph ... HDDEncoder
Azoknak, akik nem tudják mi az a rotary encoder itt van a link, itt van kapcs. rajz, videó+képek
Valami jelalak nem ártana. Átfedett a két jel vagy külön-külön jön?
Ha átfedett akkor elég egy "előző" meg "most" változó, ha a 2 egyenlő, akkor nem történt semmi, ha nem, akkor kilogikázod, hogy merre forgott (lépett) egyet. Ha nagyon pipeckedni akarsz, akkor ez egy 16 lépéses tábla lesz, ott már lesz 4/4-es felbontásod és Error jeled is.
JAni
Ha átfedett akkor elég egy "előző" meg "most" változó, ha a 2 egyenlő, akkor nem történt semmi, ha nem, akkor kilogikázod, hogy merre forgott (lépett) egyet. Ha nagyon pipeckedni akarsz, akkor ez egy 16 lépéses tábla lesz, ott már lesz 4/4-es felbontásod és Error jeled is.
JAni
- puzzafutar
- DrótVégénSzéndarab
- Hozzászólások: 47
- Csatlakozott: 2007. május 13. vasárnap, 6:00
Igazából a jelet veszi, csak a feldolgozással van problémám.
Úgy néz ki a dolog, hogy 2 int lábon jön a mikrovezérlőbe a 2 jel, és ennek a két jelnek a sorrendjére apellálok. mert egymás után jönnek az impulzusok, csak ha frodított sorrendben, akkor fordítva is forog. a jelek nem átfedettek, külön-külön kis egymás utánni impulzus
Úgy néz ki a dolog, hogy 2 int lábon jön a mikrovezérlőbe a 2 jel, és ennek a két jelnek a sorrendjére apellálok. mert egymás után jönnek az impulzusok, csak ha frodított sorrendben, akkor fordítva is forog. a jelek nem átfedettek, külön-külön kis egymás utánni impulzus
http://www.engr.mun.ca/~dpeters/6806/po ... ncoder.pdf
Ezt nézd meg. Mindig csak két bitet kell vizsgálni az egymást követő mintákból, a bitek XOR kapcsolatának értéke adja meg a forgás irányát
Régebben még FastAVR-ben írtam így egy programot, és remekül működött.
Ezt nézd meg. Mindig csak két bitet kell vizsgálni az egymást követő mintákból, a bitek XOR kapcsolatának értéke adja meg a forgás irányát
Régebben még FastAVR-ben írtam így egy programot, és remekül működött.
- puzzafutar
- DrótVégénSzéndarab
- Hozzászólások: 47
- Csatlakozott: 2007. május 13. vasárnap, 6:00
Köszönöm a PDF-et, áttanúlmányoztam, de nem tudtam belőle kihámozni, hogy hogyan kapom meg az irányt. Ott akadtam el, hogy
(egyik irány)
1100110011
0110011001
ebből XOR művelettel:
1010101010
(másik irány)
1100110011
1001100110
ebből XOR:
0101010101
Ebből hogyan kapom meg az irányt? meg sem tudom különböztetni a 2 jelsorozatot.
(egyik irány)
1100110011
0110011001
ebből XOR művelettel:
1010101010
(másik irány)
1100110011
1001100110
ebből XOR:
0101010101
Ebből hogyan kapom meg az irányt? meg sem tudom különböztetni a 2 jelsorozatot.
Szia Puzzafutar
Ezen az oldalon is foglalkoznak vele, sample is van.
http://www.qsl.net/pa3ckr/bascom%20and% ... index.html
Üdv Roland
Ezen az oldalon is foglalkoznak vele, sample is van.
http://www.qsl.net/pa3ckr/bascom%20and% ... index.html
Üdv Roland
Az ábrán látod, hogy a két dekóderről érkező bitet XOR kapcsolatba hozva, adott irány esetén mindig 0-t vagy 1-et kapunk.
http://kepfeltoltes.hu/view/110125/enco ... es.hu_.jpg
A programrészlet nálam így nézett ki, lásd lejjebb. Probléma volt, hogy a rotary encoder két állás között szeret prellegni, ezért egy számlálóval ellenőriztem a tényleges irányt.
http://kepfeltoltes.hu/view/110125/enco ... es.hu_.jpg
A programrészlet nálam így nézett ki, lásd lejjebb. Probléma volt, hogy a rotary encoder két állás között szeret prellegni, ezért egy számlálóval ellenőriztem a tényleges irányt.
- ' Föprogram
PORTB = &B111 ' activate pull up registers
Cls
WaitMs 2
Locate 1, 1: Lcd "_Encoder_test_______"
New_Value = PINB And &b11 ' enkóder bitek kimaszkolása
Old_Value = New_Value
Down_Counter = 0
Up_Counter = 0
Reset Encoder_Ready
Locate 2, 2: Lcd Encoder_Ready
Do
Encoder()
Loop
' Szubrutin
Sub Encoder()
New_Value = PINB And &b11 ' enkóder bitek kimaszkolása
If Not PINB.2 Then ' GOMBNYOMÁS esemény lekezelés
Reset Encoder_Ready
Locate 2 , 2 ' ideiglenes !!!
Lcd " " ' ideiglenes !!!
End If
If Not Encoder_Ready Then
If New_Value <> Old_Value Then
Bit_Temp = New_Value.1
Bit_Temp1 = Old_Value.0
Bit_Temp = Bit_Temp Xor Bit_Temp1
If Bit_Temp Then
Down_Counter = 0
Incr Up_Counter
If Up_Counter>6 Then
Locate 2 , 2 ' ideiglenes !!!
Lcd " bal " ' ideiglenes !!!
Reset Left_Right ' BAL
Up_Counter = 0
Set Encoder_Ready
End If
Else
Up_Counter = 0
Incr Down_Counter
If Down_Counter>6 Then
Locate 2 , 2 ' ideiglenes !!!
Lcd " jobb" ' ideiglenes !!!
Set Left_Right ' JOBB
Down_Counter = 0
Set Encoder_Ready
End If
End If
End If
WaitMs 2
Old_Value = New_Value
End If
End Sub
Vagy másképpen, ne az azonos helyi értékű bitekkel számolj, hanem az átlósan egymás alatt lévőket (korábbi - későbbi) biteket hozd XOR kapcsolatba.
(egyik irány)
1100110011
/ / / / / / itt a két bit között a XOR mindig 1
0110011001
(másik irány)
1100110011
/ / / / / / itt a két bit között a XOR mindig 0
1001100110
(egyik irány)
1100110011
/ / / / / / itt a két bit között a XOR mindig 1
0110011001
(másik irány)
1100110011
/ / / / / / itt a két bit között a XOR mindig 0
1001100110
Ha Szegoj által linkelt ábrát nézed.
Akkor 1-es jel felfutó élre generált megszakításban, megvizsgált 2-es jelszintje mindig 0 vagy a másik irányba mindig 1.
Ugyanez fordítva, érvényes ha 2-es jelre kérsz megszakítást.
És ha mindkettőre kérsz felváltva 1 – 1 megszakítást akkor 2* akkora lesz az enkódered felbontása. Tehát pontosabban tudsz szabályozni vele!

És a jobb enkóderek már nem mechanikusak, tehát nem preleznek.
Legföljebb jelváltáskor van egy kis tüske a szkópon nézve. De ez már nem zavaró
Akkor 1-es jel felfutó élre generált megszakításban, megvizsgált 2-es jelszintje mindig 0 vagy a másik irányba mindig 1.
Ugyanez fordítva, érvényes ha 2-es jelre kérsz megszakítást.
És ha mindkettőre kérsz felváltva 1 – 1 megszakítást akkor 2* akkora lesz az enkódered felbontása. Tehát pontosabban tudsz szabályozni vele!
És a jobb enkóderek már nem mechanikusak, tehát nem preleznek.
Legföljebb jelváltáskor van egy kis tüske a szkópon nézve. De ez már nem zavaró
- puzzafutar
- DrótVégénSzéndarab
- Hozzászólások: 47
- Csatlakozott: 2007. május 13. vasárnap, 6:00
Igazából nem sima enkóderrel dolgozok, hanem HDD motor-al, ahogy ez az első témaindító hozzászóásból ki is derül és ma meg is oldottam a problémát, elég egyszerű, nem kell hozzá megszakítás, és a biteket sem kell XOR művelettel kezelni. Már csak egy kicsit finomítani kell a kódon és tökéletes lesz
Mindenkinek nagyon köszönöm a hozzászólásokat és a képeket, mert így összeállt a dolog.
Hi!puzzafutar írta:Igazából nem sima enkóderrel dolgozok, hanem HDD motor-al, ahogy ez az első témaindító hozzászóásból ki is derül és ma meg is oldottam a problémát, elég egyszerű, nem kell hozzá megszakítás, és a biteket sem kell XOR művelettel kezelni. Már csak egy kicsit finomítani kell a kódon és tökéletes leszMindenkinek nagyon köszönöm a hozzászólásokat és a képeket, mert így összeállt a dolog.
Engem azért érdekelne a megoldásod. Ha bemásolnád megszakértenénk
Geht nicht, Gibt's nicht!
- puzzafutar
- DrótVégénSzéndarab
- Hozzászólások: 47
- Csatlakozott: 2007. május 13. vasárnap, 6:00
Kód: Egész kijelölése
$regfile = "attiny2313.dat"
$crystal = 1000000
Config Portd.2 = Input 'egyik szál
Config Portd.3 = Input 'másik szál
Config Portb = Output 'ledek
Config Portd.0 = Output 'hangszóró
Dim Portok(8) As Byte
Dim Index As Byte
Dim Szabad As Bit
Portok(1) = 1
Portok(2) = 2
Portok(3) = 4
Portok(4) = 8
Portok(5) = 16
Portok(6) = 32
Portok(7) = 64
Portok(8) = 128
Szabad = 1
Index = 1
Portb = 1
Do
If Szabad = 1 Then
If Pind.2 = 1 And Pind.3 = 0 Then
Index = Index + 1
If Index > 8 Then
Index = 1
End If
Portb = Portok(index)
Sound Portd.0 , 75 , 100
Szabad = 0
End If
If Pind.2 = 0 And Pind.3 = 1 Then
Index = Index - 1
If Index < 1 Then
Index = 8
End If
Portb = Portok(index)
Sound Portd.0 , 75 , 100
Szabad = 0
End If
End If
If Pind.2 = 0 And Pind.3 = 0 Then
Szabad = 1
End If
Loop
End- puzzafutar
- DrótVégénSzéndarab
- Hozzászólások: 47
- Csatlakozott: 2007. május 13. vasárnap, 6:00
Ahogy eddig észrevettem nem veszítek impulzust, ha normális sebeséggel tekergetem. De hangot talán felesleges is kiadnia.
az impulzusok így alakulnak
egyes szál 110 011
kettes szál 011 vagy peddig 110
tehát 1 impulzus 3-3 bit
Lényegében az első pár(alsó-felső) bitet nézi, és onnan tudja, hogy merre forog, mert vagy 10 vagy peddig 01.
az impulzusok így alakulnak
egyes szál 110 011
kettes szál 011 vagy peddig 110
tehát 1 impulzus 3-3 bit
Lényegében az első pár(alsó-felső) bitet nézi, és onnan tudja, hogy merre forog, mert vagy 10 vagy peddig 01.