i'm making keyboard using v-usb. (row 16, col8)
generally source base c64key written row->col.
but my pcb design is col->row. that has few problem.
<main.c - c64key> : can't load data
Code: Select all
for (row = 0; row < NUMROWS; ++row) {
data = modmask[row & 7];
switch (row) {
case 0x0 ... 0x7:
DDRC = 0x00;
PORTC = 0xFF;
// Scan on A
DDRA = data;
PORTA = ~data;
break;
case 0x8 ... 0xF:
DDRA = 0x00;
PORTA = 0xFF;
// Scan on C
DDRC = data;
PORTC = ~data;
break;
}
_delay_us(30);
data = ~PINB;
}
...........................
/* Process all rows for key-codes */
for (row = 0; row < NUMROWS; ++row) {
/* Anything on this row? - if not, skip it */
if (0xFF == bitbuf[row]) { continue; }
/* Restore buffer */
data = bitbuf[row];
for (col = 0, mask = 1; col < 8; ++col, mask <<= 1) {
/* If no key detected, jump to the next column */
if (data & mask) { continue; }
/* Read keyboard map */
key = pgm_read_byte(&keymap[row][col]);
activeRows |= modmask[row];
activeCols |= modmask[col];
}
take a look my source
<main.c - my mod> : can load data
Code: Select all
for (row = 0; row < NUMROWS; ++row) {
data = modmask[row & 7];
switch (row) {
case 0x0 ... 0x7:
DDRC = 0x00;
PORTC = 0xFF;
// Scan on A
DDRB = data;
PORTB = ~data;
_delay_us(30);
data = ~PINA;
break;
case 0x8 ... 0xF:
DDRA = 0x00;
PORTA = 0xFF;
// Scan on C
DDRB = data;
PORTB = ~data;
_delay_us(30);
data = ~PINC;
break;
}
}
...................................
/* Process all rows for key-codes */
for (row = 0; row < NUMROWS; ++row) {
/* Anything on this row? - if not, skip it */
if (0xFF == bitbuf[row]) { continue; }
/* Restore buffer */
data = bitbuf[row];
for (col = 0, mask = 1; col < 8; ++col, mask <<= 1) {
/* If no key detected, jump to the next column */
if (data & mask) { continue; }
/* Read keyboard map */
key = pgm_read_byte(&keymap[row][col]);
activeRows |= modmask[row];
activeCols |= modmask[col];
}
c64key source : can't load data.
my mod source : can load data but crazy matrix.
cuz c64key matrix design is row->col.
what should i do to solve?