1#ifndef VirtualWire_Config_h 2#define VirtualWire_Config_h 3////////////////////////////////////////////////////////////////////////// 4// The following configurations are intented only if VW_PLATFORM == VW_PLATFORM_GENERIC_AVR8 5 6// Uncomment this to select the platform as generic AVR8 7//#define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8 8 9// OPTIONAL: Define the IO pin used for PTT (push to talk) 10// If no PTT port will be defined, the PTT feature will be disabled 11//#define VW_PTT_PORT PORT# 12//#define VW_PTT_DDR DDR# 13//#define VW_PTT_PIN PIN#? 14 15// Define the IO pin used for transmitting data 16//#define VW_TX_PORT PORT# 17//#define VW_TX_DDR DDR# 18//#define VW_TX_PIN PIN#? 19 20// Define the IO pin used for receiving data 21//#define VW_RX_PORT PIN# 22//#define VW_RX_DDR DDR# 23//#define VW_RX_PIN PIN#? 24 25// Define the 16 bits timer index to be used by the library (e.g. 1) 26// The default timer configuration will use TIMSKn as interrupt mask register, 27// OCRnA as compare register and TIMERn_COMPA_vect as interrupt vector 28// If one of the above doesn't suite your current platform, please redefine 29// the timer setup routine, as indicated below 30//#define VW_TIMER_INDEX 1 31 32// 33// EXAMPLE: configuration suitable for At90USB162 or ATMega32U2 34// 35 36/* 37 // Select AVR8 platform 38 #define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8 39 40 // My radio doesn't have PTT feature => VW_PTT_PORT/DDR/PIN will be left undefined 41 //#define VW_PTT_PORT 42 //#define VW_PTT_DDR 43 //#define VW_PTT_PIN 44 45 // VirtualWire TX 46 #define VW_TX_PORT PORTD 47 #define VW_TX_DDR DDRD 48 #define VW_TX_PIN PIND7 49 50 // VirtualWire RX 51 #define VW_RX_PORT PIND 52 #define VW_RX_DDR DDRD 53 #define VW_RX_PIN PIND6 54 55 // Reduce message length, saves up memory 56 #define VW_MAX_MESSAGE_LEN 40 57 58 // Select Timer 1 as the 16 bits timer used by the library 59 #define VW_TIMER_INDEX 1 60*/ 61 62// 63// OPTIONAL: Alternative pin setup for advanced configurations 64// Instead of defining VW_PTT_PORT/DDR/PIN, VW_TX_PORT/DDR/PIN or VW_RX_PORT/DDR/PIN 65// the user can use the following preprocessor directives to control the way 66// VirtualWire library reads the RX and writes to the TX or PTT 67// 68 69//#define vw_pinSetup() 70//#define vw_digitalWrite_ptt(value) 71//#define vw_digitalRead_rx() 72//#define vw_digitalWrite_tx(value) 73 74// 75// EXAMPLE: Advanced pin configuration that lights up a LED when PTT is high 76// RX=PORTD7, PTT=PORTD6, LED=PORTD5, TX=PORTD4 77// 78 79/* 80 // Select AVR8 platform 81 #define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8 82 83 #define vw_pinSetup()\ 84 DDRD |= (1<<PORTD6)|(1<<PORTD5)|(1<<PORTD4);\ 85 DDRD &= ~(1<<PORTD7); 86 87 #define vw_digitalWrite_ptt(value)\ 88 ((value)? PORTD |= (1<<PORTD6)|(1<<PORTD5) : PORTD &= ~((1<<PORTD6)|(1<<PORTD5)) 89 #define vw_digitalRead_rx() \ 90 (PORTD & (1<<PORTD7) ? 1 : 0) 91 #define vw_digitalWrite_tx(value) \ 92 ((value) ? PORTD |= (1<<PORTD4) : PORTD &= ~(1<<PORTD4)) 93*/ 94 95// 96// OPTIONAL: Alternative timer configuration 97// If the default timer setup doesn't suite the platform you are using, you can 98// rewrite the timer setup routine and define the timer vector used by the ISR 99// implemented within the library 100// 101 102//#define vw_timerSetup(speed) 103//#define VW_TIMER_VECTOR 104 105// 106// EXAMPLE: Setting up a user defined timer configuration for VirtualWire 107// that uses OCR1B as compare register instead of OCR1A 108// 109 110/* 111 #include <stdint.h> 112 113 // Select AVR8 platform 114 #define VW_PLATFORM VW_PLATFORM_GENERIC_AVR8 115 116 // Declare my own timer setup function 117 static inline void my_vw_timerSetup(uint8_t speed) __attribute__ ((always_inline)); 118 119 // VirtualWire has a special routine for detecting prescaler and the number of ticks 120 // automatically, but needs to be declared first in order to be used 121 uint8_t vw_timer_calc(uint16_t speed, uint16_t max_ticks, uint16_t *nticks); 122 123 // Instruct VirtualWire to use my timer setup routine and my interrupt vector 124 #define vw_timerSetup(speed) my_vw_timerSetup(speed); 125 #define VW_TIMER_VECTOR TIMER1_COMPB_vect 126 127 // Define my setup timer routine, that uses OCR1B as compare register 128 static inline void my_vw_timerSetup(uint8_t speed) 129 { 130 // Figure out prescaler value and counter match value 131 prescaler = vw_timer_calc(speed, (uint16_t)-1, &nticks); 132 if (!prescaler) 133 { 134 return; // fault 135 } 136 137 TCCR1A = 0; // Output Compare pins disconnected 138 TCCR1B = _BV(WGM12); // Turn on CTC mode 139 140 // Convert prescaler index to TCCR1B prescaler bits CS10, CS11, CS12 141 TCCR1B |= prescaler; 142 143 // Caution: special procedures for setting 16 bit regs 144 // is handled by the compiler 145 OCR1B = nticks; 146 147 // Enable interrupt 148 TIMSK1 |= _BV(OCIE1B); 149 } 150*/ 151 152#endif/* VirtualWire_Config_h */