This page will contain the information about the combined lcd/button matrix
[[http://www.midibox.org/forum/index.php?topic=7087.0|forum topic]]uCApps
right now I'm using a modified version of the sm_simple C example\\
this code will be rewritten to make it more coherent
modifications to [[http://www.ucapps.de/mios/sm_example1_v2.zip|scan matrix example]] uCApps\\
==== Hardware ====
[[http://users.skynet.be/sky92755/DSEQ32_DOUT.pdf|DOUT wiring]]\\
\\
[[http://users.skynet.be/sky92755/DSEQ32_DIN.pdf|DIN wiring]]\\
//*note: schematics not finished!//\\
==== Software ====
in main.c:\\
...
//second shiftregister drives the leds
#define LEDOUT 1
...
void LM_SetRow(){
MIOS_DOUT_SRSet(LEDOUT,ledtest[sm_col]);
}
/////////////////////////////////////////////////////////////////////////////
// This function is called by MIOS before the shift register are loaded
/////////////////////////////////////////////////////////////////////////////
void SR_Service_Prepare(void) __wparam
{
// call the Scan Matrix Driver
SM_PrepareCol();
// call the Led Matrix Driver
LM_SetRow();
}
...
\\
in sm_simple.asm:
...
global _sm_button_column
global _sm_button_row
global _sm_button_value
global _sm_col
;; import lables
extern _SM_NotifyToggle
; ==========================================================================
accessram udata ; (no access ram required, these variables can be located anywhere)
_sm_button_column res 1 ; exported to C, therefore an "_" has been added
_sm_button_row res 1
_sm_button_value res 1
_sm_col res 1
...
SM_PrepareCol
;; select next DOUT register
;; (current column + 1) & 0x07
SET_BSR sm_selected_column
incf sm_selected_column, W, BANKED ; (* see note below)
andlw 0x07
;_sm_col is used by LM_SetRow()
movwf _sm_col
call MIOS_HLP_GetBitANDMask ; (inverted 1 of 8 code)
...
\\
and finally in sm_simple.h:
...
extern unsigned char sm_button_value;
extern unsigned char sm_col;
...
==== Appendum ====
To avoid flickering leds when pushing a button
the MIOS button debouncing should be turned off!!
Due to the setup of the SRIO driver the debounce algoritm
also delays the DOUT chain when a DIN event is being debounced.
So when a button is pushed the led update frequency is reduced,
the higher the debounce value, the lower the update frequency.
According to this post TK will fix this in a future MIOS release:
>This is something what I'm planning to solve in one of the next MIOS versions - currently the same SR scanning routine is used for DIN and DOUT registers, which means, >when the DINs are temporary disabled due to the cheap debouncing method, the DOUT registers won't be updated.
\\
>The solution is to add a second scan routine which only services the DOUTs so long the debouncing delay is active.
\\
In the meantime THIS ISSUE IS SOLVED WITH MIOS1.9c!!!
== Workaround ==
To turn the debouncing off, set
#define DIN_DEBOUNCE_VALUE 0
back to [[DSEQ32]]