0,0 → 1,111 |
|
/****************************************************************/ |
/* */ |
/* NG-Video 5,8GHz */ |
/* */ |
/* Copyright (C) 2011 - gebad */ |
/* */ |
/* This code is distributed under the GNU Public License */ |
/* which can be found at http://www.gnu.org/licenses/gpl.txt */ |
/* */ |
/****************************************************************/ |
|
#include <string.h> |
#include <avr/interrupt.h> |
|
#include "servo.h" |
#include "config.h" |
#include "dogm.h" |
#include "keys.h" |
#include "ngvideo.c" |
#include "menue.c" |
#include "usart.h" |
|
|
int main(void) |
{ uint8_t ep_reset = 1; |
uint8_t val; |
|
_delay_ms(100); // Einschaltstörungen unterdrücken |
|
DDRB |= (1<<POWER); |
PORTB &= ~(1<<POWER); //NOT(SHDN) LT1776 |
|
// switch init |
KEY_MP_DDR &= ~((1<<KEY_MINUS) | (1<<KEY_PLUS)); |
KEY_ENTER_DDR &= ~((1<<KEY_ENTER)); |
|
// auf default rücksetzen - Tasten direkt lesen, da noch kein Interrupt |
if( !(KEY_MP_PIN & ((1<<KEY_MINUS) | (1<<KEY_PLUS)))) |
--ep_reset; |
|
Init_EEPROM(ep_reset); |
|
// auf DOGM 5V/3,3V rück-/setzen - Tasten direkt lesen, da noch kein Interrupt |
if(!((KEY_ENTER_PIN & (1<<KEY_ENTER)) || (KEY_MP_PIN & (1<<KEY_PLUS)))) |
Set_DOGM_Version(); |
|
DDRA |= (1<<CHANNel_12) | (1<<CHANNel_11) | (1<<CHANNel_10) | (1<<MUX_IN) | (1<<MUX_EN); |
DDRB |= (1<<BEEPER) | (1<<CHANNel_02) | (1<<CHANNel_01) | (1<<CHANNel_00); |
Set_Channel(channel); |
ch_stored = channel; |
PORTA &= ~(1<<MUX_EN); // MUX enable |
|
ADC_Init(); |
|
// Timer 0 für Tasten und Anzeigen(Task's) |
TCCR0B = (1<<CS02)|(1<<CS00); // divide by 1024 |
TIMSK0 |= 1<<TOIE0; // 8 bit Timer/Counter0 Overflow Interrupt aktiviert |
|
// Timer 2 für Diversity vSync und GPS-Tracking MK Datensatz senden |
TCCR2B = (1<<CS21) | (1<<CS20); // divide by 64 |
TIMSK2 |= 1<<TOIE2; // 8 bit Timer/Counter2 Overflow Interrupt aktiviert |
|
// Interrupt für sync - RX-Umschaltung bei Diversity |
DDRD &= ~((1<<VSYNC1) | (1<<VSYNC0)); |
//EICRA |= (1<<ISC11) | (1<<ISC10) | (1<<ISC01) | (1<<ISC00);// interrupt on INT0 and INT1 pin rising edge |
EICRA |= (1<<ISC11) | (1<<ISC01); // interrupt on INT0 and INT1 pin falling edge |
Set_AV_Source(av_source); // MUX auf av-x setzen; EIMSK Int0 und Int1 für Sync-Diversity ein |
|
DDRD |= (1<<SERVO1) | (1<<SERVO2); // Servoports als Ausgang |
if (tracking > TRACKING_MIN) // Servos sind nur bei Tracking und Servokalibrierung zugeschaltet |
servoInit(SERVO_PERIODE); |
|
// LCD init |
lcdInit(dogm_vers, contrast, 0, 0); |
lcd_BackgrLight_On(); |
lcdWriteCGRAM_Array(lcdSpecialChr, 7); |
|
Displ_Version(); |
Double_Beep(DBEEPVERS, DBEEPVERSP); |
|
sei(); |
|
if (language == NO_LANGUAGE) { |
language = GERMAN; // Beim Einschalten pmenu[] vordefiniert mit "0" |
Menu_Language(); |
} |
pmenu[0] = '\0'; // falls GPS-Antennennachführung ==> Empfang blinken |
|
Displ_Main_Disp(); |
|
while(1) |
{ |
if (pmenu[0] == '\0') { // nur wegen Menu_MK_BatteryChangeNr() |
Task_0_1(); |
Task_0_2(); |
} |
Tasks_unvisible(); |
if (bat_low != 0) { |
if (Get_Key_Short( 1<<SW_ENTER )) { |
m_pkt = 1; // 0 wäre "zurück", so aber ins Untermenü immer erster Menüpunkt |
Menu_Main(); |
} |
val = Change_Value_plmi(channel, CHANNEL_MIN, CHANNEL_MAX, 0, 0, Displ_Channels, 1, C_REPEAT); |
if (val != channel) { // nicht bei jeden Schleifendurchlauf Set_Channel() |
channel = val; |
Set_Channel(channel); |
} |
} |
} |
} |