dseq32_matrix
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| dseq32_matrix [2006/09/23 00:53] – mess | dseq32_matrix [2006/10/15 09:35] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | This page will contain the information about the combined lcd/button matrix | ||
| + | [[http:// | ||
| + | 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:// | ||
| + | |||
| + | ==== Hardware ==== | ||
| + | [[http:// | ||
| + | \\ | ||
| + | [[http:// | ||
| + | |||
| + | //*note: schematics not finished!// | ||
| + | ==== Software ==== | ||
| + | in main.c:\\ | ||
| + | |||
| + | < | ||
| + | ... | ||
| + | //second shiftregister drives the leds | ||
| + | #define LEDOUT 1 | ||
| + | ... | ||
| + | void LM_SetRow(){ | ||
| + | MIOS_DOUT_SRSet(LEDOUT, | ||
| + | } | ||
| + | |||
| + | ///////////////////////////////////////////////////////////////////////////// | ||
| + | // 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 | ||
| + | |||
| + | ;; import lables | ||
| + | extern _SM_NotifyToggle | ||
| + | |||
| + | ; ========================================================================== | ||
| + | |||
| + | accessram udata ; | ||
| + | |||
| + | _sm_button_column res 1 ; | ||
| + | _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, | ||
| + | andlw 0x07 | ||
| + | ;_sm_col is used by LM_SetRow() | ||
| + | movwf _sm_col | ||
| + | call MIOS_HLP_GetBitANDMask ; | ||
| + | ... | ||
| + | </ | ||
| + | \\ | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | |||
| + | back to [[DSEQ32]] | ||
dseq32_matrix.txt · Last modified: 2006/10/15 09:35 by 127.0.0.1
