pwm audio
This commit is contained in:
		
							parent
							
								
									11ce694557
								
							
						
					
					
						commit
						29de37d5c0
					
				
							
								
								
									
										78
									
								
								keyboard/ergodox_ez/keymaps/keymap_generated.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								keyboard/ergodox_ez/keymaps/keymap_generated.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,78 @@
 | 
				
			|||||||
 | 
					#include "ergodox_ez.h"
 | 
				
			||||||
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					#include "action_layer.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// If it accepts an argument (i.e, is a function), it doesn't need KC_.
 | 
				
			||||||
 | 
					// Otherwise, it needs KC_*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SYMB 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[0] = KEYMAP( \
 | 
				
			||||||
 | 
					\
 | 
				
			||||||
 | 
					KC_KP_EQUAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_DELETE, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1), KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TAB, KC_LEFT, KC_RIGHT, KC_TRANSPARENT, KC_LGUI, KC_HOME, KC_SPACE, KC_BSPACE, KC_END, KC_RIGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, KC_TRANSPARENT, KC_N, KC_M, KC_COMMA, KC_DOT, KC_LCTRL, KC_LSHIFT, KC_UP, KC_DOWN, KC_LBRACKET, KC_RBRACKET, KC_TRANSPARENT, KC_LALT, KC_ESCAPE, KC_PGUP, KC_PGDOWN, KC_TAB, KC_ENTER \
 | 
				
			||||||
 | 
					\
 | 
				
			||||||
 | 
					),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[1] = KEYMAP( \
 | 
				
			||||||
 | 
					\
 | 
				
			||||||
 | 
					KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRANSPARENT, KC_UP, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12, KC_DOWN, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRANSPARENT, KC_TRANSPARENT, , KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_SLASH, KC_TRANSPARENT, KC_TRANSPARENT, KC_KP_DOT, KC_KP_0, KC_KP_EQUAL, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT \
 | 
				
			||||||
 | 
					\
 | 
				
			||||||
 | 
					),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[2] = KEYMAP( \
 | 
				
			||||||
 | 
					\
 | 
				
			||||||
 | 
					KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_UP, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MS_BTN3, KC_MS_BTN2, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PLAY_PAUSE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_UP, KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT \
 | 
				
			||||||
 | 
					\
 | 
				
			||||||
 | 
					),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM fn_actions[] = {
 | 
				
			||||||
 | 
					    [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // MACRODOWN only works in this function
 | 
				
			||||||
 | 
					      switch(id) {
 | 
				
			||||||
 | 
					        case 0:
 | 
				
			||||||
 | 
					        if (record->event.pressed) {
 | 
				
			||||||
 | 
					          register_code(KC_RSFT);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          unregister_code(KC_RSFT);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    return MACRO_NONE;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs just one time when the keyboard initializes.
 | 
				
			||||||
 | 
					void * matrix_init_user(void) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Runs constantly in the background, in a loop.
 | 
				
			||||||
 | 
					void * matrix_scan_user(void) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint8_t layer = biton32(layer_state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ergodox_board_led_off();
 | 
				
			||||||
 | 
					    ergodox_right_led_1_off();
 | 
				
			||||||
 | 
					    ergodox_right_led_2_off();
 | 
				
			||||||
 | 
					    ergodox_right_led_3_off();
 | 
				
			||||||
 | 
					    switch (layer) {
 | 
				
			||||||
 | 
					      // TODO: Make this relevant to the ErgoDox EZ.
 | 
				
			||||||
 | 
					        case 1:
 | 
				
			||||||
 | 
					            ergodox_right_led_1_on();
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 2:
 | 
				
			||||||
 | 
					            ergodox_right_led_2_on();
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            // none
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -8,29 +8,6 @@
 | 
				
			|||||||
#define MDIA 2 // media keys
 | 
					#define MDIA 2 // media keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
/* Keymap 0: Basic layer
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 | 
					 | 
				
			||||||
 * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|   '    |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
 | 
					 | 
				
			||||||
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 | 
					 | 
				
			||||||
 *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
 | 
					 | 
				
			||||||
 *   `----------------------------------'                                       `----------------------------------'
 | 
					 | 
				
			||||||
 *                                        ,-------------.       ,-------------.
 | 
					 | 
				
			||||||
 *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
 | 
					 | 
				
			||||||
 *                                 ,------|------|------|       |------+--------+------.
 | 
					 | 
				
			||||||
 *                                 |      |      | Home |       | PgUp |        |      |
 | 
					 | 
				
			||||||
 *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
 | 
					 | 
				
			||||||
 *                                 |      |ace   | End  |       | PgDn |        |      |
 | 
					 | 
				
			||||||
 *                                 `--------------------'       `----------------------'
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
 | 
					 | 
				
			||||||
// Otherwise, it needs KC_*
 | 
					 | 
				
			||||||
[BASE] = KEYMAP(  // layer 0 : default
 | 
					[BASE] = KEYMAP(  // layer 0 : default
 | 
				
			||||||
        // left hand
 | 
					        // left hand
 | 
				
			||||||
        KC_NO,          KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_NO,
 | 
					        KC_NO,          KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_NO,
 | 
				
			||||||
@ -51,28 +28,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
             KC_PGUP,
 | 
					             KC_PGUP,
 | 
				
			||||||
             KC_PGDN, KC_SPC,KC_SPC
 | 
					             KC_PGDN, KC_SPC,KC_SPC
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
/* Keymap 1: Symbol Layer
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 | 
					 | 
				
			||||||
 * |        |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
 | 
					 | 
				
			||||||
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 | 
					 | 
				
			||||||
 *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
 | 
					 | 
				
			||||||
 *   `----------------------------------'                                       `----------------------------------'
 | 
					 | 
				
			||||||
 *                                        ,-------------.       ,-------------.
 | 
					 | 
				
			||||||
 *                                        |      |      |       |      |      |
 | 
					 | 
				
			||||||
 *                                 ,------|------|------|       |------+------+------.
 | 
					 | 
				
			||||||
 *                                 |      |      |      |       |      |      |      |
 | 
					 | 
				
			||||||
 *                                 |      |      |------|       |------|      |      |
 | 
					 | 
				
			||||||
 *                                 |      |      |      |       |      |      |      |
 | 
					 | 
				
			||||||
 *                                 `--------------------'       `--------------------'
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
// SYMBOLS
 | 
					 | 
				
			||||||
[SYMB] = KEYMAP(
 | 
					[SYMB] = KEYMAP(
 | 
				
			||||||
       // left hand
 | 
					       // left hand
 | 
				
			||||||
       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
 | 
					       KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
 | 
				
			||||||
@ -93,29 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
       KC_TRNS,
 | 
					       KC_TRNS,
 | 
				
			||||||
       KC_TRNS, KC_TRNS, KC_TRNS
 | 
					       KC_TRNS, KC_TRNS, KC_TRNS
 | 
				
			||||||
),
 | 
					),
 | 
				
			||||||
/* Keymap 2: Media and mouse keys
 | 
					[MDIA] = KEYMAP(
 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 | 
					 | 
				
			||||||
 * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
 | 
					 | 
				
			||||||
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 | 
					 | 
				
			||||||
 * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
 | 
					 | 
				
			||||||
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 | 
					 | 
				
			||||||
 *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
 | 
					 | 
				
			||||||
 *   `----------------------------------'                                       `----------------------------------'
 | 
					 | 
				
			||||||
 *                                        ,-------------.       ,-------------.
 | 
					 | 
				
			||||||
 *                                        |      |      |       |      |      |
 | 
					 | 
				
			||||||
 *                                 ,------|------|------|       |------+------+------.
 | 
					 | 
				
			||||||
 *                                 |      |      |      |       |      |      |Brwser|
 | 
					 | 
				
			||||||
 *                                 |      |      |------|       |------|      |Back  |
 | 
					 | 
				
			||||||
 *                                 |      |      |      |       |      |      |      |
 | 
					 | 
				
			||||||
 *                                 `--------------------'       `--------------------'
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
// MEDIA AND MOUSE
 | 
					 | 
				
			||||||
KEYMAP(
 | 
					 | 
				
			||||||
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
 | 
					       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
 | 
				
			||||||
       KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS,
 | 
					       KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS,
 | 
				
			||||||
       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  
 | 
					       KC_TRNS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  
 | 
				
			||||||
 | 
				
			|||||||
@ -122,8 +122,8 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration
 | 
				
			|||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
# SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | 
					# SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | 
				
			||||||
# NKRO_ENABLE = yes		# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
					# NKRO_ENABLE = yes		# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
 | 
					# BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
 | 
				
			||||||
# MIDI_ENABLE = YES 		# MIDI controls
 | 
					MIDI_ENABLE = YES 		# MIDI controls
 | 
				
			||||||
# UNICODE_ENABLE = YES 		# Unicode
 | 
					# UNICODE_ENABLE = YES 		# Unicode
 | 
				
			||||||
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
					# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										42
									
								
								keyboard/planck/keymaps/keymap_eric.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								keyboard/planck/keymaps/keymap_eric.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					#include "planck.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					 [0] = {
 | 
				
			||||||
 | 
					    {KC_BSLS, S(KC_SLSH), KC_COMM,       KC_DOT,   KC_P,   KC_Y,   KC_F,    KC_G,         KC_C,    KC_R,    KC_L, KC_SLSH}, 
 | 
				
			||||||
 | 
					    {TG(1),         KC_A,    KC_O,         KC_E,   KC_U,   KC_I,   KC_D,    KC_H,         KC_T,    KC_N,    KC_S, KC_MINS},
 | 
				
			||||||
 | 
					    {KC_LGUI,    KC_QUOT,    KC_Q,         KC_J,   KC_K,   KC_X,   KC_B,    KC_M,         KC_W,    KC_V,    KC_Z, KC_RGUI},
 | 
				
			||||||
 | 
					    {KC_LCBR,    KC_LCTL, KC_LALT, LT(1, TG(2)), KC_SPC, KC_TAB, KC_ENT, KC_BSPC, LT(1, TG(3)), KC_RALT, KC_RCTL, KC_RCBR}
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 [1] = {
 | 
				
			||||||
 | 
					    {KC_PIPE,    KC_COLN, KC_LBRC,  KC_RBRC, S(KC_P), S(KC_Y), S(KC_F), S(KC_G), S(KC_C), S(KC_R), S(KC_L), KC_AMPR}, 
 | 
				
			||||||
 | 
					    {KC_TRNS,    S(KC_A), S(KC_O),  S(KC_E), S(KC_U), S(KC_I), S(KC_D), S(KC_H), S(KC_T), S(KC_N), S(KC_S), KC_GRV},
 | 
				
			||||||
 | 
					    {KC_TRNS,    KC_SCLN, S(KC_Q),  S(KC_J), S(KC_K), S(KC_X), S(KC_B), S(KC_M), S(KC_W), S(KC_V), S(KC_Z), KC_TRNS},
 | 
				
			||||||
 | 
					    {S(KC_COMM), KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_DOT)}
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 [2] = {
 | 
				
			||||||
 | 
					    {KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10, KC_NO}, 
 | 
				
			||||||
 | 
					    {KC_NO,  KC_F11,  KC_F12,  KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20, KC_NO},
 | 
				
			||||||
 | 
					    {KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO, KC_TRNS},
 | 
				
			||||||
 | 
					    {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO}
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 [3] = {
 | 
				
			||||||
 | 
					    {KC_EXLM,  KC_7,    KC_5,    KC_3,      KC_1,    KC_9,    KC_0,    KC_2,    KC_4,    KC_6,    KC_8, KC_EQL}, 
 | 
				
			||||||
 | 
					    {TG(4),   KC_NO, KC_PGUP, KC_HOME, KC_INSERT,   KC_NO,   KC_NO,  BL_DEC,   KC_UP,  BL_INC,   KC_NO, KC_NO},
 | 
				
			||||||
 | 
					    {KC_TRNS, KC_NO, KC_PGDN,  KC_END, KC_DELETE,   KC_NO,   KC_NO, KC_LEFT, KC_DOWN, KC_RGHT,   KC_NO, KC_TRNS},
 | 
				
			||||||
 | 
					    {KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO}
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 [4] = {
 | 
				
			||||||
 | 
					    {KC_TILD, KC_HASH, KC_LPRN, KC_RPRN, S(KC_QUOT), KC_PERC, KC_UNDS, KC_CIRC,  KC_DLR,   KC_AT, KC_ASTR, KC_PLUS}, 
 | 
				
			||||||
 | 
					    {KC_TRNS,   KC_NO,   KC_NO,   KC_NO,      KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO, KC_NO},
 | 
				
			||||||
 | 
					    {KC_TRNS,   KC_NO,   KC_NO,   KC_NO,      KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO, KC_TRNS},
 | 
				
			||||||
 | 
					    {KC_NO,   KC_TRNS, KC_TRNS, KC_TRNS,    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO}
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM fn_actions[] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
#include "keymap_common.h"
 | 
					#include "keymap_common.h"
 | 
				
			||||||
#include "backlight.h"
 | 
					// #include "backlight.h"
 | 
				
			||||||
#include "action_layer.h"
 | 
					#include "action_layer.h"
 | 
				
			||||||
#include "keymap_midi.h"
 | 
					#include "keymap_midi.h"
 | 
				
			||||||
#include <avr/boot.h>
 | 
					#include <avr/boot.h>
 | 
				
			||||||
@ -71,7 +71,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
        if (record->event.pressed) {
 | 
					        if (record->event.pressed) {
 | 
				
			||||||
          // play_note(440, 20);
 | 
					          // play_note(440, 20);
 | 
				
			||||||
          // register_code(KC_RSFT);
 | 
					          // register_code(KC_RSFT);
 | 
				
			||||||
          backlight_set(BACKLIGHT_LEVELS);
 | 
					          // backlight_set(BACKLIGHT_LEVELS);
 | 
				
			||||||
          default_layer_and(0); 
 | 
					          default_layer_and(0); 
 | 
				
			||||||
          default_layer_or((1<<5));
 | 
					          default_layer_or((1<<5));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -106,9 +106,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
          // note(0+12, 20);
 | 
					          // note(0+12, 20);
 | 
				
			||||||
          // note(0+24, 20);
 | 
					          // note(0+24, 20);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
          // unregister_code(KC_RSFT);
 | 
					          unregister_code(KC_RSFT);
 | 
				
			||||||
          // stop_note();
 | 
					          // stop_all_notes();
 | 
				
			||||||
          backlight_set(0);
 | 
					          // backlight_set(0);
 | 
				
			||||||
          default_layer_and(0); 
 | 
					          default_layer_and(0); 
 | 
				
			||||||
          default_layer_or(0);
 | 
					          default_layer_or(0);
 | 
				
			||||||
          // note(0+24, 20);
 | 
					          // note(0+24, 20);
 | 
				
			||||||
 | 
				
			|||||||
@ -19,6 +19,35 @@ void * matrix_init_kb(void) {
 | 
				
			|||||||
    DDRE |= (1<<6);
 | 
					    DDRE |= (1<<6);
 | 
				
			||||||
    PORTE |= (1<<6);
 | 
					    PORTE |= (1<<6);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init_notes();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // play_note(((double)261.6*32)*pow(2.0,(36)/12.0), 0xF);
 | 
				
			||||||
 | 
					    // _delay_ms(50);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // play_note(((double)261.6*32)*pow(2.0,(48)/12.0), 0xF);
 | 
				
			||||||
 | 
					    // _delay_ms(25);
 | 
				
			||||||
 | 
					    // stop_note(((double)261.6*32)*pow(2.0,(48)/12.0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // play_note(((double)261.6*32)*pow(2.0,(48)/12.0), 0xF);
 | 
				
			||||||
 | 
					    // _delay_ms(25);
 | 
				
			||||||
 | 
					    // stop_note(((double)261.6*32)*pow(2.0,(48)/12.0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // stop_note(((double)261.6*32)*pow(2.0,(36)/12.0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // play_note(((double)261.6*32)*pow(2.0,(62)/12.0), 0xF);
 | 
				
			||||||
 | 
					    // _delay_ms(50);
 | 
				
			||||||
 | 
					    // stop_note(((double)261.6*32)*pow(2.0,(62)/12.0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // play_note(((double)261.6*32)*pow(2.0,(64)/12.0), 0xF);
 | 
				
			||||||
 | 
					    // _delay_ms(50);
 | 
				
			||||||
 | 
					    // stop_note(((double)261.6*32)*pow(2.0,(64)/12.0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (matrix_init_user) {
 | 
						if (matrix_init_user) {
 | 
				
			||||||
		(*matrix_init_user)();
 | 
							(*matrix_init_user)();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -3,8 +3,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "matrix.h"
 | 
					#include "matrix.h"
 | 
				
			||||||
#include "keymap_common.h"
 | 
					#include "keymap_common.h"
 | 
				
			||||||
#include "backlight.h"
 | 
					// #include "backlight.h"
 | 
				
			||||||
#include <stddef.h>
 | 
					#include <stddef.h>
 | 
				
			||||||
 | 
					#ifdef MIDI_ENABLE
 | 
				
			||||||
 | 
						#include <keymap_midi.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PLANCK_MIT( \
 | 
					#define PLANCK_MIT( \
 | 
				
			||||||
	k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
						k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										243
									
								
								quantum/beeps.c
									
									
									
									
									
								
							
							
						
						
									
										243
									
								
								quantum/beeps.c
									
									
									
									
									
								
							@ -1,11 +1,20 @@
 | 
				
			|||||||
#include "beeps.h"
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
#include <math.h>
 | 
					#include <math.h>
 | 
				
			||||||
#include <avr/pgmspace.h>
 | 
					#include <avr/pgmspace.h>
 | 
				
			||||||
#include <avr/interrupt.h>
 | 
					#include <avr/interrupt.h>
 | 
				
			||||||
#include <avr/io.h>
 | 
					#include <avr/io.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "beeps.h"
 | 
				
			||||||
 | 
					#include "keymap_common.h"
 | 
				
			||||||
 | 
					#include "wave.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PI 3.14159265
 | 
					#define PI 3.14159265
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SAMPLE_DIVIDER 70
 | 
				
			||||||
 | 
					#define SAMPLE_RATE (2000000.0/SAMPLE_DIVIDER/256)
 | 
				
			||||||
 | 
					// Resistor value of 1/ (2 * PI * 10nF * (2000000 hertz / SAMPLE_DIVIDER / 10)) for 10nF cap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void delay_us(int count) {
 | 
					void delay_us(int count) {
 | 
				
			||||||
  while(count--) {
 | 
					  while(count--) {
 | 
				
			||||||
    _delay_us(1);
 | 
					    _delay_us(1);
 | 
				
			||||||
@ -15,7 +24,7 @@ void delay_us(int count) {
 | 
				
			|||||||
int voices = 0;
 | 
					int voices = 0;
 | 
				
			||||||
double frequency = 0;
 | 
					double frequency = 0;
 | 
				
			||||||
int volume = 0;
 | 
					int volume = 0;
 | 
				
			||||||
int position = 0;
 | 
					long position = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
double frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 | 
					double frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 | 
				
			||||||
int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 | 
					int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
 | 
				
			||||||
@ -23,6 +32,19 @@ bool sliding = false;
 | 
				
			|||||||
#define RANGE 1000
 | 
					#define RANGE 1000
 | 
				
			||||||
volatile int i=0; //elements of the wave
 | 
					volatile int i=0; //elements of the wave
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// uint8_t sine[128];
 | 
				
			||||||
 | 
					// uint8_t tri[128];
 | 
				
			||||||
 | 
					// uint8_t squ[128];
 | 
				
			||||||
 | 
					// uint8_t* sine_start;
 | 
				
			||||||
 | 
					// uint8_t* sine_end;
 | 
				
			||||||
 | 
					// uint8_t* tri_start;
 | 
				
			||||||
 | 
					// uint8_t* tri_end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// uint8_t* s_start;
 | 
				
			||||||
 | 
					// uint8_t* s_end;
 | 
				
			||||||
 | 
					// uint8_t* s_ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void beeps() {
 | 
					void beeps() {
 | 
				
			||||||
    play_notes();
 | 
					    play_notes();
 | 
				
			||||||
@ -36,8 +58,7 @@ void send_freq(double freq, int vol) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void stop_all_notes() {
 | 
					void stop_all_notes() {
 | 
				
			||||||
    voices = 0;
 | 
					    voices = 0;
 | 
				
			||||||
    TCCR3A = 0;
 | 
					    TIMSK0 &= ~_BV(OCIE0A);
 | 
				
			||||||
    TCCR3B = 0;
 | 
					 | 
				
			||||||
    frequency = 0;
 | 
					    frequency = 0;
 | 
				
			||||||
    volume = 0;
 | 
					    volume = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -48,6 +69,7 @@ void stop_all_notes() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void stop_note(double freq) {
 | 
					void stop_note(double freq) {
 | 
				
			||||||
 | 
					    freq = freq / SAMPLE_RATE;
 | 
				
			||||||
    for (int i = 7; i >= 0; i--) {
 | 
					    for (int i = 7; i >= 0; i--) {
 | 
				
			||||||
        if (frequencies[i] == freq) {
 | 
					        if (frequencies[i] == freq) {
 | 
				
			||||||
            frequencies[i] = 0;
 | 
					            frequencies[i] = 0;
 | 
				
			||||||
@ -64,151 +86,176 @@ void stop_note(double freq) {
 | 
				
			|||||||
    if (voices < 0)
 | 
					    if (voices < 0)
 | 
				
			||||||
        voices = 0;
 | 
					        voices = 0;
 | 
				
			||||||
    if (voices == 0) {
 | 
					    if (voices == 0) {
 | 
				
			||||||
        TCCR3A = 0;
 | 
					        TIMSK0 &= ~_BV(OCIE0A);
 | 
				
			||||||
        TCCR3B = 0;
 | 
					 | 
				
			||||||
        frequency = 0;
 | 
					        frequency = 0;
 | 
				
			||||||
        volume = 0;
 | 
					        volume = 0;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        double freq = frequencies[voices - 1];
 | 
					        double freq = frequencies[voices - 1];
 | 
				
			||||||
        int vol = volumes[voices - 1];
 | 
					        int vol = volumes[voices - 1];
 | 
				
			||||||
 | 
					        double starting_f = frequency;
 | 
				
			||||||
        if (frequency < freq) {
 | 
					        if (frequency < freq) {
 | 
				
			||||||
            sliding = true;
 | 
					            sliding = true;
 | 
				
			||||||
            for (double f = frequency; f <= freq; f += ((freq - frequency) / 500.0)) {
 | 
					            for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 500.0)) {
 | 
				
			||||||
                send_freq(f, vol);
 | 
					                frequency = f;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            sliding = false;
 | 
					            sliding = false;
 | 
				
			||||||
        } else if (frequency > freq) {
 | 
					        } else if (frequency > freq) {
 | 
				
			||||||
            sliding = true;
 | 
					            sliding = true;
 | 
				
			||||||
            for (double f = frequency; f >= freq; f -= ((frequency - freq) / 500.0)) {
 | 
					            for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 500.0)) {
 | 
				
			||||||
                send_freq(f, vol);
 | 
					                frequency = f;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            sliding = false;
 | 
					            sliding = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        send_freq(freq, vol);
 | 
					        // send_freq(freq, vol);
 | 
				
			||||||
        frequency = freq;
 | 
					        frequency = freq;
 | 
				
			||||||
        volume = vol;
 | 
					        volume = vol;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void init_notes() {
 | 
					void init_notes() {
 | 
				
			||||||
    // TCCR1A = (1 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (1 << WGM10);
 | 
					 | 
				
			||||||
    // TCCR1B = (1 << COM1B1) | (0 << COM1A0) | (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (0 << CS11) | (1 << CS10);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // DDRC |= (1<<6); 
 | 
					    // for(int i = 0; i < 128; i++) {
 | 
				
			||||||
 | 
					    //     sine[i] = sin(i * PI / 64) * 128 + 128;
 | 
				
			||||||
 | 
					    //     tri[i] = 256 - abs((i - 64) * 4);
 | 
				
			||||||
 | 
					    // }
 | 
				
			||||||
 | 
					    // sine_start = &sine;
 | 
				
			||||||
 | 
					    // sine_end = &sine + 128;
 | 
				
			||||||
 | 
					    // tri_start = &tri;
 | 
				
			||||||
 | 
					    // tri_end = &tri + 128;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
 | 
					 // new
 | 
				
			||||||
    // TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (0 << CS31) | (1 << CS30);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // ICR3 = 0xFFFF; 
 | 
					 | 
				
			||||||
    // OCR3A = (int)((float)wave[i]*ICR3/RANGE); //go to next array element
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // cli();
 | 
					  PLLFRQ = _BV(PDIV2);
 | 
				
			||||||
 | 
					  PLLCSR = _BV(PLLE);
 | 
				
			||||||
 | 
					  while(!(PLLCSR & _BV(PLOCK)));
 | 
				
			||||||
 | 
					  PLLFRQ |= _BV(PLLTM0); /* PCK 48MHz */
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    // /* Enable interrupt on timer2 == 127, with clk/8 prescaler. At 16MHz,
 | 
					  /* Init a fast PWM on Timer4 */
 | 
				
			||||||
    //    this gives a timer interrupt at 15625Hz. */
 | 
					  TCCR4A = _BV(COM4A0) | _BV(PWM4A); /* Clear OC4A on Compare Match */
 | 
				
			||||||
    // TIMSK3 = (1 << OCIE3A);
 | 
					  TCCR4B = _BV(CS40); /* No prescaling => f = PCK/256 = 187500Hz */
 | 
				
			||||||
 | 
					  OCR4A = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // /* clear/reset timer on match */
 | 
					  /* Enable the OC4A output */
 | 
				
			||||||
    // // TCCR3A = 1<<WGM31 | 0<<WGM30;  CTC mode, reset on match 
 | 
					  DDRC |= _BV(PORTC6);
 | 
				
			||||||
    // // TCCR3B = 0<<CS32 | 1<<CS31 | 0<<CS30; /* clk, /8 prescaler */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
 | 
					 | 
				
			||||||
    // TCCR3B = (0 << WGM33) | (0 << WGM32) | (0 << CS32) | (0 << CS31) | (1 << CS30);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TCCR1A = (1 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (0 << WGM10);
 | 
					 | 
				
			||||||
    // TCCR1B = (1 << WGM12) | (0 << CS12) | (0 << CS11) | (1 << CS10);
 | 
					 | 
				
			||||||
    // // SPCR = 0x50;
 | 
					 | 
				
			||||||
    // // SPSR = 0x01;
 | 
					 | 
				
			||||||
    // DDRC |= (1<<6);
 | 
					 | 
				
			||||||
    // // ICR3 = 0xFFFF; 
 | 
					 | 
				
			||||||
    // // OCR3A=80;
 | 
					 | 
				
			||||||
    // PORTC |= (1<<6);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // sei();
 | 
					       /* First disable the timer overflow interrupt while we're configuring */
 | 
				
			||||||
 | 
					  // TIMSK0 &= ~(1<<TOIE0);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  // /* Configure timer4 in normal mode (pure counting, no PWM etc.) */
 | 
				
			||||||
 | 
					  // TCCR0A &= ~((1<<WGM01) | (1<<WGM00));
 | 
				
			||||||
 | 
					  // TCCR0B &= ~(1<<WGM02);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // /* Disable Compare Match A interrupt enable (only want overflow) */
 | 
				
			||||||
 | 
					  // TIMSK0 &= ~(1<<OCIE0A);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  // TCCR0B |= (1<<CS01); // Set bits
 | 
				
			||||||
 | 
					  // TCCR0B &= ~(1<<CS00) | ~(1<<CS02);             // Clear bit
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					  // /* Save value globally for later reload in ISR */
 | 
				
			||||||
 | 
					  // tcnt0 = 45 - 1; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // /* Finally load end enable the timer */
 | 
				
			||||||
 | 
					  // TCNT0 = tcnt0;
 | 
				
			||||||
 | 
					  // TIMSK0 |= (1<<TOIE0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// #define highByte(c) ((c >> 8) & 0x00FF)
 | 
					int max = 0xFF;
 | 
				
			||||||
// #define lowByte(c) (c & 0x00FF)
 | 
					float sum = 0;
 | 
				
			||||||
 | 
					int value = 128;
 | 
				
			||||||
 | 
					float place = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ISR(TIMER3_COMPA_vect) {
 | 
					ISR(TIMER0_COMPA_vect) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (ICR3 > 0 && !sliding) {
 | 
					 | 
				
			||||||
        switch (position) {
 | 
					 | 
				
			||||||
            case 0: {
 | 
					 | 
				
			||||||
                int duty = (((double)F_CPU) / (frequency));
 | 
					 | 
				
			||||||
                ICR3 = duty; // Set max to the period
 | 
					 | 
				
			||||||
                OCR3A = duty >> 1; // Set compare to half the period
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            case 1: {
 | 
					 | 
				
			||||||
                int duty = (((double)F_CPU) / (frequency*2));
 | 
					 | 
				
			||||||
                ICR3 = duty; // Set max to the period
 | 
					 | 
				
			||||||
                OCR3A = duty >> 1; // Set compare to half the period
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            case 2: {
 | 
					 | 
				
			||||||
                int duty = (((double)F_CPU) / (frequency*3));
 | 
					 | 
				
			||||||
                ICR3 = duty; // Set max to the period
 | 
					 | 
				
			||||||
                OCR3A = duty >> 1; // Set compare to half the period
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        position = (position + 1) % 3;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
//     /* OCR2A has been cleared, per TCCR2A above */
 | 
					 | 
				
			||||||
//     // OCR3A = 127;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//     // pos1 += incr1;
 | 
					 | 
				
			||||||
//     // pos2 += incr2;
 | 
					 | 
				
			||||||
//     // pos3 += incr3;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//     // sample = sinewave[highByte(pos1)] + sinewave[highByte(pos2)] + sinewave[highByte(pos3)];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//     // OCR3A = sample;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//     OCR3A=pgm_read_byte(&sinewave[pos1]);
 | 
					 | 
				
			||||||
//     pos1++;
 | 
					 | 
				
			||||||
//     // PORTC &= ~(1<<6);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//     /* buffered, 1x gain, active mode */
 | 
					    // value = *(sine_start+=(long)frequencies[0]);
 | 
				
			||||||
//     // SPDR = highByte(sample) | 0x70;
 | 
					    // OCR4A = value;
 | 
				
			||||||
//     // while (!(SPSR & (1<<SPIF)));
 | 
					    // if (sine_start >= sine_end) {
 | 
				
			||||||
 | 
					    //     sine_start = &sine[(sine_start - sine_end) % 128];
 | 
				
			||||||
 | 
					    // }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//     // SPDR = lowByte(sample);
 | 
					 | 
				
			||||||
//     // while (!(SPSR & (1<<SPIF)));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//     // PORTC |= (1<<6);
 | 
					    // OCR4A = pgm_read_byte(sine_start);
 | 
				
			||||||
 | 
					    // // sine_start = &sine[(sine_start - &sine[0] + (int)frequencies[0]) % 128];
 | 
				
			||||||
 | 
					    // sine_start +=  (int)frequencies[0];
 | 
				
			||||||
 | 
					    // if (sine_start >= sine_end) {
 | 
				
			||||||
 | 
					    //     sine_start = &sine[(sine_start - sine_end) % 128];
 | 
				
			||||||
 | 
					    // }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // OCR4A = pgm_read_byte(s_ptr);
 | 
				
			||||||
 | 
					    // s_ptr = s_start + (uint8_t)place;
 | 
				
			||||||
 | 
					    // OCR4A = pgm_read_byte(s_ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // SINE
 | 
				
			||||||
 | 
					    OCR4A = pgm_read_byte(&sinewave[(uint16_t)place]);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // SQUARE
 | 
				
			||||||
 | 
					    // if (((int)place) >= 1024){
 | 
				
			||||||
 | 
					    //     OCR4A = 0xFF;
 | 
				
			||||||
 | 
					    // } else {
 | 
				
			||||||
 | 
					    //     OCR4A = 0x00;
 | 
				
			||||||
 | 
					    // }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // SAWTOOTH
 | 
				
			||||||
 | 
					    // OCR4A = (int)place / 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TRIANGLE
 | 
				
			||||||
 | 
					    // if (((int)place) >= 1024) {
 | 
				
			||||||
 | 
					    //     OCR4A = (int)place / 2;
 | 
				
			||||||
 | 
					    // } else {
 | 
				
			||||||
 | 
					    //     OCR4A = 2048 - (int)place / 2;
 | 
				
			||||||
 | 
					    // }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    place += frequency;
 | 
				
			||||||
 | 
					    if (place >= SINE_LENGTH)
 | 
				
			||||||
 | 
					        place -= SINE_LENGTH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ISR(TIMER0_COMPB_vect)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /* Disable the interrupt */
 | 
				
			||||||
 | 
					  TIMSK0 &= ~_BV(OCIE0B);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void play_note(double freq, int vol) {
 | 
					void play_note(double freq, int vol) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    freq = freq / SAMPLE_RATE;
 | 
				
			||||||
    if (freq > 0) {
 | 
					    if (freq > 0) {
 | 
				
			||||||
        DDRC |= (1<<6); 
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
 | 
					        // TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (1 << WGM30);
 | 
				
			||||||
        TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
 | 
					        // TCCR3B = (0 << WGM33) | (1 << WGM32) | (0 << CS32) | (0 << CS31) | (1 << CS30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // TIMSK3 = 0x0;
 | 
				
			||||||
        if (frequency != 0) {
 | 
					        if (frequency != 0) {
 | 
				
			||||||
 | 
					            double starting_f = frequency;
 | 
				
			||||||
            if (frequency < freq) {
 | 
					            if (frequency < freq) {
 | 
				
			||||||
                for (double f = frequency; f <= freq; f += ((freq - frequency) / 500.0)) {
 | 
					                for (double f = starting_f; f <= freq; f += ((freq - starting_f) / 500.0)) {   
 | 
				
			||||||
                    send_freq(f, vol);
 | 
					                    frequency = f;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else if (frequency > freq) {
 | 
					            } else if (frequency > freq) {
 | 
				
			||||||
                for (double f = frequency; f >= freq; f -= ((frequency - freq) / 500.0)) {
 | 
					                for (double f = starting_f; f >= freq; f -= ((starting_f - freq) / 500.0)) {
 | 
				
			||||||
                    send_freq(f, vol);
 | 
					                    frequency = f;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        send_freq(freq, vol);
 | 
					        // send_freq(freq, vol);
 | 
				
			||||||
        frequency = freq;
 | 
					        frequency = freq;
 | 
				
			||||||
        volume = vol;
 | 
					        volume = vol;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        frequencies[voices] = frequency;
 | 
					        frequencies[voices] = frequency;
 | 
				
			||||||
        volumes[voices] = volume;
 | 
					        volumes[voices] = volume;
 | 
				
			||||||
        voices++;
 | 
					        voices++;
 | 
				
			||||||
 | 
					        // position = 0;
 | 
				
			||||||
 | 
					        // TCNT0 = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // ICR3 = 0xFFFF;
 | 
					    // ICR3 = 0xFFFF;
 | 
				
			||||||
    // for (int i = 0; i < 10000; i++) {
 | 
					    // for (int i = 0; i < 10000; i++) {
 | 
				
			||||||
@ -218,6 +265,18 @@ void play_note(double freq, int vol) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // TCCR3A = 0;
 | 
					    // TCCR3A = 0;
 | 
				
			||||||
    // TCCR3B = 0;
 | 
					    // TCCR3B = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TIMSK0 &= ~_BV(OCIE0A) | ~_BV(OCIE0B);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TCCR0A = _BV(WGM01); 
 | 
				
			||||||
 | 
					    TCCR0B = _BV(CS01);
 | 
				
			||||||
 | 
					    OCR0A = SAMPLE_DIVIDER - 1;  
 | 
				
			||||||
 | 
					    OCR0B = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TIMSK0 |= _BV(OCIE0A);
 | 
				
			||||||
 | 
					    // sei();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// void note(int x, float length) {
 | 
					// void note(int x, float length) {
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "keymap_common.h"
 | 
					#include "keymap_common.h"
 | 
				
			||||||
#include "keymap_midi.h"
 | 
					#include "keymap_midi.h"
 | 
				
			||||||
#include <lufa.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t starting_note = 0x0C;
 | 
					uint8_t starting_note = 0x0C;
 | 
				
			||||||
int offset = 7;
 | 
					int offset = 7;
 | 
				
			||||||
@ -35,7 +34,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
    if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
 | 
					    if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
 | 
				
			||||||
        if (record->event.pressed) {
 | 
					        if (record->event.pressed) {
 | 
				
			||||||
            starting_note++;
 | 
					            starting_note++;
 | 
				
			||||||
            play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
					            play_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
				
			||||||
            midi_send_cc(&midi_device, 0, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 0, 0x7B, 0);
 | 
				
			||||||
            midi_send_cc(&midi_device, 1, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 1, 0x7B, 0);
 | 
				
			||||||
            midi_send_cc(&midi_device, 2, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 2, 0x7B, 0);
 | 
				
			||||||
@ -43,7 +42,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
            midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
					            stop_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
				
			||||||
            stop_all_notes();
 | 
					            stop_all_notes();
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -51,7 +50,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
    if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
 | 
					    if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
 | 
				
			||||||
        if (record->event.pressed) {
 | 
					        if (record->event.pressed) {
 | 
				
			||||||
            starting_note--;
 | 
					            starting_note--;
 | 
				
			||||||
            play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
					            play_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
				
			||||||
            midi_send_cc(&midi_device, 0, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 0, 0x7B, 0);
 | 
				
			||||||
            midi_send_cc(&midi_device, 1, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 1, 0x7B, 0);
 | 
				
			||||||
            midi_send_cc(&midi_device, 2, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 2, 0x7B, 0);
 | 
				
			||||||
@ -59,7 +58,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
            midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
					            midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
					            stop_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
				
			||||||
            stop_all_notes();
 | 
					            stop_all_notes();
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -74,9 +73,9 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
        midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
					        midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
				
			||||||
        stop_all_notes();
 | 
					        stop_all_notes();
 | 
				
			||||||
        for (int i = 0; i <= 7; i++) {
 | 
					        for (int i = 0; i <= 7; i++) {
 | 
				
			||||||
            play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
					            play_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
				
			||||||
            _delay_us(80000);
 | 
					            _delay_us(80000);
 | 
				
			||||||
            stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
					            stop_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
				
			||||||
            _delay_us(8000);
 | 
					            _delay_us(8000);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@ -90,9 +89,9 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
        midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
					        midi_send_cc(&midi_device, 4, 0x7B, 0);
 | 
				
			||||||
        stop_all_notes();
 | 
					        stop_all_notes();
 | 
				
			||||||
        for (int i = 0; i <= 7; i++) {
 | 
					        for (int i = 0; i <= 7; i++) {
 | 
				
			||||||
            play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
					            play_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
 | 
				
			||||||
            _delay_us(80000);
 | 
					            _delay_us(80000);
 | 
				
			||||||
            stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
					            stop_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)));
 | 
				
			||||||
            _delay_us(8000);
 | 
					            _delay_us(8000);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@ -101,10 +100,10 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			|||||||
    if (record->event.pressed) {
 | 
					    if (record->event.pressed) {
 | 
				
			||||||
    	// midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
 | 
					    	// midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
 | 
				
			||||||
        midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
 | 
					        midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
 | 
				
			||||||
        play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
 | 
					        play_note(((double)261.626)*pow(2.0, 0.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
 | 
					        // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
 | 
				
			||||||
        midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
 | 
					        midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
 | 
				
			||||||
        stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
 | 
					        stop_note(((double)261.626)*pow(2.0, 0.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -18,6 +18,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#ifndef KEYMAP_MIDI_H
 | 
					#ifndef KEYMAP_MIDI_H
 | 
				
			||||||
#define KEYMAP_MIDI_H
 | 
					#define KEYMAP_MIDI_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <lufa.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MIDI 0x6000
 | 
					#define MIDI 0x6000
 | 
				
			||||||
#define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000
 | 
					#define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										265
									
								
								quantum/wave.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										265
									
								
								quantum/wave.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,265 @@
 | 
				
			|||||||
 | 
					#include <avr/io.h>
 | 
				
			||||||
 | 
					#include <avr/interrupt.h>
 | 
				
			||||||
 | 
					#include <avr/pgmspace.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SINE_LENGTH 2048
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint8_t sinewave[] PROGMEM= //2048 values
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,
 | 
				
			||||||
 | 
					0x83,0x83,0x83,0x84,0x84,0x85,0x85,0x85,
 | 
				
			||||||
 | 
					0x86,0x86,0x87,0x87,0x87,0x88,0x88,0x88,
 | 
				
			||||||
 | 
					0x89,0x89,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,
 | 
				
			||||||
 | 
					0x8c,0x8c,0x8d,0x8d,0x8e,0x8e,0x8e,0x8f,
 | 
				
			||||||
 | 
					0x8f,0x8f,0x90,0x90,0x91,0x91,0x91,0x92,
 | 
				
			||||||
 | 
					0x92,0x93,0x93,0x93,0x94,0x94,0x95,0x95,
 | 
				
			||||||
 | 
					0x95,0x96,0x96,0x96,0x97,0x97,0x98,0x98,
 | 
				
			||||||
 | 
					0x98,0x99,0x99,0x9a,0x9a,0x9a,0x9b,0x9b,
 | 
				
			||||||
 | 
					0x9b,0x9c,0x9c,0x9d,0x9d,0x9d,0x9e,0x9e,
 | 
				
			||||||
 | 
					0x9e,0x9f,0x9f,0xa0,0xa0,0xa0,0xa1,0xa1,
 | 
				
			||||||
 | 
					0xa2,0xa2,0xa2,0xa3,0xa3,0xa3,0xa4,0xa4,
 | 
				
			||||||
 | 
					0xa5,0xa5,0xa5,0xa6,0xa6,0xa6,0xa7,0xa7,
 | 
				
			||||||
 | 
					0xa7,0xa8,0xa8,0xa9,0xa9,0xa9,0xaa,0xaa,
 | 
				
			||||||
 | 
					0xaa,0xab,0xab,0xac,0xac,0xac,0xad,0xad,
 | 
				
			||||||
 | 
					0xad,0xae,0xae,0xae,0xaf,0xaf,0xb0,0xb0,
 | 
				
			||||||
 | 
					0xb0,0xb1,0xb1,0xb1,0xb2,0xb2,0xb2,0xb3,
 | 
				
			||||||
 | 
					0xb3,0xb4,0xb4,0xb4,0xb5,0xb5,0xb5,0xb6,
 | 
				
			||||||
 | 
					0xb6,0xb6,0xb7,0xb7,0xb7,0xb8,0xb8,0xb8,
 | 
				
			||||||
 | 
					0xb9,0xb9,0xba,0xba,0xba,0xbb,0xbb,0xbb,
 | 
				
			||||||
 | 
					0xbc,0xbc,0xbc,0xbd,0xbd,0xbd,0xbe,0xbe,
 | 
				
			||||||
 | 
					0xbe,0xbf,0xbf,0xbf,0xc0,0xc0,0xc0,0xc1,
 | 
				
			||||||
 | 
					0xc1,0xc1,0xc2,0xc2,0xc2,0xc3,0xc3,0xc3,
 | 
				
			||||||
 | 
					0xc4,0xc4,0xc4,0xc5,0xc5,0xc5,0xc6,0xc6,
 | 
				
			||||||
 | 
					0xc6,0xc7,0xc7,0xc7,0xc8,0xc8,0xc8,0xc9,
 | 
				
			||||||
 | 
					0xc9,0xc9,0xca,0xca,0xca,0xcb,0xcb,0xcb,
 | 
				
			||||||
 | 
					0xcb,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,
 | 
				
			||||||
 | 
					0xce,0xce,0xcf,0xcf,0xcf,0xcf,0xd0,0xd0,
 | 
				
			||||||
 | 
					0xd0,0xd1,0xd1,0xd1,0xd2,0xd2,0xd2,0xd2,
 | 
				
			||||||
 | 
					0xd3,0xd3,0xd3,0xd4,0xd4,0xd4,0xd5,0xd5,
 | 
				
			||||||
 | 
					0xd5,0xd5,0xd6,0xd6,0xd6,0xd7,0xd7,0xd7,
 | 
				
			||||||
 | 
					0xd7,0xd8,0xd8,0xd8,0xd9,0xd9,0xd9,0xd9,
 | 
				
			||||||
 | 
					0xda,0xda,0xda,0xda,0xdb,0xdb,0xdb,0xdc,
 | 
				
			||||||
 | 
					0xdc,0xdc,0xdc,0xdd,0xdd,0xdd,0xdd,0xde,
 | 
				
			||||||
 | 
					0xde,0xde,0xde,0xdf,0xdf,0xdf,0xe0,0xe0,
 | 
				
			||||||
 | 
					0xe0,0xe0,0xe1,0xe1,0xe1,0xe1,0xe2,0xe2,
 | 
				
			||||||
 | 
					0xe2,0xe2,0xe3,0xe3,0xe3,0xe3,0xe4,0xe4,
 | 
				
			||||||
 | 
					0xe4,0xe4,0xe4,0xe5,0xe5,0xe5,0xe5,0xe6,
 | 
				
			||||||
 | 
					0xe6,0xe6,0xe6,0xe7,0xe7,0xe7,0xe7,0xe8,
 | 
				
			||||||
 | 
					0xe8,0xe8,0xe8,0xe8,0xe9,0xe9,0xe9,0xe9,
 | 
				
			||||||
 | 
					0xea,0xea,0xea,0xea,0xea,0xeb,0xeb,0xeb,
 | 
				
			||||||
 | 
					0xeb,0xeb,0xec,0xec,0xec,0xec,0xec,0xed,
 | 
				
			||||||
 | 
					0xed,0xed,0xed,0xed,0xee,0xee,0xee,0xee,
 | 
				
			||||||
 | 
					0xee,0xef,0xef,0xef,0xef,0xef,0xf0,0xf0,
 | 
				
			||||||
 | 
					0xf0,0xf0,0xf0,0xf0,0xf1,0xf1,0xf1,0xf1,
 | 
				
			||||||
 | 
					0xf1,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,0xf3,
 | 
				
			||||||
 | 
					0xf3,0xf3,0xf3,0xf3,0xf3,0xf4,0xf4,0xf4,
 | 
				
			||||||
 | 
					0xf4,0xf4,0xf4,0xf5,0xf5,0xf5,0xf5,0xf5,
 | 
				
			||||||
 | 
					0xf5,0xf5,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,
 | 
				
			||||||
 | 
					0xf6,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,
 | 
				
			||||||
 | 
					0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,
 | 
				
			||||||
 | 
					0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
 | 
				
			||||||
 | 
					0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
 | 
				
			||||||
 | 
					0xfa,0xfa,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,
 | 
				
			||||||
 | 
					0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,
 | 
				
			||||||
 | 
					0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
 | 
				
			||||||
 | 
					0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
 | 
				
			||||||
 | 
					0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,
 | 
				
			||||||
 | 
					0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
 | 
				
			||||||
 | 
					0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
 | 
				
			||||||
 | 
					0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,0xff,
 | 
				
			||||||
 | 
					0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 | 
				
			||||||
 | 
					0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 | 
				
			||||||
 | 
					0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 | 
				
			||||||
 | 
					0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 | 
				
			||||||
 | 
					0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 | 
				
			||||||
 | 
					0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 | 
				
			||||||
 | 
					0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfe,
 | 
				
			||||||
 | 
					0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
 | 
				
			||||||
 | 
					0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
 | 
				
			||||||
 | 
					0xfe,0xfe,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,
 | 
				
			||||||
 | 
					0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
 | 
				
			||||||
 | 
					0xfd,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,
 | 
				
			||||||
 | 
					0xfc,0xfc,0xfc,0xfc,0xfc,0xfb,0xfb,0xfb,
 | 
				
			||||||
 | 
					0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfb,0xfa,
 | 
				
			||||||
 | 
					0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,0xfa,
 | 
				
			||||||
 | 
					0xfa,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,
 | 
				
			||||||
 | 
					0xf9,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8,
 | 
				
			||||||
 | 
					0xf8,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,
 | 
				
			||||||
 | 
					0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf6,0xf5,
 | 
				
			||||||
 | 
					0xf5,0xf5,0xf5,0xf5,0xf5,0xf5,0xf4,0xf4,
 | 
				
			||||||
 | 
					0xf4,0xf4,0xf4,0xf4,0xf3,0xf3,0xf3,0xf3,
 | 
				
			||||||
 | 
					0xf3,0xf3,0xf2,0xf2,0xf2,0xf2,0xf2,0xf2,
 | 
				
			||||||
 | 
					0xf1,0xf1,0xf1,0xf1,0xf1,0xf0,0xf0,0xf0,
 | 
				
			||||||
 | 
					0xf0,0xf0,0xf0,0xef,0xef,0xef,0xef,0xef,
 | 
				
			||||||
 | 
					0xee,0xee,0xee,0xee,0xee,0xed,0xed,0xed,
 | 
				
			||||||
 | 
					0xed,0xed,0xec,0xec,0xec,0xec,0xec,0xeb,
 | 
				
			||||||
 | 
					0xeb,0xeb,0xeb,0xeb,0xea,0xea,0xea,0xea,
 | 
				
			||||||
 | 
					0xea,0xe9,0xe9,0xe9,0xe9,0xe8,0xe8,0xe8,
 | 
				
			||||||
 | 
					0xe8,0xe8,0xe7,0xe7,0xe7,0xe7,0xe6,0xe6,
 | 
				
			||||||
 | 
					0xe6,0xe6,0xe5,0xe5,0xe5,0xe5,0xe4,0xe4,
 | 
				
			||||||
 | 
					0xe4,0xe4,0xe4,0xe3,0xe3,0xe3,0xe3,0xe2,
 | 
				
			||||||
 | 
					0xe2,0xe2,0xe2,0xe1,0xe1,0xe1,0xe1,0xe0,
 | 
				
			||||||
 | 
					0xe0,0xe0,0xe0,0xdf,0xdf,0xdf,0xde,0xde,
 | 
				
			||||||
 | 
					0xde,0xde,0xdd,0xdd,0xdd,0xdd,0xdc,0xdc,
 | 
				
			||||||
 | 
					0xdc,0xdc,0xdb,0xdb,0xdb,0xda,0xda,0xda,
 | 
				
			||||||
 | 
					0xda,0xd9,0xd9,0xd9,0xd9,0xd8,0xd8,0xd8,
 | 
				
			||||||
 | 
					0xd7,0xd7,0xd7,0xd7,0xd6,0xd6,0xd6,0xd5,
 | 
				
			||||||
 | 
					0xd5,0xd5,0xd5,0xd4,0xd4,0xd4,0xd3,0xd3,
 | 
				
			||||||
 | 
					0xd3,0xd2,0xd2,0xd2,0xd2,0xd1,0xd1,0xd1,
 | 
				
			||||||
 | 
					0xd0,0xd0,0xd0,0xcf,0xcf,0xcf,0xcf,0xce,
 | 
				
			||||||
 | 
					0xce,0xce,0xcd,0xcd,0xcd,0xcc,0xcc,0xcc,
 | 
				
			||||||
 | 
					0xcb,0xcb,0xcb,0xcb,0xca,0xca,0xca,0xc9,
 | 
				
			||||||
 | 
					0xc9,0xc9,0xc8,0xc8,0xc8,0xc7,0xc7,0xc7,
 | 
				
			||||||
 | 
					0xc6,0xc6,0xc6,0xc5,0xc5,0xc5,0xc4,0xc4,
 | 
				
			||||||
 | 
					0xc4,0xc3,0xc3,0xc3,0xc2,0xc2,0xc2,0xc1,
 | 
				
			||||||
 | 
					0xc1,0xc1,0xc0,0xc0,0xc0,0xbf,0xbf,0xbf,
 | 
				
			||||||
 | 
					0xbe,0xbe,0xbe,0xbd,0xbd,0xbd,0xbc,0xbc,
 | 
				
			||||||
 | 
					0xbc,0xbb,0xbb,0xbb,0xba,0xba,0xba,0xb9,
 | 
				
			||||||
 | 
					0xb9,0xb8,0xb8,0xb8,0xb7,0xb7,0xb7,0xb6,
 | 
				
			||||||
 | 
					0xb6,0xb6,0xb5,0xb5,0xb5,0xb4,0xb4,0xb4,
 | 
				
			||||||
 | 
					0xb3,0xb3,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,
 | 
				
			||||||
 | 
					0xb0,0xb0,0xb0,0xaf,0xaf,0xae,0xae,0xae,
 | 
				
			||||||
 | 
					0xad,0xad,0xad,0xac,0xac,0xac,0xab,0xab,
 | 
				
			||||||
 | 
					0xaa,0xaa,0xaa,0xa9,0xa9,0xa9,0xa8,0xa8,
 | 
				
			||||||
 | 
					0xa7,0xa7,0xa7,0xa6,0xa6,0xa6,0xa5,0xa5,
 | 
				
			||||||
 | 
					0xa5,0xa4,0xa4,0xa3,0xa3,0xa3,0xa2,0xa2,
 | 
				
			||||||
 | 
					0xa2,0xa1,0xa1,0xa0,0xa0,0xa0,0x9f,0x9f,
 | 
				
			||||||
 | 
					0x9e,0x9e,0x9e,0x9d,0x9d,0x9d,0x9c,0x9c,
 | 
				
			||||||
 | 
					0x9b,0x9b,0x9b,0x9a,0x9a,0x9a,0x99,0x99,
 | 
				
			||||||
 | 
					0x98,0x98,0x98,0x97,0x97,0x96,0x96,0x96,
 | 
				
			||||||
 | 
					0x95,0x95,0x95,0x94,0x94,0x93,0x93,0x93,
 | 
				
			||||||
 | 
					0x92,0x92,0x91,0x91,0x91,0x90,0x90,0x8f,
 | 
				
			||||||
 | 
					0x8f,0x8f,0x8e,0x8e,0x8e,0x8d,0x8d,0x8c,
 | 
				
			||||||
 | 
					0x8c,0x8c,0x8b,0x8b,0x8a,0x8a,0x8a,0x89,
 | 
				
			||||||
 | 
					0x89,0x88,0x88,0x88,0x87,0x87,0x87,0x86,
 | 
				
			||||||
 | 
					0x86,0x85,0x85,0x85,0x84,0x84,0x83,0x83,
 | 
				
			||||||
 | 
					0x83,0x82,0x82,0x81,0x81,0x81,0x80,0x80,
 | 
				
			||||||
 | 
					0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,
 | 
				
			||||||
 | 
					0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,
 | 
				
			||||||
 | 
					0x79,0x79,0x78,0x78,0x78,0x77,0x77,0x77,
 | 
				
			||||||
 | 
					0x76,0x76,0x75,0x75,0x75,0x74,0x74,0x73,
 | 
				
			||||||
 | 
					0x73,0x73,0x72,0x72,0x71,0x71,0x71,0x70,
 | 
				
			||||||
 | 
					0x70,0x70,0x6f,0x6f,0x6e,0x6e,0x6e,0x6d,
 | 
				
			||||||
 | 
					0x6d,0x6c,0x6c,0x6c,0x6b,0x6b,0x6a,0x6a,
 | 
				
			||||||
 | 
					0x6a,0x69,0x69,0x69,0x68,0x68,0x67,0x67,
 | 
				
			||||||
 | 
					0x67,0x66,0x66,0x65,0x65,0x65,0x64,0x64,
 | 
				
			||||||
 | 
					0x64,0x63,0x63,0x62,0x62,0x62,0x61,0x61,
 | 
				
			||||||
 | 
					0x61,0x60,0x60,0x5f,0x5f,0x5f,0x5e,0x5e,
 | 
				
			||||||
 | 
					0x5d,0x5d,0x5d,0x5c,0x5c,0x5c,0x5b,0x5b,
 | 
				
			||||||
 | 
					0x5a,0x5a,0x5a,0x59,0x59,0x59,0x58,0x58,
 | 
				
			||||||
 | 
					0x58,0x57,0x57,0x56,0x56,0x56,0x55,0x55,
 | 
				
			||||||
 | 
					0x55,0x54,0x54,0x53,0x53,0x53,0x52,0x52,
 | 
				
			||||||
 | 
					0x52,0x51,0x51,0x51,0x50,0x50,0x4f,0x4f,
 | 
				
			||||||
 | 
					0x4f,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4c,
 | 
				
			||||||
 | 
					0x4c,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x49,
 | 
				
			||||||
 | 
					0x49,0x49,0x48,0x48,0x48,0x47,0x47,0x47,
 | 
				
			||||||
 | 
					0x46,0x46,0x45,0x45,0x45,0x44,0x44,0x44,
 | 
				
			||||||
 | 
					0x43,0x43,0x43,0x42,0x42,0x42,0x41,0x41,
 | 
				
			||||||
 | 
					0x41,0x40,0x40,0x40,0x3f,0x3f,0x3f,0x3e,
 | 
				
			||||||
 | 
					0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3c,0x3c,
 | 
				
			||||||
 | 
					0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,
 | 
				
			||||||
 | 
					0x39,0x38,0x38,0x38,0x37,0x37,0x37,0x36,
 | 
				
			||||||
 | 
					0x36,0x36,0x35,0x35,0x35,0x34,0x34,0x34,
 | 
				
			||||||
 | 
					0x34,0x33,0x33,0x33,0x32,0x32,0x32,0x31,
 | 
				
			||||||
 | 
					0x31,0x31,0x30,0x30,0x30,0x30,0x2f,0x2f,
 | 
				
			||||||
 | 
					0x2f,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,
 | 
				
			||||||
 | 
					0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2a,0x2a,
 | 
				
			||||||
 | 
					0x2a,0x2a,0x29,0x29,0x29,0x28,0x28,0x28,
 | 
				
			||||||
 | 
					0x28,0x27,0x27,0x27,0x26,0x26,0x26,0x26,
 | 
				
			||||||
 | 
					0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x23,
 | 
				
			||||||
 | 
					0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x21,
 | 
				
			||||||
 | 
					0x21,0x21,0x21,0x20,0x20,0x20,0x1f,0x1f,
 | 
				
			||||||
 | 
					0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,
 | 
				
			||||||
 | 
					0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,
 | 
				
			||||||
 | 
					0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,
 | 
				
			||||||
 | 
					0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x17,
 | 
				
			||||||
 | 
					0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,
 | 
				
			||||||
 | 
					0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,
 | 
				
			||||||
 | 
					0x14,0x14,0x13,0x13,0x13,0x13,0x13,0x12,
 | 
				
			||||||
 | 
					0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,
 | 
				
			||||||
 | 
					0x11,0x10,0x10,0x10,0x10,0x10,0xf,0xf,
 | 
				
			||||||
 | 
					0xf,0xf,0xf,0xf,0xe,0xe,0xe,0xe,
 | 
				
			||||||
 | 
					0xe,0xd,0xd,0xd,0xd,0xd,0xd,0xc,
 | 
				
			||||||
 | 
					0xc,0xc,0xc,0xc,0xc,0xb,0xb,0xb,
 | 
				
			||||||
 | 
					0xb,0xb,0xb,0xa,0xa,0xa,0xa,0xa,
 | 
				
			||||||
 | 
					0xa,0xa,0x9,0x9,0x9,0x9,0x9,0x9,
 | 
				
			||||||
 | 
					0x9,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
 | 
				
			||||||
 | 
					0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,
 | 
				
			||||||
 | 
					0x6,0x6,0x6,0x6,0x6,0x6,0x6,0x6,
 | 
				
			||||||
 | 
					0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,
 | 
				
			||||||
 | 
					0x5,0x5,0x4,0x4,0x4,0x4,0x4,0x4,
 | 
				
			||||||
 | 
					0x4,0x4,0x4,0x4,0x3,0x3,0x3,0x3,
 | 
				
			||||||
 | 
					0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,
 | 
				
			||||||
 | 
					0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,
 | 
				
			||||||
 | 
					0x2,0x2,0x2,0x2,0x2,0x2,0x1,0x1,
 | 
				
			||||||
 | 
					0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
 | 
				
			||||||
 | 
					0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
 | 
				
			||||||
 | 
					0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,
 | 
				
			||||||
 | 
					0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
 | 
				
			||||||
 | 
					0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
 | 
				
			||||||
 | 
					0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
 | 
				
			||||||
 | 
					0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
 | 
				
			||||||
 | 
					0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
 | 
				
			||||||
 | 
					0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
 | 
				
			||||||
 | 
					0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,
 | 
				
			||||||
 | 
					0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
 | 
				
			||||||
 | 
					0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
 | 
				
			||||||
 | 
					0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,
 | 
				
			||||||
 | 
					0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,
 | 
				
			||||||
 | 
					0x2,0x3,0x3,0x3,0x3,0x3,0x3,0x3,
 | 
				
			||||||
 | 
					0x3,0x3,0x3,0x3,0x3,0x4,0x4,0x4,
 | 
				
			||||||
 | 
					0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x5,
 | 
				
			||||||
 | 
					0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,
 | 
				
			||||||
 | 
					0x5,0x6,0x6,0x6,0x6,0x6,0x6,0x6,
 | 
				
			||||||
 | 
					0x6,0x7,0x7,0x7,0x7,0x7,0x7,0x7,
 | 
				
			||||||
 | 
					0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x8,
 | 
				
			||||||
 | 
					0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xa,
 | 
				
			||||||
 | 
					0xa,0xa,0xa,0xa,0xa,0xa,0xb,0xb,
 | 
				
			||||||
 | 
					0xb,0xb,0xb,0xb,0xc,0xc,0xc,0xc,
 | 
				
			||||||
 | 
					0xc,0xc,0xd,0xd,0xd,0xd,0xd,0xd,
 | 
				
			||||||
 | 
					0xe,0xe,0xe,0xe,0xe,0xf,0xf,0xf,
 | 
				
			||||||
 | 
					0xf,0xf,0xf,0x10,0x10,0x10,0x10,0x10,
 | 
				
			||||||
 | 
					0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,
 | 
				
			||||||
 | 
					0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x14,
 | 
				
			||||||
 | 
					0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,
 | 
				
			||||||
 | 
					0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,
 | 
				
			||||||
 | 
					0x17,0x17,0x18,0x18,0x18,0x18,0x19,0x19,
 | 
				
			||||||
 | 
					0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,
 | 
				
			||||||
 | 
					0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,
 | 
				
			||||||
 | 
					0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,
 | 
				
			||||||
 | 
					0x1f,0x1f,0x1f,0x20,0x20,0x20,0x21,0x21,
 | 
				
			||||||
 | 
					0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x23,
 | 
				
			||||||
 | 
					0x23,0x23,0x24,0x24,0x24,0x25,0x25,0x25,
 | 
				
			||||||
 | 
					0x25,0x26,0x26,0x26,0x26,0x27,0x27,0x27,
 | 
				
			||||||
 | 
					0x28,0x28,0x28,0x28,0x29,0x29,0x29,0x2a,
 | 
				
			||||||
 | 
					0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2c,0x2c,
 | 
				
			||||||
 | 
					0x2c,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,
 | 
				
			||||||
 | 
					0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x31,
 | 
				
			||||||
 | 
					0x31,0x31,0x32,0x32,0x32,0x33,0x33,0x33,
 | 
				
			||||||
 | 
					0x34,0x34,0x34,0x34,0x35,0x35,0x35,0x36,
 | 
				
			||||||
 | 
					0x36,0x36,0x37,0x37,0x37,0x38,0x38,0x38,
 | 
				
			||||||
 | 
					0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,
 | 
				
			||||||
 | 
					0x3b,0x3c,0x3c,0x3c,0x3d,0x3d,0x3d,0x3e,
 | 
				
			||||||
 | 
					0x3e,0x3e,0x3f,0x3f,0x3f,0x40,0x40,0x40,
 | 
				
			||||||
 | 
					0x41,0x41,0x41,0x42,0x42,0x42,0x43,0x43,
 | 
				
			||||||
 | 
					0x43,0x44,0x44,0x44,0x45,0x45,0x45,0x46,
 | 
				
			||||||
 | 
					0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x49,
 | 
				
			||||||
 | 
					0x49,0x49,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,
 | 
				
			||||||
 | 
					0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,
 | 
				
			||||||
 | 
					0x4f,0x4f,0x4f,0x50,0x50,0x51,0x51,0x51,
 | 
				
			||||||
 | 
					0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,
 | 
				
			||||||
 | 
					0x55,0x55,0x55,0x56,0x56,0x56,0x57,0x57,
 | 
				
			||||||
 | 
					0x58,0x58,0x58,0x59,0x59,0x59,0x5a,0x5a,
 | 
				
			||||||
 | 
					0x5a,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,
 | 
				
			||||||
 | 
					0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60,
 | 
				
			||||||
 | 
					0x61,0x61,0x61,0x62,0x62,0x62,0x63,0x63,
 | 
				
			||||||
 | 
					0x64,0x64,0x64,0x65,0x65,0x65,0x66,0x66,
 | 
				
			||||||
 | 
					0x67,0x67,0x67,0x68,0x68,0x69,0x69,0x69,
 | 
				
			||||||
 | 
					0x6a,0x6a,0x6a,0x6b,0x6b,0x6c,0x6c,0x6c,
 | 
				
			||||||
 | 
					0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x70,
 | 
				
			||||||
 | 
					0x70,0x70,0x71,0x71,0x71,0x72,0x72,0x73,
 | 
				
			||||||
 | 
					0x73,0x73,0x74,0x74,0x75,0x75,0x75,0x76,
 | 
				
			||||||
 | 
					0x76,0x77,0x77,0x77,0x78,0x78,0x78,0x79,
 | 
				
			||||||
 | 
					0x79,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,
 | 
				
			||||||
 | 
					0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -29,24 +29,24 @@ volatile uint32_t timer_count = 0;
 | 
				
			|||||||
void timer_init(void)
 | 
					void timer_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // Timer0 CTC mode
 | 
					    // Timer0 CTC mode
 | 
				
			||||||
    TCCR0A = 0x02;
 | 
					    TCCR1A = 0x02;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if TIMER_PRESCALER == 1
 | 
					#if TIMER_PRESCALER == 1
 | 
				
			||||||
    TCCR0B = 0x01;
 | 
					    TCCR1B = 0x01;
 | 
				
			||||||
#elif TIMER_PRESCALER == 8
 | 
					#elif TIMER_PRESCALER == 8
 | 
				
			||||||
    TCCR0B = 0x02;
 | 
					    TCCR1B = 0x02;
 | 
				
			||||||
#elif TIMER_PRESCALER == 64
 | 
					#elif TIMER_PRESCALER == 64
 | 
				
			||||||
    TCCR0B = 0x03;
 | 
					    TCCR1B = 0x03;
 | 
				
			||||||
#elif TIMER_PRESCALER == 256
 | 
					#elif TIMER_PRESCALER == 256
 | 
				
			||||||
    TCCR0B = 0x04;
 | 
					    TCCR1B = 0x04;
 | 
				
			||||||
#elif TIMER_PRESCALER == 1024
 | 
					#elif TIMER_PRESCALER == 1024
 | 
				
			||||||
    TCCR0B = 0x05;
 | 
					    TCCR1B = 0x05;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#   error "Timer prescaler value is NOT vaild."
 | 
					#   error "Timer prescaler value is NOT vaild."
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    OCR0A = TIMER_RAW_TOP;
 | 
					    OCR1A = TIMER_RAW_TOP;
 | 
				
			||||||
    TIMSK0 = (1<<OCIE0A);
 | 
					    TIMSK1 = (1<<OCIE1A);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inline
 | 
					inline
 | 
				
			||||||
@ -111,7 +111,7 @@ uint32_t timer_elapsed32(uint32_t last)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// excecuted once per 1ms.(excess for just timer count?)
 | 
					// excecuted once per 1ms.(excess for just timer count?)
 | 
				
			||||||
ISR(TIMER0_COMPA_vect)
 | 
					ISR(TIMER1_COMPA_vect)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    timer_count++;
 | 
					    timer_count++;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user