+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * ATtiny pin definition of OC0A / OC0B\r
+ * ATmega pin definition of OC2 / OC2A / OC2B / OC0 / OC0A / OC0B\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * ATtiny pin definition of OC0A / OC0B\r
+ * ATmega pin definition of OC2 / OC2A / OC2B / OC0 / OC0A / OC0B\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+#if defined (__AVR_ATtiny84__) // ATtiny84 uses OC0A = PB2 or OC0B = PA7\r
+#if IRSND_OCx == IRSND_OC0A // OC0A\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 2 // OC0A\r
+#elif IRSND_OCx == IRSND_OC0B // OC0B\r
+#define IRSND_PORT PORTA // port A\r
+#define IRSND_DDR DDRA // ddr A\r
+#define IRSND_BIT 7 // OC0B\r
+#else\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC0A or IRSND_OC0B in irsndconfig.h\r
+#endif // IRSND_OCx\r
+\r
+#elif defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__) // ATtiny45/85 uses OC0A = PB0 or OC0B = PB1\r
+#if IRSND_OCx == IRSND_OC0A // OC0A\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 0 // OC0A\r
+#elif IRSND_OCx == IRSND_OC0B // OC0B\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 1 // OC0B\r
+#else\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC0A or IRSND_OC0B in irsndconfig.h\r
+#endif // IRSND_OCx\r
+\r
+#elif defined (__AVR_ATmega8__) // ATmega8 uses only OC2 = PB3\r
+#if IRSND_OCx == IRSND_OC2 // OC0A\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 3 // OC0A\r
+#else\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h\r
+#endif // IRSND_OCx\r
+\r
+\r
+#elif defined (__AVR_ATmega16__) \\r
+ || defined (__AVR_ATmega32__) // ATmega16|32 uses OC2 = PD7\r
+#if IRSND_OCx == IRSND_OC2 // OC2\r
+#define IRSND_PORT PORTD // port D\r
+#define IRSND_DDR DDRD // ddr D\r
+#define IRSND_BIT 7 // OC2\r
+#else\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h\r
+#endif // IRSND_OCx\r
+\r
+#elif defined (__AVR_ATmega162__) // ATmega162 uses OC2 = PB1 or OC0 = PB0\r
+#if IRSND_OCx == IRSND_OC2 // OC2\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 1 // OC2\r
+#elif IRSND_OCx == IRSND_OC0 // OC0\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 0 // OC0\r
+#else\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC2 or IRSND_OC0 in irsndconfig.h\r
+#endif // IRSND_OCx\r
+\r
+#elif defined (__AVR_ATmega164__) \\r
+ || defined (__AVR_ATmega324__) \\r
+ || defined (__AVR_ATmega644__) \\r
+ || defined (__AVR_ATmega644P__) \\r
+ || defined (__AVR_ATmega1284__) // ATmega164|324|644|644P|1284 uses OC2A = PD7 or OC2B = PD6 or OC0A = PB3 or OC0B = PB4\r
+#if IRSND_OCx == IRSND_OC2A // OC2A\r
+#define IRSND_PORT PORTD // port D\r
+#define IRSND_DDR DDRD // ddr D\r
+#define IRSND_BIT 7 // OC2A\r
+#elif IRSND_OCx == IRSND_OC2B // OC2B\r
+#define IRSND_PORT PORTD // port D\r
+#define IRSND_DDR DDRD // ddr D\r
+#define IRSND_BIT 6 // OC2B\r
+#elif IRSND_OCx == IRSND_OC0A // OC0A\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 3 // OC0A\r
+#elif IRSND_OCx == IRSND_OC0B // OC0B\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 4 // OC0B\r
+#else\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC2A, IRSND_OC2B, IRSND_OC0A, or IRSND_OC0B in irsndconfig.h\r
+#endif // IRSND_OCx\r
+\r
+#elif defined (__AVR_ATmega48__) \\r
+ || defined (__AVR_ATmega88__) \\r
+ || defined (__AVR_ATmega88P__) \\r
+ || defined (__AVR_ATmega168__) \\r
+ || defined (__AVR_ATmega168P__) \\r
+ || defined (__AVR_ATmega328P__) // ATmega48|88|168|168|328 uses OC2A = PB3 or OC2B = PD3 or OC0A = PD6 or OC0B = PD5\r
+#if IRSND_OCx == IRSND_OC2A // OC2A\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 3 // OC2A\r
+#elif IRSND_OCx == IRSND_OC2B // OC2B\r
+#define IRSND_PORT PORTD // port D\r
+#define IRSND_DDR DDRD // ddr D\r
+#define IRSND_BIT 3 // OC2B\r
+#elif IRSND_OCx == IRSND_OC0A // OC0A\r
+#define IRSND_PORT PORTB // port B\r
+#define IRSND_DDR DDRB // ddr B\r
+#define IRSND_BIT 6 // OC0A\r
+#elif IRSND_OCx == IRSND_OC0B // OC0B\r
+#define IRSND_PORT PORTD // port D\r
+#define IRSND_DDR DDRD // ddr D\r
+#define IRSND_BIT 5 // OC0B\r
+#else\r
+#error Wrong value for IRSND_OCx, choose IRSND_OC2A, IRSND_OC2B, IRSND_OC0A, or IRSND_OC0B in irsndconfig.h\r
+#endif // IRSND_OCx\r
+\r
+#else\r
+#if !defined (unix) && !defined (WIN32)\r
+#error mikrocontroller not defined, please fill in definitions here.\r
+#endif // unix, WIN32\r
+#endif // __AVR...\r
+\r