Ansteuerung der Transceiver eingebaut, Menü dafür etwas verändert.
Erste Vorbereitungen für das Senden von Texten.
Dieser Commit ist enthalten in:
		
							Ursprung
							
								
									75daf456cd
								
							
						
					
					
						Commit
						20f0d60e78
					
				@ -1,2 +1,34 @@
 | 
			
		||||
:100000000605050C580200321E00000001010055D3
 | 
			
		||||
:1000000000000000000000000000000000000000F0
 | 
			
		||||
:1000100000000000000000000000000000000000E0
 | 
			
		||||
:1000200000000000000000000000000000000000D0
 | 
			
		||||
:1000300000000000000000000000000000000000C0
 | 
			
		||||
:1000400000000000000000000000000000000000B0
 | 
			
		||||
:1000500000000000000000000000000000000000A0
 | 
			
		||||
:100060000000000000000000000000000000000090
 | 
			
		||||
:100070000000000000000000000000000000000080
 | 
			
		||||
:100080000000000000000000000000000000000070
 | 
			
		||||
:100090000000000000000000000000000000000060
 | 
			
		||||
:1000A0000000000000000000000000000000000050
 | 
			
		||||
:1000B0000000000000000000000000000000000040
 | 
			
		||||
:1000C0000000000000000000000000000000000030
 | 
			
		||||
:1000D0000000000000000000000000000000000020
 | 
			
		||||
:1000E0000000000000000000000000000000000010
 | 
			
		||||
:1000F0000000000000000000000000000000000000
 | 
			
		||||
:1001000000000000000000000000000000000000EF
 | 
			
		||||
:1001100000000000000000000000000000000000DF
 | 
			
		||||
:1001200000000000000000000000000000000000CF
 | 
			
		||||
:1001300000000000000000000000000000000000BF
 | 
			
		||||
:1001400000000000000000000000000000000000AF
 | 
			
		||||
:10015000000000000000000000000000000000009F
 | 
			
		||||
:10016000000000000000000000000000000000008F
 | 
			
		||||
:10017000000000000000000000000000000000007F
 | 
			
		||||
:10018000000000000000000000000000000000006F
 | 
			
		||||
:10019000000000000000000000000000000000005F
 | 
			
		||||
:1001A000000000000000000000000000000000004F
 | 
			
		||||
:1001B000000000000000000000000000000000003F
 | 
			
		||||
:1001C000000000000000000000000000000000002F
 | 
			
		||||
:1001D000000000000000000000000000000000001F
 | 
			
		||||
:1001E000000000000000000000000000000000000F
 | 
			
		||||
:1001F000000000000605050C580200321E00000039
 | 
			
		||||
:050200000101000055A2
 | 
			
		||||
:00000001FF
 | 
			
		||||
 | 
			
		||||
@ -8,8 +8,8 @@
 | 
			
		||||
// Stringkonstanten für das Display
 | 
			
		||||
 | 
			
		||||
// Programm Info
 | 
			
		||||
const char Trx1[]          = "TRX 1";
 | 
			
		||||
const char Trx2[]          = "TRX 2";
 | 
			
		||||
const char sTrx1[]         = "TRX 1";
 | 
			
		||||
const char sTrx2[]         = "TRX 2";
 | 
			
		||||
const char IambicA[]       = "Iambic A";
 | 
			
		||||
const char IambicB[]       = "Iambic B";
 | 
			
		||||
const char Ultimatic[]     = "Ultimat.";
 | 
			
		||||
