diff --git a/tutorials/breadboard_keyboard_supplies.ods b/tutorials/breadboard_keyboard_supplies.ods index d7b3dec..82fd9f0 100644 Binary files a/tutorials/breadboard_keyboard_supplies.ods and b/tutorials/breadboard_keyboard_supplies.ods differ diff --git a/tutorials/keybrd_5_LEDs/LEDs_back.JPG b/tutorials/keybrd_5a_LED_on_uC/LEDs_back.JPG similarity index 100% rename from tutorials/keybrd_5_LEDs/LEDs_back.JPG rename to tutorials/keybrd_5a_LED_on_uC/LEDs_back.JPG diff --git a/tutorials/keybrd_5_LEDs/keybrd_5_LEDs.ino b/tutorials/keybrd_5a_LED_on_uC/keybrd_5a_LED_on_uC.ino similarity index 100% rename from tutorials/keybrd_5_LEDs/keybrd_5_LEDs.ino rename to tutorials/keybrd_5a_LED_on_uC/keybrd_5a_LED_on_uC.ino diff --git a/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino b/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino index 5c240df..beb9739 100644 --- a/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino +++ b/tutorials/keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino @@ -49,7 +49,7 @@ PortMCP23S17 portWrite(port_B, 0); Scanner_IOE scanner_R(LOW, portWrite, portRead); // ================ RIGHT LEDs ================= -//LED_IOE LED_CapsLck(portRead, 1<<6); //tested LED on port A (read) +LED_IOE LED_CapsLck(portRead, 1<<6); //tested LED on port A (read) //LED_IOE LED_CapsLck(portWrite, 1<<6);//tested LED on port B (write) // =================== CODES =================== @@ -62,8 +62,7 @@ Code_Sc s_1(KEY_1); Code_Sc s_2(KEY_2); Code_Sc s_3(KEY_3); -Code_Sc o_capsLock(KEY_4); -//Code_LEDLock o_capsLock(KEY_CAPS_LOCK, LED_CapsLck); +Code_LEDLock o_capsLock(KEY_CAPS_LOCK, LED_CapsLck); // =================== ROWS ==================== // ---------------- LEFT ROWS ------------------ diff --git a/tutorials/tutorial_5_LEDs.md b/tutorials/tutorial_5a_LED_on_uC.md similarity index 64% rename from tutorials/tutorial_5_LEDs.md rename to tutorials/tutorial_5a_LED_on_uC.md index c23e562..2d0b392 100644 --- a/tutorials/tutorial_5_LEDs.md +++ b/tutorials/tutorial_5a_LED_on_uC.md @@ -1,5 +1,5 @@ -Tutorial 5 - indicator LEDs -=========================== +Tutorial 5a - indicator LEDs +============================ Keyboards often have LEDs to indicate CapsLock, NumLock, and other states. It's one of the first things we look at when a keyboard produces unexpected results. @@ -9,44 +9,49 @@ The breadboard keyboard modifies the basic breadboard keyboard described in [tut Add components to the breadboard as shown in the picture. -The three clear plastic cylinders are LEDs. -LED anodes (the longer lead) are powered by 4.7k Ohm current limiting resistors connected to pins 16, 17, and 21. -LED cathodes (the shorter lead) are grounded by a common terminal strip. +The three clear plastic cylinders are red and yellow LEDs. +Each LED is in series with a 4.7k Ohm current limiting resistor. +LED anodes (the longer lead) are powered by pins 16, 17, and 21. +LED cathodes (the shorter lead) are connected to a grounded terminal strip. !["LEDs"](keybrd_5_LEDs/LEDs_back.JPG "LEDs") -keybrd sketch for driving LEDs ------------------------------- -[keybrd_5_LEDs.ino](keybrd_5_LEDs/keybrd_5_LEDs.ino) is a simple sketch with three LEDs. -The sketch will run on the above breadboard keyboard. +keybrd sketch with LEDs +----------------------- +The [keybrd_5a_LED_on_uC.ino](keybrd_5a_LED_on_uC/keybrd_5a_LED_on_uC.ino) sketch will run on the above breadboard keyboard. As usual, the sketch annotations explain the code. +LED forward voltage +------------------- +Forward voltage is the voltage used by the LED. +Forward voltage is published in the LED's datasheet. + +Most blue and green LEDs have about 3.3 forward voltage, which does not reliably illuminate on Teensy LC's 3.3 volts. +Most red and yellow LEDs have around 2.2 forward voltage. +So use red and yellow LEDs on Teensy LC. +Low-current LEDs can go as low as 1.6 forward voltage. + LED brightness -------------- -An LED's current limiting resistor value effects the brightness of the LED. -Lets see how much visual difference resistance makes. -Replace an LED's 4.7k Ohm resistor with a 270 Ohm resistor. +The amount of current (I) going through an LED is directly proportional to how bright it appears. +By picking the correct resistor, you have full control over how bright the LED appears. -It doesn't matter which end of the LED the resistor is on, the important thing is that the resistor and LED are in series. +Lets see how much visual difference resistance makes. +Replace an LED's 4.7k Ohm resistor with a 68 Ohm resistor. Less resistance makes the LED brighter. Too little resistance will burn out the LED. -Connecting an LED directly to power will destroy the LED in a bright flash (do not look directly at the LED if you try this). - -2-mA LEDs are bright enough for keyboard indicator lights. -Or you can use more resistance on a 20-mA LED to make it dimmer. +The current supplied to an LED should always be limited by a resistor or some other device. LED current limiting resistor values ------------------------------------ -Never connect an LED directly from ground to power. Doing so would destroy the LED. - This formula calculates the minimum resistance for maximum LED brightness: ``` output-pin Supply Voltage Vs LED Forward Voltage Vf Forward Current If -minimum current limiting restiance R = (Vs - Vf) / If +From Ohm's Law, minimum current limiting restiance R = (Vs - Vf) / If ``` For Forward Current, use the smaller of: @@ -59,15 +64,24 @@ Teensy LC output-pin capacities are: * Teensy LC on-board LED is on pin 13. It has a current-limiting resistor on the board, and does not provide enough power for another LED. +Voltages and current capacities are published in datasheets and sometimes pinout diagrams. For Teensy LC 20 mA pin and the TT Electronics OVLLx8C7 LED: ``` output-pin Supply Voltage Vs = 3.3 volts LED Forward Voltage Vf = 2.2 volts + +use the smaller of: max pin Current If = 20 mA -max LED Current If = 20 mA +max LED Current If = 30 mA minimum current limiting restiance R = (Vs - Vf) / If = 55 Ohms ``` +Add a safety margin for resistor tolerances (1%, 2%, 5%, 10%), and round up to a standard value. + http://www.rfcafe.com/references/electrical/resistor-values.htm + +``` + 55 Ohms + (55 Ohms * 10%) = 60.5 Ohms < 68 Ohms +``` It is safe to use more resistance. Calculating the resistance for the Teensy LC 5 mA pin is left as an exercise. @@ -88,7 +102,6 @@ From your LED's datasheet, find: * Continuous Forward Current (mA) Calculate the minimum resistance needed for your LED and Supply Voltage. -There are several "LED current limiting resistor calculators" on line.
Creative Commons License
keybrd tutorial by Wolfram Volpi is licensed under a Creative Commons Attribution 4.0 International License.
Permissions beyond the scope of this license may be available at https://github.com/wolfv6/keybrd/issues/new. diff --git a/tutorials/tutorial_5b_LED_on_IOE.md b/tutorials/tutorial_5b_LED_on_IOE.md new file mode 100644 index 0000000..886d075 --- /dev/null +++ b/tutorials/tutorial_5b_LED_on_IOE.md @@ -0,0 +1,30 @@ +Tutorial 5b - indicator LED on IOE +================================== +This tutorial will show you how to add LEDs to an I/O expander. + +It is assumed the reader is familiar with LEDs from tutorial_5a_LED_on_uC.md +and familiar with I/O expanders from tutorial_4c_split_keyboard_with_IOE.md. + +Adding LEDs to the basic breadboard keyboard +-------------------------------------------- +The breadboard keyboard modifies the basic breadboard keyboard described in [tutorial_1_breadboard_keyboard.md](tutorial_1_breadboard_keyboard.md) + +Add components to the breadboard as shown in the picture. + +The two clear plastic cylinders are red and yellow LEDs. +Each LED is in series with a 4.7k Ohm current limiting resistor. +LED anodes (the longer lead) are powered by pins GPA6 and GPB6. +LED cathodes (the shorter lead) are connected to a grounded terminal strip. + +!["LEDs"](keybrd_5_LEDs/LEDs_back.JPG "LEDs") + +keybrd sketch with LEDs on IOE +------------------------------ +The [keybrd_5b_LED_on_IOE.ino](keybrd_5b_LED_on_IOE/keybrd_5b_LED_on_IOE.ino) sketch will run on the above breadboard keyboard. + +The sketch features: +* multiple layers +* split keyboard +* LED on controller +* LED on IOE write port +* LED on IOE read port