From 10b5077f564c0c8b76435c5237af3635a9c2dc13 Mon Sep 17 00:00:00 2001 From: "alastair.mccormack" Date: Thu, 23 Nov 2017 15:44:56 +0100 Subject: [PATCH 1/7] Added Sparkfun Pro Micro pinouts Used -DARDUINO_AVR_PROMICRO to determine which timers are available and pin mapping. Also removed separate ifdef in --- boarddefs.h | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/boarddefs.h b/boarddefs.h index 17e2551..917cd7c 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -70,8 +70,14 @@ // switch IRremote to use a different timer. // +// Sparkfun Pro Micro +#if defined(ARDUINO_AVR_PROMICRO) + //#define IR_USE_TIMER1 // tx = pin 9 + #define IR_USE_TIMER3 // tx = pin 5 + //#define IR_USE_TIMER4_HS // tx = pin 5 + // Arduino Mega -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //#define IR_USE_TIMER1 // tx = pin 11 #define IR_USE_TIMER2 // tx = pin 9 //#define IR_USE_TIMER3 // tx = pin 5 @@ -246,19 +252,19 @@ # define TIMER_PWM_PIN CORE_OC1A_PIN // Teensy #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) # define TIMER_PWM_PIN 11 // Arduino Mega -#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) -# define TIMER_PWM_PIN 13 // MegaCore +#elif #elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ || defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \ || defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ -|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) -# define TIMER_PWM_PIN 13 // MightyCore -#elif defined(__AVR_ATtiny84__) -# define TIMER_PWM_PIN 6 +|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ +|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) +# define TIMER_PWM_PIN 13 // MightyCore, // MegaCore +#elif defined(__AVR_ATtiny84__) || +# define TIMER_PWM_PIN 6 #else -# define TIMER_PWM_PIN 9 // Arduino Duemilanove, Diecimila, LilyPad, etc +# define TIMER_PWM_PIN 9 // Arduino Duemilanove, Diecimila, LilyPad, Sparkfun Pro Micro etc #endif // ATmega48, ATmega88, ATmega168, ATmega328 //--------------------------------------------------------- @@ -291,8 +297,8 @@ //----------------- #if defined(CORE_OC3A_PIN) # define TIMER_PWM_PIN CORE_OC3A_PIN // Teensy -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -# define TIMER_PWM_PIN 5 // Arduino Mega +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(ARDUINO_AVR_PROMICRO) +# define TIMER_PWM_PIN 5 // Arduino Mega, Sparkfun Pro Micro #elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) # define TIMER_PWM_PIN 6 // MightyCore #else @@ -339,6 +345,8 @@ //----------------- #if defined(CORE_OC4A_PIN) # define TIMER_PWM_PIN CORE_OC4A_PIN // Teensy +#elif defined(ARDUINO_AVR_PROMICRO) +# define TIMER_PWM_PIN 5 // Sparkfun Pro Micro #elif defined(__AVR_ATmega32U4__) # define TIMER_PWM_PIN 13 // Leonardo #else From 9bce17ffabbfb268816154d823bc87dc83a91458 Mon Sep 17 00:00:00 2001 From: "alastair.mccormack" Date: Thu, 23 Nov 2017 17:30:25 +0100 Subject: [PATCH 2/7] Added Sparkfun timer and pins information --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 00a4b03..b601899 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Whether you use the Adafruit Neopixel lib, or FastLED, interrupts get disabled o - ATtiny 84 / 85 - ESP32 (receive only) - ESP8266 is supported in a fork based on an old codebase that isn't as recent, but it works reasonably well given that perfectly timed sub millisecond interrupts are different on that chip. See https://github.com/markszabo/IRremoteESP8266 +- Sparkfun Pro Micro We are open to suggestions for adding support to new boards, however we highly recommend you contact your supplier first and ask them to provide support from their side. @@ -56,6 +57,7 @@ We are open to suggestions for adding support to new boards, however we highly r | [Teensy++ 1.0 / 2.0](https://www.pjrc.com/teensy/) | **1**, 16, 25 | 1, **2**, 3 | | [Teensy 3.0 / 3.1](https://www.pjrc.com/teensy/) | **5** | **CMT** | | [Teensy-LC](https://www.pjrc.com/teensy/) | **16** | **TPM1** | +| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 9, **5**, 5 | 1, **3**, 4 | ### Experimental patches From b1eb407e5437c6dea939d05479e7bcbfbd315987 Mon Sep 17 00:00:00 2001 From: "alastair.mccormack" Date: Sun, 3 Dec 2017 20:09:23 +0000 Subject: [PATCH 3/7] Corrected TIMER4_HS output on Sparkfun Pro Micro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use O̅C̅4̅A̅ (complimentary output pin) to output to pin 5 (shared with OC3A) on Sparkfun Pro Micro --- README.md | 2 +- boarddefs.h | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b601899..9acb9d7 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ We are open to suggestions for adding support to new boards, however we highly r | [Teensy++ 1.0 / 2.0](https://www.pjrc.com/teensy/) | **1**, 16, 25 | 1, **2**, 3 | | [Teensy 3.0 / 3.1](https://www.pjrc.com/teensy/) | **5** | **CMT** | | [Teensy-LC](https://www.pjrc.com/teensy/) | **16** | **TPM1** | -| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 9, **5**, 5 | 1, **3**, 4 | +| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 9, **5**, 5 | 1, **3**, 4_HS | ### Experimental patches diff --git a/boarddefs.h b/boarddefs.h index 917cd7c..896f074 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -252,7 +252,6 @@ # define TIMER_PWM_PIN CORE_OC1A_PIN // Teensy #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) # define TIMER_PWM_PIN 11 // Arduino Mega -#elif #elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \ || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \ || defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \ @@ -261,7 +260,7 @@ || defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ || defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) # define TIMER_PWM_PIN 13 // MightyCore, // MegaCore -#elif defined(__AVR_ATtiny84__) || +#elif defined(__AVR_ATtiny84__) # define TIMER_PWM_PIN 6 #else # define TIMER_PWM_PIN 9 // Arduino Duemilanove, Diecimila, LilyPad, Sparkfun Pro Micro etc @@ -311,12 +310,21 @@ #elif defined(IR_USE_TIMER4_HS) #define TIMER_RESET -#define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1)) -#define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1))) + +#if defined(ARDUINO_AVR_PROMICRO) // Sparkfun Pro Micro + #define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A0)) // Use complimentary O̅C̅4̅A̅ output on pin 5 + #define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A0))) // (Pro Micro does not map PC7 (32/ICP3/CLK0/OC4A) + // of ATmega32U4 ) +#else + #define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1)) + #define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1))) +#endif + #define TIMER_ENABLE_INTR (TIMSK4 = _BV(TOIE4)) #define TIMER_DISABLE_INTR (TIMSK4 = 0) #define TIMER_INTR_NAME TIMER4_OVF_vect + #define TIMER_CONFIG_KHZ(val) ({ \ const uint16_t pwmval = SYSCLOCK / 2000 / (val); \ TCCR4A = (1< Date: Sun, 3 Dec 2017 20:19:16 +0000 Subject: [PATCH 4/7] Supported board order Correct Sparkfun Pro Micro position in supported board order --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9acb9d7..188be38 100644 --- a/README.md +++ b/README.md @@ -52,12 +52,12 @@ We are open to suggestions for adding support to new boards, however we highly r | [ATmega64, ATmega128](https://github.com/MCUdude/MegaCore) | **13** | **1** | | ATmega1280, ATmega2560 | 5, 6, **9**, 11, 46 | 1, **2**, 3, 4, 5 | | [ESP32](http://esp32.net/) | N/A (not supported) | **1** | +| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 9, **5**, 5 | 1, **3**, 4_HS | | [Teensy 1.0](https://www.pjrc.com/teensy/) | **17** | **1** | | [Teensy 2.0](https://www.pjrc.com/teensy/) | 9, **10**, 14 | 1, 3, **4_HS** | | [Teensy++ 1.0 / 2.0](https://www.pjrc.com/teensy/) | **1**, 16, 25 | 1, **2**, 3 | | [Teensy 3.0 / 3.1](https://www.pjrc.com/teensy/) | **5** | **CMT** | | [Teensy-LC](https://www.pjrc.com/teensy/) | **16** | **TPM1** | -| [Sparkfun Pro Micro](https://www.sparkfun.com/products/12640) | 9, **5**, 5 | 1, **3**, 4_HS | ### Experimental patches From 73b2c6e5a4718f125649475f58caeb9bcdb73939 Mon Sep 17 00:00:00 2001 From: "alastair.mccormack" Date: Sun, 3 Dec 2017 20:22:37 +0000 Subject: [PATCH 5/7] Removed whitespace --- boarddefs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boarddefs.h b/boarddefs.h index 896f074..6f5cc13 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -261,7 +261,7 @@ || defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) # define TIMER_PWM_PIN 13 // MightyCore, // MegaCore #elif defined(__AVR_ATtiny84__) -# define TIMER_PWM_PIN 6 +# define TIMER_PWM_PIN 6 #else # define TIMER_PWM_PIN 9 // Arduino Duemilanove, Diecimila, LilyPad, Sparkfun Pro Micro etc #endif // ATmega48, ATmega88, ATmega168, ATmega328 From 72cd8c835f6772ea2be11976badd35d3435ecaac Mon Sep 17 00:00:00 2001 From: "alastair.mccormack" Date: Sun, 3 Dec 2017 20:36:49 +0000 Subject: [PATCH 6/7] Sparkfun Pro Micro credit --- boarddefs.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boarddefs.h b/boarddefs.h index 6f5cc13..30ddb00 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -15,6 +15,8 @@ // // JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post) // Whynter A/C ARC-110WD added by Francesco Meschia + +// Sparkfun Pro Micro support by Alastair McCormack //****************************************************************************** #ifndef boarddefs_h From 8ba71c6489879276bb4adf62f2c878d3bd160c86 Mon Sep 17 00:00:00 2001 From: "alastair.mccormack" Date: Sun, 3 Dec 2017 21:27:35 +0000 Subject: [PATCH 7/7] Typo Removed erroneous `//` --- boarddefs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boarddefs.h b/boarddefs.h index 30ddb00..a61dd85 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -261,7 +261,7 @@ || defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \ || defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \ || defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) -# define TIMER_PWM_PIN 13 // MightyCore, // MegaCore +# define TIMER_PWM_PIN 13 // MightyCore, MegaCore #elif defined(__AVR_ATtiny84__) # define TIMER_PWM_PIN 6 #else