/** @file globals.h * @brief Globale Variablen, Definitionen und Prototypen * */ #ifndef GLOBALS_H_INCLUDED #define GLOBALS_H_INCLUDED #define F_CPU 16000000UL #define PRESCALER 8 #define SINEWAVELENGTH 64 #define F_CPUPRESIN (F_CPU/(PRESCALER*SINEWAVELENGTH)) #define USART_BAUDRATE 9600 #define UBRR_VALUE (((F_CPU/(USART_BAUDRATE*16UL)))-1) #include #include #include #include #include #include #include #include #include #include #include #include #include #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) // clear bit #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) // set bit #include "oled/i2c.h" #include "oled/lcd.h" #include "oled/font.h" #ifndef EEMEM #define EEMEM __attribute__ ((section (".eeprom"))) #endif #ifndef NOINIT #define NOINIT __attribute__ ((section (".noinit"))) #endif #define CALL " DL7BJ " #define PRG " BJ-Keyer " #define VER " V1.03 " //! Keying states #define NOTHING 0 #define DIT_DAH_OFF 1 #define DAH_DIT_OFF 2 #define DIT_DAH_ON 3 #define DAH_DIT_ON 4 //! Keyer mode #define STRAIGHT 0 #define IAMBIC_B 1 #define IAMBIC_A 2 #define ULTIMATIC 3 #define SINGLE_PADDLE 4 //! Paddle Mode #define PADDLE_NORMAL 0 #define PADDLE_REVERSE 1 //! Sending Mode #define SENDING_NOTHING 0 #define SENDING_DIT 1 #define SENDING_DAH 2 #define SENDING_SPC 3 #define SENDING_STRAIGHT 4 #define SENDING_AUTOMATIC 5 //! Sending Type #define AUTO 0 ///< Automatische Pausen zwischen Elementen #define MAN 1 ///< Manuelle Pausen zwischen Elementen //! Ports #define LEFT_PADDLE PD2 ///< Left Paddle Input #define RIGHT_PADDLE PD3 ///< Right Paddle Input #define STRAIGHT_KEY PD4 ///< Straight key Input #define MORSE_LED PC3 ///< LED Morse Output #define MEM1 PD5 ///< Mem 1 Input #define MEM2 PD6 ///< Mem 2 Input #define MEM3 PD7 ///< Mem 3 Input #define MEM4 PC0 ///< Mem 4 Input #define MEM5 PB5 ///< Mem 5 Input #define TRX1 PC1 ///< TRX1 Output #define TRX2 PC2 ///< TRX2 Output #define AUDIO PB3 ///< PWM Audio Output #define AUDIO_EN PB4 ///< Audio PA Enable #define SCL PC5 ///< I²C LC Display #define SDA PC4 ///< I²C LC Display // States #define ON 1 #define OFF 0 #define DIT 1 #define DAH 0 #define NO_KEY_PRESSED 0 #define KEY_PRESSED_DEBOUNCE 1 #define KEY_PRESSED 2 // Menue und Drehencoder #define M_TRX1 1 #define M_TRX2 2 #define M_TON 3 #define M_TON_FREQ 4 #define M_IAMBICA 5 #define M_IAMBICB 6 #define M_ULTIMATIC 7 #define M_MEMORY 8 #define M_REVERSE 9 #define M_RATIO 10 #define M_WEIGHT 11 #define M_WPMBPM 12 #define M_MEMBUTTONMODE 13 #define M_RISETIME 14 #define M_DEBOUNCE 15 #define M_MAX 15 ///< maximale Menuepunke //! OLED #define CLEARLINE " " #define NORMAL 0 struct State { uint8_t WpMChanged: 1; ///< Geschwindigkeit geändert uint8_t WriteWpMEEprom: 1; ///< nicht gespeicherte Geschwindigkeit uint8_t WriteEEprom: 1; ///< nicht gespeicherte EEprom Werte uint8_t WriteMsgEEprom: 2; ///< nicht gespeicherte Textnachrichten uint8_t SidetoneOff: 1; ///< Mithörton an oder aus uint8_t SidetoneEnabled: 1; ///< Mithörton ein- oder ausgeschaltet uint8_t SendStatus; ///< Status, ob Symbol gesendet wird uint8_t Automatic; ///< Speicher wird gesendet uint8_t LastSymbolWasDit: 1; ///< letztes Symbol war ein Punkt uint8_t DitPressed: 1; ///< Dit Hebel betätigt uint8_t DahPressed: 1; ///< Dah Hebel betätigt uint8_t KeyState:1; ///< uint8_t KeyTX:1; ///< }; struct MenuCtrl { uint8_t buttonPressed: 1; ///< Taster Drehencoder gedrückt uint8_t buttonPressedLong: 1; ///< Taster Drehencoder lange gedrückt uint8_t m_buttonPressed: 2; ///< Merker für Taster Drehencoder gedrückt uint8_t m_buttonPressedLong: 1; ///< Merker für Taster Drehencoder lange gedrückt uint8_t ClrScr: 1; ///< Bitmerker für Display löschen uint8_t Config: 1; ///< Bitmerker für Config geändert uint8_t Update: 1; ///< Bitmerker für Display update uint8_t CurMenue; ///< aktuelles Menue uint8_t SubMenue: 1; ///< im Submenue }; struct Config { 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 uint8_t Reverse: 1; ///< linkes/rechtes Paddle vertauschen uint8_t Ratio; ///< Punkt/Strich Verhältnis 1:3 uint8_t Weight; ///< Punkt/Strich Gewichtung uint8_t Memory:1; ///< Punkt/Strich Speicher uint8_t MemButtonMode:1; ///< Button 5 als Umschalter TRX oder Speichertaste uint16_t SidetoneFreq; ///< Frequenz des Mithörtons uint8_t WpM; ///< WpM uint8_t RiseTime; ///< Anstiegszeit Sinuston uint8_t RiseTimeCounter; ///< Anzahl Sinusschwingungen für den Anstieg uint8_t DebounceTime; ///< Entprellzeit für Straight Key Eingang }; #define MSGSIZE 60 ///< 60 Zeichen für jeden Textspeicher struct Message { char Msg1[MSGSIZE]; ///< Textspeicher 1 char Msg2[MSGSIZE]; ///< Textspeicher 2 char Msg3[MSGSIZE]; ///< Textspeicher 3 char Msg4[MSGSIZE]; ///< Textspeicher 4 char Msg5[MSGSIZE]; ///< Textspeicher 5 }; // Pin Change Interrupt Merker für Port uint8_t LastPINDState; // Drehencoder volatile uint8_t EncoderTimer; ///< 10ms Timer for Encoder volatile int8_t EncoderCounter; ///< Vor/Rück Zähler volatile int8_t EncoderPos; ///< Encoderposition für WpM/BpM volatile int8_t EncoderPosConfig; ///< Encoderposition für Einstellungen volatile int8_t EncoderPosSubConfig; ///< Encoderposition für Submenues volatile uint16_t StoreEEpromTimer; ///< Zählvariable für auto. Speicherung EEprom uint8_t WpM; ///< Aktuelle Zeichengeschwindigkeit uint8_t PaddleMode; ///< Merker für Links / Rechts vertauscht uint8_t KeyerMode; ///< Merker für Iambic A, Iambic B oder Ultimatic uint8_t KeyTX; // Sidetone generation volatile uint8_t icnt; volatile uint8_t ocr2a; volatile uint8_t lastButton; ///< Wert der letzten Buttonabfrage volatile uint16_t DitMillis; ///< Dauer eines Dits volatile uint16_t DahMillis; ///< Dauer eines Dahs volatile uint16_t SpcMillis; ///< Dauer einer Pause zwischen den Zeichen // Zähler und Status für Entprellung der Tasteneingänge und Mithörton volatile uint8_t StateStraightKeyPressed; ///< Merker für StraightKey betätigt volatile uint8_t TimerStraightKeyPressed; ///< Timer Variable für Entprellung volatile uint8_t StatePaddleDitKeyPressed; ///< Merker für Paddle betätigt volatile uint8_t TimerPaddleDitKeyPressed; ///< Timer Variable für Entprellung volatile uint8_t StatePaddleDahKeyPressed; ///< Merker für Paddle betätigt volatile uint8_t TimerPaddleDahKeyPressed; ///< Timer Variable für Entprellung volatile uint8_t StateButtonPressed; ///< Merker für Speichertaste betätigt volatile uint8_t TimerButtonPressed; ///< Timer Variable für Entprellung volatile uint8_t StateRiseTimeCounter; ///< Zähler für Anstieg des Mithörtons volatile uint8_t StateRiseTime; ///< Timer für Anstieg des Mithörtons // Diverse Zähler für Timer 0 uint16_t MenuCtrlTimer; ///< Wartezeit bis zur Betriebsanzeige nach Config volatile uint16_t t_delayms; ///< Timer 0 max. 65535ms, all purpose timer variable volatile uint16_t t_elementlength; ///< Timer 0 max. 65535ms, element length of dit or dah #endif