Hi Guys, US Digital makes a nice chip that decodes the quadature inputs into a direction and clock pulse that could be easily interfaced to a PIC's interupt. On interupt, sample the direction and increment your counter. It also has some built in filtering. I only looked at quickly but it looked interested and was pretty cheap, ~2.00 US. I can dig out their contact info if your interested. Ben Wirz Electronics www.wirz.com At 10:18 AM 12/3/97 +0000, you wrote: >Way back in January, in message > Aschwin Gopalan > wrote: > >> Channel A >> ++-------++ ++-------++ ++-------++ >> || || || || || || >> || || || || || || >> || || || || || || >> ----------++ ++------++ ++------++ ++------- >> >> >> Channel B >> ++-------++ ++-------++ ++-------++ >> || || || || || || >> || || || || || || >> || || || || || || >> -----++ ++------++ ++-------++ ++------- >> >> This is for clock-wise rotation for example. >> >> As you can see, if you trigger on the rising edge of A, B is always >> high. For CCW rotation, at the rising edge of A, B is always low. So >> you can use one of the channels as a trigger and the other as >> direction output. All what is left is the debouncing. > >Looking at edges in this way is asking for trouble, hence you have to >write things like debouncing routines etc. Really you should always look >at examining the levels. > >A nice (fast!) compromise is documented in one of the Parallax data >sheets, which is: > >Is the Current reading different from the previous? >If so: > Take the previous reading > shift it to the right > xor it with the current reading. > Check bit 0 (or 2, 4, 6 etc...) > If it is 0, then decrease the counter, else increase it. > >This works wonderfully. Consider the first two transitions in Aschwin's >example (assume that count starts at 5, and the switch bounces a lot!) > > A: LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLHLLLLHHHHLLHHHHHHHHH > > B: LLLLLLLLLLHLLLLHHHLLHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH > >Change: NNNNNNNNNNYYNNNYNNYNYNNNNNNNNNNNNNNNNNNNNNNNYYNNNYNNNYNYNNNNNNNN > >Count: 5555555555655556665566666666666666666666666676666777766777777777 > >There's absolutely no way that the bounce can induce slippage, which it >would with an edge-detecting algorithm. > >Using such a mechanism I've been keeping a serial-controlled resistor >up to date and reading encoders at up to 12,000 pulses/sec on a 4MHz >'84! (that's assuming one channel out of the 4 it's monitoring is >changing, and guarantees that any pulse is seen) > >Fun! > > > > >Stuart. >-- >Stuart Tyrrell Developments Stuart@stdevel.demon.co.uk >PO Box 183, OLDHAM. OL2 8FB stdevel@locust.co.uk (Mobile <> Email) >Orange: 0976 255 256 (9am-9pm) http://www.stdevel.demon.co.uk >*Analogue joystick i/face 39.95* *Using an IR keyboard via PS2Mouse 24.95* >