@ -114,17 +114,17 @@ void Drehencoder(void)
 | 
			
		||||
            switch(bMenuCtrl.CurMenue)
 | 
			
		||||
            {
 | 
			
		||||
                case M_TRX1:
 | 
			
		||||
                    if(bConfig.TRX == 2)
 | 
			
		||||
                        bConfig.TRX = 0;
 | 
			
		||||
                    if(bConfig.Trx1)
 | 
			
		||||
                        bConfig.Trx1 = 0;
 | 
			
		||||
                    else
 | 
			
		||||
                        bConfig.TRX = 1;
 | 
			
		||||
                        bConfig.Trx1 = 1;
 | 
			
		||||
                    bMenuCtrl.m_buttonPressed = 0;
 | 
			
		||||
                break;
 | 
			
		||||
                case M_TRX2:
 | 
			
		||||
                    if(bConfig.TRX == 1)
 | 
			
		||||
                        bConfig.TRX = 0;
 | 
			
		||||
                    if(bConfig.Trx2)
 | 
			
		||||
                        bConfig.Trx2 = 0;
 | 
			
		||||
                    else
 | 
			
		||||
                        bConfig.TRX = 2;
 | 
			
		||||
                        bConfig.Trx2 = 1;
 | 
			
		||||
                    bMenuCtrl.m_buttonPressed = 0;
 | 
			
		||||
                break;
 | 
			
		||||
                case M_IAMBICA:
 | 
			
		||||
@ -282,7 +282,7 @@ void ConfigMenue(void)
 | 
			
		||||
    {
 | 
			
		||||
        case M_TRX1:
 | 
			
		||||
            lcd_gotoxy(0,3);
 | 
			
		||||
            if((bConfig.TRX == 1) || (bConfig.TRX == 0))
 | 
			
		||||
            if(bConfig.Trx1)
 | 
			
		||||
                sprintf(line,"[%s]", "TRX 1");
 | 
			
		||||
            else
 | 
			
		||||
                sprintf(line," %s ", "TRX 1");
 | 
			
		||||
@ -290,7 +290,7 @@ void ConfigMenue(void)
 | 
			
		||||
        break;
 | 
			
		||||
        case M_TRX2:
 | 
			
		||||
            lcd_gotoxy(0,3);
 | 
			
		||||
            if((bConfig.TRX == 2) || (bConfig.TRX == 0))
 | 
			
		||||
            if(bConfig.Trx2)
 | 
			
		||||
                sprintf(line,"[%s]", "TRX 2");
 | 
			
		||||
            else
 | 
			
		||||
                sprintf(line," %s ", "TRX 2");
 | 
			
		||||
@ -441,12 +441,12 @@ void UpdateDisplay(void)
 | 
			
		||||
                sprintf(line,"%s", Ultimatic);
 | 
			
		||||
            lcd_puts(line);
 | 
			
		||||
            lcd_gotoxy(0,0);
 | 
			
		||||
            if(bConfig.TRX == 1)
 | 
			
		||||
                sprintf(line, "%s", Trx1);
 | 
			
		||||
            if(bConfig.TRX == 2)
 | 
			
		||||
                sprintf(line, "%s", Trx2);
 | 
			
		||||
            if(bConfig.TRX == 0)
 | 
			
		||||
                sprintf(line, "%s %s", Trx1, Trx2);
 | 
			
		||||
            if(bConfig.Trx1 == 1)
 | 
			
		||||
                sprintf(line, "%s", sTrx1);
 | 
			
		||||
            if(bConfig.Trx2 == 1)
 | 
			
		||||
                sprintf(line, "%s", sTrx2);
 | 
			
		||||
            if((bConfig.Trx1 == 1) && (bConfig.Trx2 == 1))
 | 
			
		||||
                sprintf(line, "%s %s", sTrx1, sTrx2);
 | 
			
		||||
            lcd_puts(line);
 | 
			
		||||
            lcd_gotoxy(0,6);
 | 
			
		||||
            if(bConfig.SpeedRatioEnabled)
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ extern void SideToneOff(void);
 | 
			
		||||
extern void DelayMilliSeconds(uint16_t t);
 | 
			
		||||
extern void Tone(uint16_t f, uint8_t t);
 | 
			
		||||
extern void SetRatio(void);
 | 
			
		||||
extern void SetWeight(void);
 | 
			
		||||
extern void SidetoneDisable(void);
 | 
			
		||||
extern void SidetoneEnable(void);
 | 
			
		||||
extern void SidetoneOff(void);
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,8 @@
 | 
			
		||||
// EEProm Speicher
 | 
			
		||||
uint8_t Dummy;
 | 
			
		||||
uint8_t ee_Dummy EEMEM = 0x55;               // Dummy for Address 0
 | 
			
		||||
uint8_t ee_TRX EEMEM = 0;                    // TRX 1 oder 2 oder beide
 | 
			
		||||
uint8_t ee_Trx1 EEMEM = 0;                   // TRX 1
 | 
			
		||||
uint8_t ee_Trx2 EEMEM = 0;                   // TRX 2
 | 
			
		||||
uint8_t ee_KeyerMode EEMEM = 1;              // Iambic A, Iambic B oder Ultimatic
 | 
			
		||||
uint8_t ee_SidetoneEnabled EEMEM = 1;        // Mithörton eingeschaltet
 | 
			
		||||
uint8_t ee_WpMBpM EEMEM = 0;                 // WpM oder BpM Anzeige
 | 
			
		||||
@ -22,6 +23,12 @@ uint8_t ee_WpM EEMEM = 12;                   // Geschwindigkeit WpM
 | 
			
		||||
uint8_t ee_RiseTime EEMEM = 5;               // Anstiegszeit Sinuston
 | 
			
		||||
uint8_t ee_RiseTimeCounter EEMEM = 5;        // Anzahl Sinusschwingungen für den Anstieg
 | 
			
		||||
uint8_t ee_DebounceTime EEMEM = 6;           // Entprellzeit für Straight Key Eingang
 | 
			
		||||
// Textspeicher
 | 
			
		||||
uint8_t ee_Msg1[100] EEMEM;
 | 
			
		||||
uint8_t ee_Msg2[100] EEMEM;
 | 
			
		||||
uint8_t ee_Msg3[100] EEMEM;
 | 
			
		||||
uint8_t ee_Msg4[100] EEMEM;
 | 
			
		||||
uint8_t ee_Msg5[100] EEMEM;
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
/** @fn     void DelayMilliSeconds(uint16_t ms)
 | 
			
		||||
@ -100,7 +107,8 @@ void WriteEEprom(void)
 | 
			
		||||
    eeprom_write_byte(&ee_WpM, bConfig.WpM);
 | 
			
		||||
    eeprom_write_byte(&ee_KeyerMode, bConfig.KeyerMode);
 | 
			
		||||
    eeprom_write_word(&ee_SidetoneFreq, bConfig.SidetoneFreq);
 | 
			
		||||
    eeprom_write_byte(&ee_TRX, bConfig.TRX);
 | 
			
		||||
    eeprom_write_byte(&ee_Trx1, bConfig.Trx1);
 | 
			
		||||
    eeprom_write_byte(&ee_Trx2, bConfig.Trx2);
 | 
			
		||||
    eeprom_write_byte(&ee_SidetoneEnabled, bConfig.SidetoneEnabled);
 | 
			
		||||
    eeprom_write_byte(&ee_WpMBpM, bConfig.WpMBpM);
 | 
			
		||||
    eeprom_write_byte(&ee_Reverse, bConfig.Reverse);
 | 
			
		||||
@ -152,7 +160,8 @@ void SetEEprom(void)
 | 
			
		||||
    bConfig.WpM = 15;
 | 
			
		||||
    bConfig.KeyerMode = 2;
 | 
			
		||||
    bConfig.SidetoneFreq = 600;
 | 
			
		||||
    bConfig.TRX = 1;
 | 
			
		||||
    bConfig.Trx1 = 1;
 | 
			
		||||
    bConfig.Trx2 = 0;
 | 
			
		||||
    bConfig.SidetoneEnabled = 1;
 | 
			
		||||
    bConfig.WpMBpM = 1;
 | 
			
		||||
    bConfig.Reverse = 0;
 | 
			
		||||
@ -164,6 +173,8 @@ void SetEEprom(void)
 | 
			
		||||
    bConfig.RiseTimeCounter = 5;
 | 
			
		||||
    bConfig.DebounceTime = 5;
 | 
			
		||||
    WriteEEprom();
 | 
			
		||||
 | 
			
		||||
    sprintf(bMessage.Msg1,"CQ CQ CQ DE DL7BJ DL7BJ DL7BJ PSE K\n");
 | 
			
		||||
}
 | 
			
		||||
/** @fn     void ReadEEprom(void) 
 | 
			
		||||
 *  @brief  Einstellungen aus dem EEprom lesen
 | 
			
		||||
@ -183,7 +194,8 @@ void ReadEEprom(void)
 | 
			
		||||
    bConfig.WpM = eeprom_read_byte(&ee_WpM);
 | 
			
		||||
    bConfig.KeyerMode = eeprom_read_byte(&ee_KeyerMode);
 | 
			
		||||
    bConfig.SidetoneFreq = eeprom_read_word(&ee_SidetoneFreq);
 | 
			
		||||
    bConfig.TRX = eeprom_read_byte(&ee_TRX);
 | 
			
		||||
    bConfig.Trx1 = eeprom_read_byte(&ee_Trx1);
 | 
			
		||||
    bConfig.Trx2 = eeprom_read_byte(&ee_Trx2);
 | 
			
		||||
    bConfig.SidetoneEnabled = eeprom_read_byte(&ee_SidetoneEnabled);
 | 
			
		||||
    bConfig.WpMBpM = eeprom_read_byte(&ee_WpMBpM);
 | 
			
		||||
    bConfig.Reverse = eeprom_read_byte(&ee_Reverse);
 | 
			
		||||
@ -277,6 +289,10 @@ void TXKey(uint8_t State)
 | 
			
		||||
        {
 | 
			
		||||
            SidetoneOn();
 | 
			
		||||
            sbi(PORTC,MORSE_LED);
 | 
			
		||||
            if(bConfig.Trx1)
 | 
			
		||||
                sbi(PORTC,TRX1);
 | 
			
		||||
            if(bConfig.Trx2)
 | 
			
		||||
                sbi(PORTC,TRX2);
 | 
			
		||||
            bState.KeyState = 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@ -288,11 +304,25 @@ void TXKey(uint8_t State)
 | 
			
		||||
            {
 | 
			
		||||
                SidetoneOff();
 | 
			
		||||
                cbi(PORTC,MORSE_LED);
 | 
			
		||||
                if(bConfig.Trx1)
 | 
			
		||||
                    cbi(PORTC,TRX1);
 | 
			
		||||
                if(bConfig.Trx2)
 | 
			
		||||
                    cbi(PORTC,TRX2);
 | 
			
		||||
            }
 | 
			
		||||
            bState.KeyState = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
/** @fn     void CheckButtons(void)
 | 
			
		||||
 *  @brief  Fragt die Taster ab und löst entsprechende Funktion aus
 | 
			
		||||
 *  @param  none
 | 
			
		||||
 *  @return none
 | 
			
		||||
 */
 | 
			
		||||
void CheckButtons(void)
 | 
			
		||||
{
 | 
			
		||||
    if(!(PINB & (1<<MEM5)))
 | 
			
		||||
        SendString(bMessage.Msg1);
 | 
			
		||||
}
 | 
			
		||||
/** @fn     void CheckStraightKey(void)
 | 
			
		||||
 *  @brief  Fragt die Handtasteneingänge ab und gibt das 
 | 
			
		||||
 *          entsprechende Symbol aus. Bei der Handtaste 
 | 
			
		||||
@ -620,57 +650,70 @@ void BeepBoop(void)
 | 
			
		||||
    Boop();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SendString(char *s)
 | 
			
		||||
{
 | 
			
		||||
    int c;
 | 
			
		||||
    while(*s != 0x00)
 | 
			
		||||
    {
 | 
			
		||||
        if(*s != 0x20)
 | 
			
		||||
            SendChar(*s);
 | 
			
		||||
        else if (*s == 0x20)
 | 
			
		||||
        {
 | 
			
		||||
            DelayMilliSeconds(7*DahMillis);
 | 
			
		||||
        }
 | 
			
		||||
        *s++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SendChar(unsigned char c)
 | 
			
		||||
{
 | 
			
		||||
    switch(c)
 | 
			
		||||
    {
 | 
			
		||||
        // Buchstaben
 | 
			
		||||
/*
 | 
			
		||||
        case 'A': SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'B': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'C': SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'D': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'E': SendDit(AUTO); break;
 | 
			
		||||
        case 'F': SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'G': SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'H': SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'I': SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'J': SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'K': SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'L': SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'M': SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'N': SendDah(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'O': SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'P': SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'Q': SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'R': SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'S': SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case 'T': SendDah(AUTO); break;
 | 
			
		||||
        case 'U': SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'V': SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'W': SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'X': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'Y': SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'Z': SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case 'A': SendDit(); SendDah(); break;
 | 
			
		||||
        case 'B': SendDah(); SendDit(); SendDit(); SendDit(); break;
 | 
			
		||||
        case 'C': SendDit(); SendDah(); SendDit(); SendDah(); break;
 | 
			
		||||
        case 'D': SendDah(); SendDit(); SendDit(); break;
 | 
			
		||||
        case 'E': SendDit(); break;
 | 
			
		||||
        case 'F': SendDit(); SendDah(); SendDit(); SendDit(); break;
 | 
			
		||||
        case 'G': SendDah(); SendDah(); SendDit(); break;
 | 
			
		||||
        case 'H': SendDit(); SendDit(); SendDit(); SendDit(); break;
 | 
			
		||||
        case 'I': SendDit(); SendDit(); break;
 | 
			
		||||
        case 'J': SendDit(); SendDah(); SendDah(); SendDah(); break;
 | 
			
		||||
        case 'K': SendDah(); SendDit(); SendDah(); break;
 | 
			
		||||
        case 'L': SendDit(); SendDah(); SendDit(); SendDit(); break;
 | 
			
		||||
        case 'M': SendDah(); SendDah(); break;
 | 
			
		||||
        case 'N': SendDah(); SendDit(); break;
 | 
			
		||||
        case 'O': SendDah(); SendDah(); SendDah(); break;
 | 
			
		||||
        case 'P': SendDit(); SendDah(); SendDah(); SendDit(); break;
 | 
			
		||||
        case 'Q': SendDah(); SendDah(); SendDit(); SendDah(); break;
 | 
			
		||||
        case 'R': SendDit(); SendDah(); SendDit(); break;
 | 
			
		||||
        case 'S': SendDit(); SendDit(); SendDit(); break;
 | 
			
		||||
        case 'T': SendDah(); break;
 | 
			
		||||
        case 'U': SendDit(); SendDit(); SendDah(); break;
 | 
			
		||||
        case 'V': SendDit(); SendDit(); SendDit(); SendDah(); break;
 | 
			
		||||
        case 'W': SendDit(); SendDah(); SendDah(); break;
 | 
			
		||||
        case 'X': SendDah(); SendDit(); SendDit(); SendDah(); break;
 | 
			
		||||
        case 'Y': SendDah(); SendDit(); SendDah(); SendDah(); break;
 | 
			
		||||
        case 'Z': SendDit(); SendDit(); SendDah(); SendDah(); break;
 | 
			
		||||
        // Zahlen
 | 
			
		||||
        case '0': SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case '1': SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case '2': SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case '3': SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case '4': SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case '5': SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case '6': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case '7': SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case '8': SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case '9': SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case '0': SendDah(); SendDah(); SendDah(); SendDah(); SendDah(); break;
 | 
			
		||||
        case '1': SendDit(); SendDah(); SendDah(); SendDah(); SendDah(); break;
 | 
			
		||||
        case '2': SendDit(); SendDit(); SendDah(); SendDah(); break;
 | 
			
		||||
        case '3': SendDit(); SendDit(); SendDit(); SendDah(); SendDah(); break;
 | 
			
		||||
        case '4': SendDit(); SendDit(); SendDit(); SendDit(); SendDah(); break;
 | 
			
		||||
        case '5': SendDit(); SendDit(); SendDit(); SendDit(); SendDit(); break;
 | 
			
		||||
        case '6': SendDah(); SendDit(); SendDit(); SendDit(); SendDit(); break;
 | 
			
		||||
        case '7': SendDah(); SendDah(); SendDit(); SendDit(); SendDit(); break;
 | 
			
		||||
        case '8': SendDah(); SendDah(); SendDah(); SendDit(); SendDit(); break;
 | 
			
		||||
        case '9': SendDah(); SendDah(); SendDah(); SendDah(); SendDit(); break;
 | 
			
		||||
        // Sonderzeichen
 | 
			
		||||
        case '=': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case '/': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case '.': SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case ',': SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
 | 
			
		||||
        case '?': SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); break;
 | 
			
		||||
        case '@': SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); break;
 | 
			
		||||
  */
 | 
			
		||||
        case '=': SendDah(); SendDit(); SendDit(); SendDit(); SendDah(); break;
 | 
			
		||||
        case '/': SendDah(); SendDit(); SendDit(); SendDah(); SendDit(); break;
 | 
			
		||||
        case '.': SendDit(); SendDah(); SendDit(); SendDah(); SendDit(); SendDah(); break;
 | 
			
		||||
        case ',': SendDah(); SendDah(); SendDit(); SendDit(); SendDah(); SendDah(); break;
 | 
			
		||||
        case '?': SendDit(); SendDit(); SendDah(); SendDah(); SendDit(); SendDit(); break;
 | 
			
		||||
        case '@': SendDit(); SendDah(); SendDah(); SendDit(); SendDah(); SendDit(); break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,7 +18,7 @@ uint8_t sreg_tmp;
 | 
			
		||||
void SymbolLoop(uint8_t Len);
 | 
			
		||||
void CheckPaddles(void);
 | 
			
		||||
void SetRatio(void);
 | 
			
		||||
void DitDahBuffers(void);
 | 
			
		||||
void SetWeight(void);
 | 
			
		||||
 | 
			
		||||
void SendDit(void);
 | 
			
		||||
void SendDah(void);
 | 
			
		||||
 | 
			
		||||
@ -115,7 +115,10 @@
 | 
			
		||||
// LCD
 | 
			
		||||
#define CLEARLINE               "                     "
 | 
			
		||||
#define NORMAL                  0
 | 
			
		||||
 | 
			
		||||
// Texte
 | 
			
		||||
#define CQ                      "CQ"
 | 
			
		||||
#define DE                      "DE"
 | 
			
		||||
#define K                       "PSE K"
 | 
			
		||||
// Debugausgabe
 | 
			
		||||
char sdebug[64];
 | 
			
		||||
 | 
			
		||||
@ -152,7 +155,8 @@ struct MenuCtrl
 | 
			
		||||
 | 
			
		||||
struct Config
 | 
			
		||||
{
 | 
			
		||||
    uint8_t TRX: 2;                     // TRX 1 oder 2 oder beide
 | 
			
		||||
    uint8_t Trx1: 1;                    // TRX 1 eingeschaltet
 | 
			
		||||
    uint8_t Trx2: 1;                    // TRX 2 eingeschaltet
 | 
			
		||||
    uint8_t KeyerMode: 3;               // Iambic A, Iambic B oder Ultimatic
 | 
			
		||||
    uint8_t SidetoneEnabled: 1;         // Mithörton eingeschaltet
 | 
			
		||||
    uint8_t WpMBpM: 1;                  // WpM oder BpM Anzeige
 | 
			
		||||
@ -167,6 +171,19 @@ struct Config
 | 
			
		||||
    uint8_t RiseTimeCounter;            // Anzahl Sinusschwingungen für den Anstieg
 | 
			
		||||
    uint8_t DebounceTime;               // Entprellzeit für Straight Key Eingang
 | 
			
		||||
};
 | 
			
		||||
struct Message
 | 
			
		||||
{
 | 
			
		||||
    char Msg1[100];
 | 
			
		||||
    char Msg2[100];
 | 
			
		||||
    char Msg3[100];
 | 
			
		||||
    char Msg4[100];
 | 
			
		||||
    char Msg5[100];
 | 
			
		||||
    char Call[16];
 | 
			
		||||
    char Locator[6];
 | 
			
		||||
    char QTH[32];
 | 
			
		||||
    char Name[16];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Pin Change Interrupt Merker für Port 
 | 
			
		||||
uint8_t LastPINDState;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -129,21 +129,29 @@ void Init(void)
 | 
			
		||||
    sbi(PORTB,PB1);
 | 
			
		||||
    sbi(PORTB,PB2);
 | 
			
		||||
    sbi(PORTB,PB3);
 | 
			
		||||
    sbi(PORTB,PB5);
 | 
			
		||||
    // Tasten
 | 
			
		||||
    sbi(PORTD,MEM1);
 | 
			
		||||
    sbi(PORTD,MEM2);
 | 
			
		||||
    sbi(PORTD,MEM3);
 | 
			
		||||
    sbi(PORTC,MEM4);
 | 
			
		||||
    sbi(PORTB,MEM5);
 | 
			
		||||
 | 
			
		||||
    sbi(PORTB,AUDIO_EN);
 | 
			
		||||
    // Ein- und Ausgänge festlegen
 | 
			
		||||
    // PORTB Ausgänge
 | 
			
		||||
    sbi(DDRB,PB3);          // PWM
 | 
			
		||||
    sbi(DDRB,AUDIO_EN);     // Audio Verstärker
 | 
			
		||||
    // PORTC
 | 
			
		||||
    sbi(DDRC,MORSE_LED);
 | 
			
		||||
    // PORTD
 | 
			
		||||
    // Ein- und Ausgänge festlegen
 | 
			
		||||
    // PORTC Ausgänge
 | 
			
		||||
    sbi(DDRC,MORSE_LED);    // LED
 | 
			
		||||
    sbi(DDRC,TRX1);         // Transceiver 1
 | 
			
		||||
    sbi(DDRC,TRX2);         // Transceiver 2
 | 
			
		||||
    // PORTD Eingänge
 | 
			
		||||
    DDRD = 0x00;
 | 
			
		||||
    // Interne PullUps für die Eingänge abschalten
 | 
			
		||||
    cbi(PORTD,LEFT_PADDLE);
 | 
			
		||||
    cbi(PORTD,RIGHT_PADDLE);
 | 
			
		||||
    cbi(PORTD,STRAIGHT_KEY);
 | 
			
		||||
    // Init serial
 | 
			
		||||
    // Serielle Schnittstelle
 | 
			
		||||
    UBRR0=UBRR_VALUE;   // Set baud rate
 | 
			
		||||
    sbi(UCSR0B,TXEN0);  // Enable TX
 | 
			
		||||
    sbi(UCSR0B,RXEN0);  // Enable RX
 | 
			
		||||
@ -151,7 +159,16 @@ void Init(void)
 | 
			
		||||
    sbi(UCSR0C,UCSZ01); // no parity, 1 stop bit
 | 
			
		||||
    sbi(UCSR0C,UCSZ01); // 8-bit data
 | 
			
		||||
 | 
			
		||||
    // Alle Timer Variablen rücksetzen
 | 
			
		||||
    StateRiseTimeCounter = 0;
 | 
			
		||||
    MenuCtrlTimer = 0;
 | 
			
		||||
    EncoderTimer = 0;
 | 
			
		||||
    StoreEEprom = 0;
 | 
			
		||||
    t_elementlength = 0;
 | 
			
		||||
    t_delayms = 0;
 | 
			
		||||
    // Timer initialisieren
 | 
			
		||||
    InitTimer();
 | 
			
		||||
    // Encoder initialisieren
 | 
			
		||||
    EncoderInit();
 | 
			
		||||
    // Initialisierung Menüvariablen
 | 
			
		||||
    bMenuCtrl.ClrScr = 1;
 | 
			
		||||
@ -288,8 +305,6 @@ ISR(USART_RX_vect)
 | 
			
		||||
 */
 | 
			
		||||
void ReStart(void)
 | 
			
		||||
{
 | 
			
		||||
    MenuCtrlTimer = 0;
 | 
			
		||||
    t_delayms = 0;
 | 
			
		||||
    bState.SendStatus = SENDING_NOTHING;
 | 
			
		||||
    Init();
 | 
			
		||||
    DisplayVersion();
 | 
			
		||||
@ -341,5 +356,6 @@ int main(void)
 | 
			
		||||
        UpdateDisplay();        // Display aktualisieren
 | 
			
		||||
        CheckStraightKey();     // Handtaste auf Betätigung prüfen
 | 
			
		||||
        CheckPaddles();         // Paddles auf Betätigung prüfen
 | 
			
		||||
        CheckButtons();
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@
 | 
			
		||||
struct Config bConfig;
 | 
			
		||||
struct MenuCtrl bMenuCtrl;
 | 
			
		||||
struct State bState;
 | 
			
		||||
struct Message bMessage;
 | 
			
		||||
// Function prototypes
 | 
			
		||||
void Init(void);
 | 
			
		||||
void InitTimer(void);
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,9 @@ void SerialSetup(void)
 | 
			
		||||
    SerialWriteString(sdebug);
 | 
			
		||||
    sprintf(sdebug,"SidetoneFreq    : %u\r\n", bConfig.SidetoneFreq);
 | 
			
		||||
    SerialWriteString(sdebug);
 | 
			
		||||
    sprintf(sdebug,"TRX             : %i\r\n", bConfig.TRX);
 | 
			
		||||
    sprintf(sdebug,"TRX1            : %i\r\n", bConfig.Trx1);
 | 
			
		||||
    SerialWriteString(sdebug);
 | 
			
		||||
    sprintf(sdebug,"TRX2            : %i\r\n", bConfig.Trx2);
 | 
			
		||||
    SerialWriteString(sdebug);
 | 
			
		||||
    sprintf(sdebug,"SidetoneEnabled : %i\r\n", bConfig.SidetoneEnabled);
 | 
			
		||||
    SerialWriteString(sdebug);
 | 
			
		||||
@ -63,3 +65,4 @@ void SerialAbout(void)
 | 
			
		||||
    SerialWriteString(sdebug);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Laden…
	
	
			
			x
			
			
		
	
		In neuem Issue referenzieren
	
	Einen Benutzer sperren