Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1687 - 1
 
2
/****************************************************************/
3
/*                                                                                                                                                                                                                                                      */
4
/*                                                                       NG-Video 5,8GHz                                                                                                                */
5
/*                                                                                                                                                                                                                                                      */
6
/*                                                      Copyright (C) 2011 - gebad                                                                                      */
7
/*                                                                                                                                                                                                                                                      */
8
/*      This code is distributed under the GNU Public License                           */
9
/*      which can be found at http://www.gnu.org/licenses/gpl.txt               */
10
/*                                                                                                                                                                                                                                                      */
11
/****************************************************************/
12
 
13
#include <string.h>
14
#include <avr/interrupt.h>
15
#include <util/delay.h>
16
 
17
#include "ngvideo.h"
18
#include "menue.h"
19
#include "servo.h"
20
#include "config.h"
21
#include "dogm.h"
22
#include "keys.h"
23
#include "usart.h"
24
#include "tracking.h"
25
#include "mymath.h"
26
 
27
int main(void)
28
{ uint8_t ep_reset = 1;
29
        uint8_t val;
30
 
31
        _delay_ms(100);                                                                                         // Einschaltstörungen unterdrücken
32
 
33
        DDRB |= (1<<POWER);
34
        PORTB &= ~(1<<POWER);                                                           //NOT(SHDN) LT1776
35
 
36
        // switch init
37
        KEY_MP_DDR &= ~((1<<KEY_MINUS) | (1<<KEY_PLUS));
38
        KEY_ENTER_DDR &= ~((1<<KEY_ENTER));
39
 
40
        // auf default rücksetzen - Tasten direkt lesen, da noch kein Interrupt
41
        if( !(KEY_MP_PIN & ((1<<KEY_MINUS) | (1<<KEY_PLUS))))
42
                --ep_reset;
43
 
44
        Init_EEPROM(ep_reset);
45
 
46
         // auf DOGM 5V/3,3V rück-/setzen - Tasten direkt lesen, da noch kein Interrupt
47
        if(!((KEY_ENTER_PIN & (1<<KEY_ENTER)) || (KEY_MP_PIN & (1<<KEY_PLUS))))
48
                Set_DOGM_Version();
49
 
50
        DDRA |= (1<<CHANNel_12) | (1<<CHANNel_11) | (1<<CHANNel_10) | (1<<MUX_IN) | (1<<MUX_EN);
51
        DDRB |= (1<<BEEPER) | (1<<CHANNel_02) | (1<<CHANNel_01) | (1<<CHANNel_00);
52
        Set_Channel(channel);
53
        ch_stored = channel;
54
        PORTA &= ~(1<<MUX_EN);                                                          // MUX enable
55
 
56
        ADC_Init();
57
 
58
        // Timer 0 für Tasten und Anzeigen(Task's)
59
        TCCR0B = (1<<CS02)|(1<<CS00);                           // divide by 1024
60
        TIMSK0 |= 1<<TOIE0;                                                                             // 8 bit Timer/Counter0 Overflow Interrupt aktiviert 
61
 
62
        // Timer 2 für Diversity vSync und GPS-Tracking MK Datensatz senden
63
        TCCR2B = (1<<CS21) | (1<<CS20);                 // divide by 64
64
        TIMSK2 |= 1<<TOIE2;                                                                             // 8 bit Timer/Counter2 Overflow Interrupt aktiviert 
65
 
66
        // Interrupt für sync - RX-Umschaltung bei Diversity
67
        DDRD &= ~((1<<VSYNC1) | (1<<VSYNC0));
68
        //EICRA |= (1<<ISC11) | (1<<ISC10) | (1<<ISC01) | (1<<ISC00);// interrupt on INT0 and INT1 pin rising edge
69
        EICRA |= (1<<ISC11) | (1<<ISC01);               // interrupt on INT0 and INT1 pin falling edge
70
        Set_AV_Source(av_source);                                                       // MUX auf av-x setzen; EIMSK Int0 und Int1 für Sync-Diversity ein
71
 
72
        DDRD |= (1<<SERVO1) | (1<<SERVO2);              // Servoports als Ausgang
73
        if (tracking > TRACKING_MIN)                                    // Servos sind nur bei Tracking und Servokalibrierung zugeschaltet 
74
                servoInit(SERVO_PERIODE);
75
 
76
        // LCD init
77
        lcdInit(dogm_vers, contrast, 0, 0);
78
        lcd_BackgrLight_On();
79
        lcdWriteCGRAM_Array(lcdSpecialChr, 7);
80
 
81
        Displ_Version();
82
        Double_Beep(DBEEPVERS, DBEEPVERSP);
83
 
84
        sei();
85
 
86
        if (language == NO_LANGUAGE) {
87
                language = GERMAN;                                                                      // Beim Einschalten pmenu[] vordefiniert mit "0"
88
                Menu_Language();
89
        }
90
 
91
        Displ_Main_Disp();
92
 
93
        while(1)
94
        {
95
                Task_0_1();
96
                Task_0_2();
97
                Tasks_invisible();
98
                if (!bat_low) {
99
                        if (Get_Key_Short( 1<<SW_ENTER )) {
100
                                m_pkt = 1;                                              // 0 wäre "zurück", so aber ins Untermenü immer erster Menüpunkt
101
                                Menu_Main();
102
                        }
103
                        val = Change_Value_plmi(channel, CHANNEL_MIN, CHANNEL_MAX, 0, 0, Displ_Channels, 1, C_REPEAT);
104
                        if (val != channel) {           // nicht bei jeden Schleifendurchlauf Set_Channel()
105
                                channel = val;
106
                                Set_Channel(channel);
107
                        }
108
                        if (Get_Key_Long( 1<<SW_ENTER )  && tracking == TRACKING_NMEA) setNMEAdir(); // direction
109
                }
110
        }
111
}