Hi all,
Does somebody knows if its possible to change the Blm driver to drive a 16*8 (16 rows and 8 columns) button/led matrix instead a 16*4 button/led matrix ??
I tried to change the blm.inc but my assambler skills are very less.
I think I have to change some in this part of blm.inc to drive all 8 SR outputs as cathode (columns).
_BLM_PrepareCol ; (for C)
BLM_PrepareCol
;; increment column
SET_BSR blm_selected_column
incf blm_selected_column, F, BANKED
bcf blm_selected_column, 2, BANKED ; wrap at 4 <--- when im change the 2 into 0, 1 or 3 the voltage on the cathode outputs changes. WHY? What does this line??
;; select next DOUT/DIN column
movf blm_selected_column, W, BANKED ; (* see note below)
call MIOS_HLP_GetBitANDMask ; (inverted 1 of 8 code)
andlw 0x0f <--- Is this the matrix lenght. In this case 16 ???
movwf MIOS_PARAMETER1
;; duplicate the 4 selection lines for button matrix <----- I want to cycle 8 Outputs instead 4 duplicated outputs
swapf WREG, W
iorwf MIOS_PARAMETER1, W
;; finally apply inversion mask (required when sink drivers are connected to cathode lines)
xorlw BLM_CATHODES_INV_MASK
movwf MIOS_PARAMETER1
;; output on CATHODES* registers
#if BLM_DOUT_CATHODES1
movlw BLM_DOUT_CATHODES1 - 1
call MIOS_DOUT_SRSet
#endif
#if BLM_DOUT_CATHODES2
movlw BLM_DOUT_CATHODES2 - 1
call MIOS_DOUT_SRSet
#endif
;; store row*2 offset in IRQ_TMP1 to simplify the addressing of blm_row_green and blm_row_red array <--- Could somebody explain??
SET_BSR blm_selected_column
movf blm_selected_column, W, BANKED
rlf WREG, W
andlw 0x06
movwf IRQ_TMP1
Could somebody help me??
PS: sorry for my less english skills. I hope you can understand what im mean.
DUsentrieb