ris8_allo_zen0 Posted February 22, 2008 Report Posted February 22, 2008 Hello everybody,since I have some encoders (but not all) in my MBSEQ changing values in the opposite direction, I thought the best way is to tell somewhere in the software which encoder is reversed (has its pins swapped) and which is not.So I've made a little patch to the MIOS code making it able to read a flag in the encoder table and give a negated (2-complement) incrementer to the user application if that flag is set.Here's the patch against MIOS v1.9f: diff -Naur mios_v1_9f_src.orig/src/mios_enc.inc mios_v1_9f_src/src/mios_enc.inc --- mios_v1_9f_src.orig/src/mios_enc.inc 2008-01-20 23:39:02.000000000 +0100 +++ mios_v1_9f_src/src/mios_enc.inc 2008-02-22 19:43:43.000000000 +0100 @@ -16,6 +16,7 @@ MIOS_ENC_MODE_NON_DETENTED EQU 0x00 MIOS_ENC_MODE_DETENTED EQU 0x80 MIOS_ENC_MODE_DETENTED2 EQU 0x81 +MIOS_ENC_MODE_REVERSED EQU 0x40 ENC_STAT_ACT_A EQU 0 ; Current status of channel A ENC_STAT_ACT_B EQU 1 ; Current status of channel B @@ -801,6 +802,10 @@ addlw 1 addwf FSR0L, F + ;; now TABLAT contains encoder flags, so it's a dummy read + ;; if incrementer is zero or we can read "reverse" flag otherwise. + tblrd*+ + ;; temporary disable the IRQs IRQ_DISABLE @@ -814,6 +819,12 @@ ;; enable IRQs again IRQ_ENABLE + ;; makes incrementer negative if encoder is reversed mounted + BRA_IFCLR TABLAT, 6, ACCESS, MIOS_ENC_Dont_Negate + negf WREG +MIOS_ENC_Dont_Negate + + ;; save incrementer in MIOS_PARAMETER2 movwf MIOS_PARAMETER2 @@ -830,7 +841,6 @@ MIOS_ENC_Handler_Loop_Next IRQ_ENABLE - tblrd*+ ; dummy read incf MIOS_TMP_CTR, F, BANKED BRA_IFSET MIOS_TMP_CTR, 6, BANKED, MIOS_ENC_Handler_Loop_End rgoto MIOS_ENC_Handler_Loop That's the same content of the attached file. To use it on your application, just add this row in mios.h of the app's source: MIOS_ENC_MODE_REVERSED EQU 0x40 and set your reversed encoders this way: ENC_ENTRY 2, 6, MIOS_ENC_MODE_DETENTED2 | MIOS_ENC_MODE_REVERSED ; this is a reversed encoder ENC_ENTRY 2, 4, MIOS_ENC_MODE_DETENTED2 ; this is a normal encoder I hope it gets useful for somebody.Greetings, Enricorevenc.diff.txtrevenc.diff.txt
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now