Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
139 | jacques | 1 | /*------------------------------------------------------------------------------ |
2 | ** ** |
||
3 | ** Ident : main.h ** |
||
4 | ** Project : MX12 3 ppm channel expander ** |
||
5 | ** Author : J.Wanders ** |
||
6 | ** modified : 05.2008 Heinrich Fischer for use with WinAVR ** |
||
7 | ** ** |
||
8 | ** The use of this project (hardware, software, binary files, sources and ** |
||
9 | ** documentation) is only permittet for non-commercial use ** |
||
10 | ** (directly or indirectly) ** |
||
11 | ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"** |
||
12 | ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** |
||
13 | ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ** |
||
14 | ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ** |
||
15 | ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ** |
||
16 | ** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ** |
||
17 | ** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ** |
||
18 | ** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ** |
||
19 | ** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ** |
||
20 | ** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ** |
||
21 | ** POSSIBILITY OF SUCH DAMAGE. ** |
||
22 | ** ** |
||
23 | **----------------------------------------------------------------------------*/ |
||
24 | |||
25 | #include <avr/io.h> |
||
26 | #include <inttypes.h> |
||
27 | |||
28 | /* CONSTANTS */ |
||
29 | #define TRUE 0xFF |
||
30 | #define FALSE 0x00 |
||
31 | |||
32 | #define CHANNEL_6_ADC PORTA1 // (pin12) |
||
33 | #define CHANNEL_7_ADC PORTA2 // (pin11) |
||
34 | #define CHANNEL_8_ADC PORTA3 // (pin11) |
||
35 | #define PPM_IN PORTA7 // (pin6) |
||
36 | #define PPM_OUT_PIN PORTB2 // (pin5) |
||
37 | |||
38 | #define ADC_CHANNEL_6 0x01 // ADC1 - PORTA1 (pin12) |
||
39 | #define ADC_CHANNEL_7 0x02 // ADC2 - PORTA2 (pin11) |
||
40 | #define ADC_CHANNEL_8 0x03 // ADC3 - PORTA3 (pin10) |
||
41 | #define ADC_CHANNEL_MASK 0x03 |
||
42 | |||
43 | |||
44 | #define START_PULSE_HIGH 400 // [0.4ms] |
||
45 | #define START_PULSE_LOW 600 // [0.6ms] |
||
46 | //#define FORCE_LOW_END_FRAME 2100 // [2.1ms] |
||
47 | //#define MIN_SYNC_TIME 2400 // [2.4ms] |
||
48 | //NEW definition in main.h |
||
49 | #define FORCE_LOW_END_FRAME 1500 // [0,5ms] |
||
50 | #define MIN_SYNC_TIME 3000 // [3.0ms] |
||
51 | #define MAX_SYNC_TIME 22000 // total frame time - 8 x min channel frame time = 22ms - 8 x 1ms = 22 - 8 |
||
52 | |||
53 | |||
54 | // minimum channel frame = START_PULSE_HIGH + START_PULSE_LOW = 400 + 600 counts = 1000 counts = 1ms |
||
55 | // PPM frame length = 22ms = 22000 counts |
||
56 | |||
57 | /**** MACROS ******************************************************************/ |
||
58 | |||
59 | #define SET_PPM_OUT_HIGH PORTB |= (1<<PPM_OUT_PIN) |
||
60 | #define SET_PPM_OUT_LOW PORTB &= ~(1<<PPM_OUT_PIN) |
||
61 | |||
62 | #define FALLING_EDGE_TRIGGER TCCR1B &= ~(1<<ICES1) |
||
63 | #define RISING_EDGE_TRIGGER TCCR1B |= (1<<ICES1) |
||
64 | |||
65 | #define SET_COMPARE_COUNTER_TO_ZERO OCR1A = 0 |
||
66 | #define SET_COUNTER_TO_ZERO TCNT1 = 0 |
||
67 | #define SET_CAPTURE_COUNTER_TO_ZERO ICR1 = 0 |
||
68 | |||
69 | #define DISABLE_INPUT_CAPTURE TIMSK1 &= ~(1<<ICIE1) // disable input capture |
||
70 | #define ENABLE_INPUT_CAPTURE TIMSK1 |= (1 << ICIE1) // enable input capture |
||
71 | |||
72 | #define DISABLE_OUTPUT_COMPARE TIMSK1 &= ~(1<<OCIE1A) // disable Output Compare A Match Interrupt |
||
73 | #define ENABLE_OUTPUT_COMPARE TIMSK1 |= (1<<OCIE1A) // enable Output Compare A Match Interrupt |
||
74 | |||
75 | #define TRIGGER_INPUT_CAPTURE_INTERRUPT TIFR1 |= (1<<ICF1) // |
||
76 | #define CLEAR_INPUT_CAPTURE_INTERRUPT_FLAG TIFR1 &= ~(1<<ICF1) // reset ICF flag |
||
77 | |||
78 | #define TRIGGER_INPUT_COMPARE_INTERRUPT TIFR1 |= (1<<OCF1A) |
||
79 | |||
80 | #define SET_TIMER_TO_ICP_CTC TCCR1B |= (1<<WGM13) // CTC mode for ICP, prescaler 8 / 8MHz => [1.0us] |
||
81 | #define SET_TIMER_TO_COMPA_CTC TCCR1B &= ~(1<<WGM13) // CTC mode for COMPA, prescaler 8 / 8MHz => [1.0us] |
||
82 | |||
83 | // clear ADC enable & ADC Start Conversion & ADC Interrupt Enable bit |
||
84 | #define ADC_DISABLE ADCSRA &= ~((1<<ADEN)|(1<<ADSC)|(1<<ADIE)) |
||
85 | // set ADC enable & ADC Start Conversion & ADC Interrupt Enable bit |
||
86 | #define ADC_ENABLE ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADIE) |
||
87 | |||
88 | |||
89 | /**** END MACROS *****************************************************************************/ |
||
90 | |||
91 | |||
92 | |||
93 | |||
94 | |||
95 | //#define cli() __disable_interrupt() |
||
96 | //#define sei() __enable_interrupt() |
||
97 | |||
98 | |||
99 | |||
100 | |||
101 |