Rev 806 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 806 | Rev 821 | ||
---|---|---|---|
Line 82... | Line 82... | ||
82 | ISR(TIMER1_OVF_vect) |
82 | ISR(TIMER1_OVF_vect) |
83 | { |
83 | { |
84 | static uint16_t lastICR1 = 0; |
84 | static uint16_t lastICR1 = 0; |
85 | // if ICR1 has not changed |
85 | // if ICR1 has not changed |
86 | // then no new input capture event has occured since last timer overflow |
86 | // then no new input capture event has occured since last timer overflow |
87 | if (lastICR1 == ICR1) RC_Quality = 0; |
87 | if (lastICR1 == ICR1) RC_Quality /= 2; |
88 | lastICR1 = ICR1; // store last ICR1 |
88 | lastICR1 = ICR1; // store last ICR1 |
89 | } |
89 | } |
Line 90... | Line 90... | ||
90 | 90 | ||
Line 123... | Line 123... | ||
123 | // calculatiing the difference of the two uint16_t and converting the result to an int16_t |
123 | // calculatiing the difference of the two uint16_t and converting the result to an int16_t |
124 | // implicit handles a timer overflow 65535 -> 0 the right way. |
124 | // implicit handles a timer overflow 65535 -> 0 the right way. |
125 | signal = (uint16_t) ICR1 - oldICR1; |
125 | signal = (uint16_t) ICR1 - oldICR1; |
126 | oldICR1 = ICR1; |
126 | oldICR1 = ICR1; |
Line 127... | Line -... | ||
127 | - | ||
128 | // lost frame? |
- | |
129 | if(signal > 8000) |
- | |
130 | { |
- | |
131 | RC_Quality /= 2; |
- | |
132 | } |
- | |
133 | else |
127 | |
134 | //sync gap? (3.52 ms < signal < 25.6 ms) |
128 | //sync gap? (3.52 ms < signal < 25.6 ms) |
135 | if((signal > 1100) && (signal < 8000)) |
129 | if((signal > 1100) && (signal < 8000)) |
136 | { |
130 | { |
137 | // if a sync gap happens and there where at least 4 channels decoded before |
131 | // if a sync gap happens and there where at least 4 channels decoded before |
Line 162... | Line 156... | ||
162 | // calculate signal difference on good signal level |
156 | // calculate signal difference on good signal level |
163 | if(RC_Quality >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; // cut off lower 3 bit for nois reduction |
157 | if(RC_Quality >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; // cut off lower 3 bit for nois reduction |
164 | else PPM_diff[index] = 0; |
158 | else PPM_diff[index] = 0; |
165 | PPM_in[index] = tmp; // update channel value |
159 | PPM_in[index] = tmp; // update channel value |
166 | } |
160 | } |
167 | else |
- | |
168 | { // invalid PPM time |
- | |
169 | RC_Quality /= 2; |
- | |
170 | } |
- | |
171 | index++; // next channel |
161 | index++; // next channel |
172 | // demux sum signal for channels 5 to 7 to J3, J4, J5 |
162 | // demux sum signal for channels 5 to 7 to J3, J4, J5 |
173 | if(index == 5) PORTD |= (1<<PORTD5); else PORTD &= ~(1<<PORTD5); |
163 | if(index == 5) PORTD |= (1<<PORTD5); else PORTD &= ~(1<<PORTD5); |
174 | if(index == 6) PORTD |= (1<<PORTD4); else PORTD &= ~(1<<PORTD4); |
164 | if(index == 6) PORTD |= (1<<PORTD4); else PORTD &= ~(1<<PORTD4); |
175 | if(BoardRelease == 10) |
165 | if(BoardRelease == 10) |