updated teensy stuff for dox's PCB

partial-rewrite
Ben Blazak 2012-05-26 22:50:33 -07:00
parent 50998376c5
commit 1af2423364
3 changed files with 52 additions and 45 deletions

View File

@ -136,12 +136,13 @@ uint8_t teensy_init(void) {
teensypin_write_all_unused(PORT, SET); // set internal pull-up enabled teensypin_write_all_unused(PORT, SET); // set internal pull-up enabled
// rows // rows
teensypin_write_all_row(DDR, CLEAR); // set as input (hi-Z) teensypin_write_all_row(DDR, CLEAR); // set as input
teensypin_write_all_row(PORT, CLEAR); // set internal pull-up disabled teensypin_write_all_row(PORT, SET); // set internal pull-up enabled
// columns // columns
teensypin_write_all_column(DDR, CLEAR); // set as input teensypin_write_all_column(DDR, CLEAR); // set as input (hi-Z)
teensypin_write_all_column(PORT, SET); // set internal pull-up enabled teensypin_write_all_column(PORT, CLEAR); // set internal pull-up
// disabled
return 0; // success return 0; // success
} }
@ -152,40 +153,43 @@ uint8_t teensy_init(void) {
#if KB_ROWS != 12 || KB_COLUMNS != 7 #if KB_ROWS != 12 || KB_COLUMNS != 7
#error "Expecting different keyboard dimensions" #error "Expecting different keyboard dimensions"
#endif #endif
static inline void _update_columns( static inline void _update_rows(
bool matrix[KB_ROWS][KB_COLUMNS], uint8_t row ) { bool matrix[KB_ROWS][KB_COLUMNS], uint8_t column ) {
matrix[row][0] = ! teensypin_read(COLUMN_0); matrix[0][column] = ! teensypin_read(ROW_0);
matrix[row][1] = ! teensypin_read(COLUMN_1); matrix[1][column] = ! teensypin_read(ROW_1);
matrix[row][2] = ! teensypin_read(COLUMN_2); matrix[2][column] = ! teensypin_read(ROW_2);
matrix[row][3] = ! teensypin_read(COLUMN_3); matrix[3][column] = ! teensypin_read(ROW_3);
matrix[row][4] = ! teensypin_read(COLUMN_4); matrix[4][column] = ! teensypin_read(ROW_4);
matrix[row][5] = ! teensypin_read(COLUMN_5); matrix[5][column] = ! teensypin_read(ROW_5);
matrix[row][6] = ! teensypin_read(COLUMN_6);
} }
uint8_t teensy_update_matrix(bool matrix[KB_ROWS][KB_COLUMNS]) { uint8_t teensy_update_matrix(bool matrix[KB_ROWS][KB_COLUMNS]) {
teensypin_write(DDR, SET, ROW_0); // set row low (set as output) teensypin_write(DDR, SET, COLUMN_0); // set col low (set as output)
_update_columns(matrix, 0); // read col 0..6 and update matrix _update_rows(matrix, 0); // read row 0..5 & update matrix
teensypin_write(DDR, CLEAR, ROW_0); // set row hi-Z (set as input) teensypin_write(DDR, CLEAR, COLUMN_0); // set col hi-Z (set as input)
teensypin_write(DDR, SET, ROW_1); teensypin_write(DDR, SET, COLUMN_1);
_update_columns(matrix, 1); _update_rows(matrix, 1);
teensypin_write(DDR, CLEAR, ROW_1); teensypin_write(DDR, CLEAR, COLUMN_1);
teensypin_write(DDR, SET, ROW_2); teensypin_write(DDR, SET, COLUMN_2);
_update_columns(matrix, 2); _update_rows(matrix, 2);
teensypin_write(DDR, CLEAR, ROW_2); teensypin_write(DDR, CLEAR, COLUMN_2);
teensypin_write(DDR, SET, ROW_3); teensypin_write(DDR, SET, COLUMN_3);
_update_columns(matrix, 3); _update_rows(matrix, 3);
teensypin_write(DDR, CLEAR, ROW_3); teensypin_write(DDR, CLEAR, COLUMN_3);
teensypin_write(DDR, SET, ROW_4); teensypin_write(DDR, SET, COLUMN_4);
_update_columns(matrix, 4); _update_rows(matrix, 4);
teensypin_write(DDR, CLEAR, ROW_4); teensypin_write(DDR, CLEAR, COLUMN_4);
teensypin_write(DDR, SET, ROW_5); teensypin_write(DDR, SET, COLUMN_5);
_update_columns(matrix, 5); _update_rows(matrix, 5);
teensypin_write(DDR, CLEAR, ROW_5); teensypin_write(DDR, CLEAR, COLUMN_5);
teensypin_write(DDR, SET, COLUMN_6);
_update_rows(matrix, 6);
teensypin_write(DDR, CLEAR, COLUMN_6);
return 0; // success return 0; // success
} }

View File

@ -16,14 +16,16 @@
#include "matrix.h" #include "matrix.h"
// LED control // LED control
#define kb_led1_on() (DDRB |= (1<<5)) #define kb_led1_on() (DDRB |= (1<<6))
#define kb_led1_off() (DDRB &= ~(1<<5)) #define kb_led1_off() (DDRB &= ~(1<<6))
#define kb_led1_set(n) (OCR1A = (uint8_t)(n)) #define kb_led1_set(n) (OCR1B = (uint8_t)(n))
#define kb_led1_set_percent(n) (OCR1A = (uint8_t)((n) * 0xFF)) #define kb_led1_set_percent(n) (OCR1B = (uint8_t)((n) * 0xFF))
#define kb_led2_on() (DDRB |= (1<<6)) //
#define kb_led2_off() (DDRB &= ~(1<<6)) #define kb_led2_on() (DDRB |= (1<<5))
#define kb_led2_set(n) (OCR1B = (uint8_t)(n)) #define kb_led2_off() (DDRB &= ~(1<<5))
#define kb_led2_set_percent(n) (OCR1B = (uint8_t)((n) * 0xFF)) #define kb_led2_set(n) (OCR1A = (uint8_t)(n))
#define kb_led2_set_percent(n) (OCR1A = (uint8_t)((n) * 0xFF))
//
#define kb_led3_on() (DDRB |= (1<<7)) #define kb_led3_on() (DDRB |= (1<<7))
#define kb_led3_off() (DDRB &= ~(1<<7)) #define kb_led3_off() (DDRB &= ~(1<<7))
#define kb_led3_set(n) (OCR1C = (uint8_t)(n)) #define kb_led3_set(n) (OCR1C = (uint8_t)(n))

View File

@ -34,8 +34,8 @@
PB3 o o o + PF5 row3 PB3 o o o + PF5 row3
(OC1C) LED3 PB7 + PE6 AREF + PF6 row4 (OC1C) LED3 PB7 + PE6 AREF + PF6 row4
(SCL) I2C PD0 + + PF7 row5 (SCL) I2C PD0 + + PF7 row5
(SDA) I2C PD1 + + PB6 LED2 (OC1B) (SDA) I2C PD1 + + PB6 LED1 (OC1B)
column3 PD2 + + PB5 LED1 (OC1A) column3 PD2 + + PB5 LED2 (OC1A)
column4 PD3 + + PB4 column0 column4 PD3 + + PB4 column0
column1 PC6 + + PD7 column5 column1 PC6 + + PD7 column5
column2 PC7 +-o-o-o-o-o-+ PD6 onboardLED column2 PC7 +-o-o-o-o-o-+ PD6 onboardLED
@ -70,10 +70,11 @@
* PD6 (the onboard LED) already has a defined level (low), so there's no * PD6 (the onboard LED) already has a defined level (low), so there's no
reason to set internal pull-up enabled on it. If we do, it will source reason to set internal pull-up enabled on it. If we do, it will source
current to the LED, which is fine, but unnecessary. current to the LED, which is fine, but unnecessary.
* We want the row pins 'hi-Z' initially (set as input with pull-up * We want the columns to be hi-Z when that column's not being scanned,
disabled), and the column pins set as input with internal pull-up drive low when it is, and the rows to be input with pull-up enabled.
enabled. We'll cycle through driving the row pins low (setting them as We'll cycle through driving the columns low and scanning all rows.
output) and checking the column pins in the update function. * To set a pin hi-Z on this board, set it as input with pull-up
disabled.
* Switching the row pins between hi-Z and drive low (treating them as * Switching the row pins between hi-Z and drive low (treating them as
if they were open drain) seems just as good as, and a little safer if they were open drain) seems just as good as, and a little safer
than, driving them high when the row's not active. than, driving them high when the row's not active.