Taqoz Reloaded v2.8 - Reading a quadrature encoder
This code is adapted from an example in Jon Titus's paper on Smartpin Programming. There are two demos:-
1. Run SPEEDTEST to display the current quadrature encoder speed over a 1s period
2. Run POSTEST to display the absolute position of the quadrature encoder
The two demos assume the encoder signals are connected to Smartpin 8 and 9, so edit that to suit your setup. Both demos terminate when a key is pressed. Here's the code:-
--- Quadrature encoder driver ver 3 - for Taqoz Reloaded ver 2.8 Bob Edwards July 2022 --- NB check the assembler P2ASM is loaded before loading this code --- This is adapted from source code in Jon Titus's paper on Smartpin Programming IFDEF *QUADENC* FORGET *QUADENC* } pub *QUADENC* ." Quadrature Encoder reader for Taqoz Reloaded v2.8" ; %0000_0001_000_00000_00000000_00_01011_0 := qesetup 8 := qeaddr --- encoder attached to smartpins 8,9, edit to suit --- set up quadrature encoder to measure encoder pulses during 'period' clock pulses --- if P2 clock is 20MHz, for 1 sec measurement, set period = 20,000,000 --- encoder signals are assumed connected to smartpins pin and pin+1 code QE! ( period pin -- ) dirl a --- hold the smartpin in reset wrpin #qesetup,a --- set the two pins for quadrature encoder mode wxpin b,a --- set the period expressed as system clocks dirh a --- and release the smartpin to run jmp #@2DROP end --- Read the n pulses that occurred during the last measurement period code QESPEED ( pin -- n ) .l1 testp a wc --- test carry at the pin if_nc jmp #l1 --- wait until carry detected, measurement period is over _ret_ rqpin a,a --- return the quadrature encoder pulse result end --- Display the quadrature encoder speed result until key pressed pub SPEEDTEST ( -- ) 20000000 qeaddr QE! --- encode connected to pin 8,9, measuring for 1s BEGIN qeaddr QESPEED . CRLF --- measure pulses and display result 100 ms KEY UNTIL --- until any key is pressed CRLF ; --- Read the absolute position of the quadrature encoder code QEPOS ( pin -- n ) _ret_ rqpin a,a --- read the accumulated counts since last read end --- Display the quadrature encoder position until a key is pressed pub POSTEST ( -- ) 0 qeaddr QE! --- setup encoder on smartpin 8,9 for position mode BEGIN qeaddr QEPOS --- read the encoder . CRLF --- and display the position KEY UNTIL ;
That's it - these words should allow you to control as many encoders as you have spare pins.