Rotary Encoder (forgókapcsoló)
Sziasztok,
már két napja küzdök a következő problémával. Remélem tudtok valami megoldást, mert én már idegroncs lettem.
Tehát három 7 szegmenses kijelzőt vezérelek attiny2313-mal, adatbevitelre egy Bourns ECW1J enkódert használok. A kijelzőkön a számok megjelenítéséhez egy tömbben tárolok bináris adatot, majd a tömb 1...10 elemeit írom ki a PortB-re. A tömb elemeire egy i nevű változó mutat, amit az enkóder forgásirányának megfelelően növelnék vagy csökkentenék. A programkód hozzá így néz ki:
Interrupts...
Int0...
...
On int0 Getencoder
...
Getencoder:
waitms 5
If pind.2 = 1 then
if pind.3 = 1 then
decr i
end if
else
incr i
end if
gifr=6
return
A probléma az, hogy csökkenteni csökkenti, ám amikor növelni kéne, akkor valami ilyesmit csinál az értékekkel: 1-2-3-4-4-4-4-3-2-1-1-1-2-3-4-4-4-4
azaz elkezdi növelni, majd pár kattintásig semmi, aztán csökkenti, utána meg megint növeli. Mi lehet a probléma? Én már megpróbáltam külön IF-be tenni, mindent, de egyszerűen nem jövök rá a megoldásra.
már két napja küzdök a következő problémával. Remélem tudtok valami megoldást, mert én már idegroncs lettem.
Tehát három 7 szegmenses kijelzőt vezérelek attiny2313-mal, adatbevitelre egy Bourns ECW1J enkódert használok. A kijelzőkön a számok megjelenítéséhez egy tömbben tárolok bináris adatot, majd a tömb 1...10 elemeit írom ki a PortB-re. A tömb elemeire egy i nevű változó mutat, amit az enkóder forgásirányának megfelelően növelnék vagy csökkentenék. A programkód hozzá így néz ki:
Interrupts...
Int0...
...
On int0 Getencoder
...
Getencoder:
waitms 5
If pind.2 = 1 then
if pind.3 = 1 then
decr i
end if
else
incr i
end if
gifr=6
return
A probléma az, hogy csökkenteni csökkenti, ám amikor növelni kéne, akkor valami ilyesmit csinál az értékekkel: 1-2-3-4-4-4-4-3-2-1-1-1-2-3-4-4-4-4
azaz elkezdi növelni, majd pár kattintásig semmi, aztán csökkenti, utána meg megint növeli. Mi lehet a probléma? Én már megpróbáltam külön IF-be tenni, mindent, de egyszerűen nem jövök rá a megoldásra.
Sziasztok!
Valaki tud mondani olyan forgókapcsolót (típus számot, vagy, hogy hol lehet venni) ami ugy működik, mint a 17. fejezetben (Enkóderek) az "Egy 'speciális' enkóder"? És még egy kérdés: létezik olyan, mint egy tolós potméter, csak nem az ellenállását változtatja, hanem ha felfelé tolom, akkor A lábon ad jeleket, ha lefelé akkor B lábon?
Valaki tud mondani olyan forgókapcsolót (típus számot, vagy, hogy hol lehet venni) ami ugy működik, mint a 17. fejezetben (Enkóderek) az "Egy 'speciális' enkóder"? És még egy kérdés: létezik olyan, mint egy tolós potméter, csak nem az ellenállását változtatja, hanem ha felfelé tolom, akkor A lábon ad jeleket, ha lefelé akkor B lábon?
Bence
"Tolós rotary encoderre" ( ) egy ötlet eszembe jutott: kell egy tolós potméter és figyelni kell, hogy amikor nő az értéke -> A lábon jelek, amikor csökken -> B lábon jelek. Ezt hogyan lehet megvalósítani, ADC? És ha igen melyik a legkisebb chip amelyikben van. Esetleg valahogy AVR nélkül, mert amit tervezek kéne bele kb öt ilyen, és így elég kölcséges lenne így.
Bence
Itt van 2db jó min. Digital! Reggelni kel!
http://www.lomex.hu/
182kB ENCODER ECW1J-B24-AC0024L (BOU) RoHS DIGITAL CONTACTING ENCODER
5perc guglizás volt!
Optikai ez biztos nem prelez!
https://www.hqelektronik.hu/info/hu/em1 ... l032s.html
http://www.lomex.hu/
182kB ENCODER ECW1J-B24-AC0024L (BOU) RoHS DIGITAL CONTACTING ENCODER
5perc guglizás volt!
Optikai ez biztos nem prelez!
https://www.hqelektronik.hu/info/hu/em1 ... l032s.html
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. március 14. szombat, 19:32-kor.
Tolópotira minek rotary enkóder?
Ahogy megoldanám:
- Tolópoti ADCre.
- 2 kiemnet kell hozzá, és azt kapcsolgatod az ADC értékének megelelően. De fontos, hogy lépcsőnként kell növelni/csökkenteni a lépseket, nem lehet hogy beolvasom az ADC-t és abból generálom a jelet simán... Változtatni kell (mi van ha lerántod maxból min-be)?
1 tolópoti 3 lábat jelent így.
1 AVRben van 6/8/16 ADC (M8DIP:6db) és van is ennek megfelelő láb kimenetnek:). De miért kell ez a fajta kimenet?
Ahogy megoldanám:
- Tolópoti ADCre.
- 2 kiemnet kell hozzá, és azt kapcsolgatod az ADC értékének megelelően. De fontos, hogy lépcsőnként kell növelni/csökkenteni a lépseket, nem lehet hogy beolvasom az ADC-t és abból generálom a jelet simán... Változtatni kell (mi van ha lerántod maxból min-be)?
1 tolópoti 3 lábat jelent így.
1 AVRben van 6/8/16 ADC (M8DIP:6db) és van is ennek megfelelő láb kimenetnek:). De miért kell ez a fajta kimenet?
Az egész arra kell, hogy a VirtualDj nevű programhoz szeretnék egy vezérlőt (hasonlót mint ami itt van: http://www.djstore.hu/webshop/productlist.php?prod=25). A programban minden funkcióhoz lehet billentyű(kombináció)t hozzárendelni és ezért azt találtam ki, hogy szétszedek egy billentyűzetet, és aztán azzal összerakom a vezérlőt. A Play gomb meg hasonlók még egyszerű, a jog tárcsát úgy képzeletem el, hogy lesz egy "Speciális enkoderhez" hasonló rotary enkoder és amikor jobbra forgatom, akkor a GND és a B-re kötöm, be a pl. jobbra gombot. (Ha jobbra forgatom akkor "lenyomja" a jobbra gombot). Ha nem találok ilyen enkodert akkor kell egy Tiny13 és azzal megoldom.
A tolos potméter a crossfader vagy tempo álltáshoz kellene és ugyanugy gondoltam, mint a tárcsát, amikor feltolom "lenyomja" a pl. fel gombot.
A tolos potméter a crossfader vagy tempo álltáshoz kellene és ugyanugy gondoltam, mint a tárcsát, amikor feltolom "lenyomja" a pl. fel gombot.
Bence