diff --git a/doc/references.md b/doc/references.md index 1b5e078..8610167 100644 --- a/doc/references.md +++ b/doc/references.md @@ -1,12 +1,20 @@ ## Noob Electronics Stuff -* [Resistor Color Codes (picture)] +* [Resistor Color Codes] (http://www.ladyada.net/wiki/lib/exe/fetch.php?hash=a2c6a9&w=501&h=785&media=http%3A%2F%2Fwww.ladyada.net%2Fimages%2Fmetertutorial%2Frescolorcode.jpg) + : image * from [the Multimeter Tutorial] (http://www.ladyada.net/learn/multimeter/resistance.html) (on ) +* [Schematic Symbols] + (http://img.docstoccdn.com/thumb/orig/28066054.png) + : image + +* [Vcc, Vdd, Vss, etc.] + (http://encyclobeamia.solarbotics.net/articles/vxx.html) + * [Very Basic Circuits] (http://www.seattlerobotics.org/encoder/mar97/basics.html) : column by Kevin Ross for Encoder @@ -23,8 +31,8 @@ -> [powering LEDs] (http://wolfstone.halloweenhost.com/Lighting/litlpo_PoweringLEDs.html) -* [Vcc, Vdd, Vss, etc.] - (http://encyclobeamia.solarbotics.net/articles/vxx.html) +* [All About Circuits : Reference] + (http://www.allaboutcircuits.com/vol_5/index.html) ## Noob C Stuff diff --git a/src/controller/teensy-2-0.h b/src/controller/teensy-2-0.h deleted file mode 100644 index e69de29..0000000 diff --git a/src/firmware.c b/src/firmware.c index f7998cb..ce80f70 100644 --- a/src/firmware.c +++ b/src/firmware.c @@ -7,8 +7,8 @@ * ------------------------------------------------------------------------- */ -#include "keyboard/ergodox.h" -#include "controller/teensy-2-0.h" +#include "hardware/ergodox.h" + #include "lib/twi.h" #include "lib/print.h" @@ -18,5 +18,9 @@ void main() { } void init() { + controller_init(); // must be first + kb_init(); // must be second + + // TODO: other stuff? } diff --git a/src/keyboard/ergodox.c b/src/hardware/ergodox--keyboard.c similarity index 73% rename from src/keyboard/ergodox.c rename to src/hardware/ergodox--keyboard.c index e4b16a0..eb5ea68 100644 --- a/src/keyboard/ergodox.c +++ b/src/hardware/ergodox--keyboard.c @@ -1,11 +1,17 @@ /* ---------------------------------------------------------------------------- - * ergoDOX specific stuff + * ergoDOX keyboard specific stuff + * - public things are prefixed by `kb_` or `KB_` * ---------------------------------------------------------------------------- * Copyright (c) 2012 Ben Blazak * Released under The MIT License (MIT) (see "license.md") at * * ------------------------------------------------------------------------- */ + +// ---------------------------------------------------------------------------- +// documentation +// ---------------------------------------------------------------------------- + /* ---------------------------------------------------------------------------- * Matrix [row.column] assignments * - row and column numbers are in hex @@ -27,12 +33,21 @@ * ------------------------------------------------------------------------- */ -#define KB_LAYERS 1 -#define KB_ROWS 12 // don't change -#define KB_COLUMNS 7 // don't change +#include "ergodox.h" -uint8_t is_pressed[KB_ROWS][KB_COLUMNS] = { +// ---------------------------------------------------------------------------- +// macros +// ---------------------------------------------------------------------------- + +// TODO + + +// ---------------------------------------------------------------------------- +// variables +// ---------------------------------------------------------------------------- + +uint8_t kb_is_pressed[KB_ROWS][KB_COLUMNS] = { // --- right hand --- // column 0 1 2 3 4 5 6 0, 0, 0, 0, 0, 0, 0, //row 0x0 @@ -41,7 +56,6 @@ uint8_t is_pressed[KB_ROWS][KB_COLUMNS] = { 0, 0, 0, 0, 0, 0, 0, //row 0x3 0, 0, 0, 0, 0, 0, 0, //row 0x4 0, 0, 0, 0, 0, 0, 0, //row 0x5 - // --- left hand --- // column 0 1 2 3 4 5 6 0, 0, 0, 0, 0, 0, 0, //row 0x6 @@ -54,7 +68,8 @@ uint8_t is_pressed[KB_ROWS][KB_COLUMNS] = { // TODO: this belongs in program space uint8_t kb_maps[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { -// --- layer: default --- +// ------- layer: default ------- +// --- right hand --- // column 0 1 2 3 4 5 6 0, 0, 0, 0, 0, 0, 0, //row 0x0 0, 0, 0, 0, 0, 0, 0, //row 0x1 @@ -62,6 +77,8 @@ uint8_t kb_maps[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { 0, 0, 0, 0, 0, 0, 0, //row 0x3 0, 0, 0, 0, 0, 0, 0, //row 0x4 0, 0, 0, 0, 0, 0, 0, //row 0x5 +// --- left hand --- +// column 0 1 2 3 4 5 6 0, 0, 0, 0, 0, 0, 0, //row 0x6 0, 0, 0, 0, 0, 0, 0, //row 0x7 0, 0, 0, 0, 0, 0, 0, //row 0x8 @@ -70,3 +87,16 @@ uint8_t kb_maps[KB_LAYERS][KB_ROWS][KB_COLUMNS] = { 0, 0, 0, 0, 0, 0, 0, //row 0xB } +// ---------------------------------------------------------------------------- +// functions +// ---------------------------------------------------------------------------- + +// TODO +void kb_init() { +} + +// TODO +// - cycle through row=HIGH and read each column +void kb_update() { +} + diff --git a/src/controller/teensy-2-0.c b/src/hardware/ergodox--teensy-2-0--mcp23018.c similarity index 56% rename from src/controller/teensy-2-0.c rename to src/hardware/ergodox--teensy-2-0--mcp23018.c index c2643f6..176b782 100644 --- a/src/controller/teensy-2-0.c +++ b/src/hardware/ergodox--teensy-2-0--mcp23018.c @@ -1,11 +1,17 @@ /* ---------------------------------------------------------------------------- - * Teensy 2.0 specific stuff + * ergodox controller (Teensy 2.0 and MCP23018) specific stuff + * - public things are prefixed by `controller_` or `CONTROLLER_` * ---------------------------------------------------------------------------- * Copyright (c) 2012 Ben Blazak * Released under The MIT License (MIT) (see "license.md") at * * ------------------------------------------------------------------------- */ + +// ---------------------------------------------------------------------------- +// documentation +// ---------------------------------------------------------------------------- + /* ---------------------------------------------------------------------------- * Pinouts and Pin assignments * - '+' indicates pin @@ -51,12 +57,12 @@ * Teensy 2.0 Pin Assignments * ========================== * power_negative GND +---.....---+ Vcc power_positive - * column6 PB0 + + PF0 row0 - * o + PF1 row1 - * o + PF4 row2 - * o o o + PF5 row3 - * LED3 OC1C + + PF6 row4 - * I2C SCL + + PF7 row5 + * column6 PB0 + + PF0 row6 + * o + PF1 row7 + * o + PF4 row8 + * o o o + PF5 row9 + * LED3 OC1C + + PF6 rowA + * I2C SCL + + PF7 rowB * I2C SDA + + OC1B LED2 * column3 PD2 + + OC1A LED1 * column4 PD3 + + PB4 column0 @@ -68,31 +74,28 @@ * power_negative Vss(GND) +01---.---28o * o02 27o * column0 GPB0 +03 26o - * column1 GPB1 +04 25+ GPA5 row5 - * column2 GPB2 +05 24+ GPA4 row4 - * column3 GPB3 +06 23+ GPA3 row3 - * column4 GPB4 +07 22+ GPA2 row2 - * column5 GPB5 +08 21+ GPA1 row1 - * column6 GPB6 +09 20+ GPA0 row0 + * column1 GPB1 +04 25+ GPA5 rowB + * column2 GPB2 +05 24+ GPA4 rowA + * column3 GPB3 +06 23+ GPA3 row9 + * column4 GPB4 +07 22+ GPA2 row8 + * column5 GPB5 +08 21+ GPA1 row7 + * column6 GPB6 +09 20+ GPA0 row6 * o10 19o * power_positive Vdd(Vcc) +11 18o * I2C SCL +12 17o - * I2C SDA +13 16+ RESET (see note) + * I2C SDA +13 16o * o14-------15+ ADDR (see note) * * notes: - * - ADDR (pin15): Set to 0b000 via - * Vdd(Vcc) -- R1 -- V2 (on ADDR) -- R2 -- Vss(GND) - * where - * Vdd = +5V - * R1 = ?TODO:\ - * V2 = ?TODO: | (see mcp23018 datasheet, pg 11) - * R2 = ?TODO:/ - * - RESET (pin16): Not used by software. Might want to have it available - * somewhere physically just in case though? + * - ADDR (pin15): Set slave address to 0b0100000 by connecting to Vss(GND) + * - note: The user-defined bits are the three least significant * ------------------------------------------------------------------------- */ +// ---------------------------------------------------------------------------- +// macros +// ---------------------------------------------------------------------------- + // processor frequency (from ) #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) #define CPU_16MHz 0x00 @@ -105,12 +108,89 @@ #define CPU_125kHz 0x07 #define CPU_62kHz 0x08 -// pins -// TODO: write some pretty macros +// teensy pins +// TODO +// I2C SCL PD0 +// I2C SDA PD1 +// LED1 OC1A PB5 +// LED2 OC1B PB6 +// LED3 OC1C PB7 +// COLUMN_0_RH PB4 +// COLUMN_1_RH PC6 +// COLUMN_2_RH PC7 +// COLUMN_3_RH PD2 +// COLUMN_4_RH PD3 +// COLUMN_5_RH PD7 +// COLUMN_6_RH PB0 +// ROW_0 PF0 +// ROW_1 PF1 +// ROW_2 PF4 +// ROW_3 PF5 +// ROW_4 PF6 +// ROW_5 PF7 -// TODO: -// - initialize pins +// mcp23018 pins +// TODO +// I2C SCL +// I2C SDA +// COLUMN_0_LH GPB0 +// COLUMN_1_LH GPB1 +// COLUMN_2_LH GPB2 +// COLUMN_3_LH GPB3 +// COLUMN_4_LH GPB4 +// COLUMN_5_LH GPB5 +// COLUMN_6_LH GPB6 +// ROW_6 GPA0 +// ROW_7 GPA1 +// ROW_8 GPA2 +// ROW_9 GPA3 +// ROW_A GPA4 +// ROW_B GPA5 + +// pins logically common to both +// TODO +// (i don't think we're going to use these this way...) +// COLUMN_0 GPB0 +// COLUMN_0 PB4 +// COLUMN_1 GPB1 +// COLUMN_1 PC6 +// COLUMN_2 GPB2 +// COLUMN_2 PC7 +// COLUMN_3 GPB3 +// COLUMN_3 PD2 +// COLUMN_4 GPB4 +// COLUMN_4 PD3 +// COLUMN_5 GPB5 +// COLUMN_5 PD7 +// COLUMN_6 GPB6 +// COLUMN_6 PB0 + + + +// ---------------------------------------------------------------------------- +// functions +// ---------------------------------------------------------------------------- + +// TODO +// - set internal brown-out detection circuit? void controller_init() { + // teensy + // --- processor frequency CPU_PRESCALE(CPU_16MHz); // speed should match F_CPU in makefile + + // --- pins + // --- --- unused: set as input with internal pullup enabled (see + // teensy 2.0 datasheet section 10.2.6) + DDRB &= ~0b00001110; // set B(1,2,3) as input + PORTB |= 0b00001110; // set B(1,2,3) internal pullup enabled + DDRD &= ~0b01110000; // set D(4,5,6) as input + PORTD |= 0b01110000; // set D(4,5,6) internal pullup enabled + DDRE &= ~0b01000000; // set E(6) as input + PORTE |= 0b01000000; // set E(6) internal pullup enabled + // --- --- [used] + // TODO + + // mcp32018 + // TODO } diff --git a/src/hardware/ergodox.h b/src/hardware/ergodox.h new file mode 100644 index 0000000..34dbdb6 --- /dev/null +++ b/src/hardware/ergodox.h @@ -0,0 +1,18 @@ +/* ---------------------------------------------------------------------------- + * Copyright (c) 2012 Ben Blazak + * Released under The MIT License (MIT) (see "license.md") at + * + * ------------------------------------------------------------------------- */ + + +#define KB_LAYERS 1 +#define KB_ROWS 12 // must match real life +#define KB_COLUMNS 7 // must match real life + + +void controller_init(); + +void kb_init(); + +// TODO + diff --git a/src/keyboard/ergodox.h b/src/keyboard/ergodox.h deleted file mode 100644 index e69de29..0000000