BJ-Keyer  1.03
Morsekeyer für 2 TRX und 6 Morsetasten
globals.h
gehe zur Dokumentation dieser Datei
1 
6 #ifndef GLOBALS_H_INCLUDED
7 #define GLOBALS_H_INCLUDED
8 
9 #define F_CPU 16000000UL
10 #define PRESCALER 8
11 #define SINEWAVELENGTH 64
12 #define F_CPUPRESIN (F_CPU/(PRESCALER*SINEWAVELENGTH))
13 #define USART_BAUDRATE 9600
14 #define UBRR_VALUE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
15 
16 #include <stdlib.h>
17 #include <stdio.h>
18 #include <stdint.h>
19 #include <string.h>
20 #include <math.h>
21 #include <inttypes.h>
22 
23 #include <avr/io.h>
24 #include <avr/pgmspace.h>
25 #include <avr/wdt.h>
26 #include <avr/interrupt.h>
27 #include <avr/eeprom.h>
28 #include <util/delay.h>
29 #include <util/atomic.h>
30 
31 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) // clear bit
32 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) // set bit
33 
34 #include "oled/i2c.h"
35 #include "oled/lcd.h"
36 #include "oled/font.h"
37 
38 #ifndef EEMEM
39 #define EEMEM __attribute__ ((section (".eeprom")))
40 #endif
41 
42 #ifndef NOINIT
43 #define NOINIT __attribute__ ((section (".noinit")))
44 #endif
45 
46 #define CALL " DL7BJ "
47 #define PRG " BJ-Keyer "
48 #define VER " V1.03 "
49 
51 #define NOTHING 0
52 #define DIT_DAH_OFF 1
53 #define DAH_DIT_OFF 2
54 #define DIT_DAH_ON 3
55 #define DAH_DIT_ON 4
57 #define STRAIGHT 0
58 #define IAMBIC_B 1
59 #define IAMBIC_A 2
60 #define ULTIMATIC 3
61 #define SINGLE_PADDLE 4
63 #define PADDLE_NORMAL 0
64 #define PADDLE_REVERSE 1
66 #define SENDING_NOTHING 0
67 #define SENDING_DIT 1
68 #define SENDING_DAH 2
69 #define SENDING_SPC 3
70 #define SENDING_STRAIGHT 4
71 #define SENDING_AUTOMATIC 5
73 #define AUTO 0
74 #define MAN 1
76 #define LEFT_PADDLE PD2
77 #define RIGHT_PADDLE PD3
78 #define STRAIGHT_KEY PD4
79 #define MORSE_LED PC3
80 #define MEM1 PD5
81 #define MEM2 PD6
82 #define MEM3 PD7
83 #define MEM4 PC0
84 #define MEM5 PB5
85 #define TRX1 PC1
86 #define TRX2 PC2
87 #define AUDIO PB3
88 #define AUDIO_EN PB4
89 #define SCL PC5
90 #define SDA PC4
91 // States
92 #define ON 1
93 #define OFF 0
94 #define DIT 1
95 #define DAH 0
96 #define NO_KEY_PRESSED 0
97 #define KEY_PRESSED_DEBOUNCE 1
98 #define KEY_PRESSED 2
99 // Menue und Drehencoder
100 #define M_TRX1 1
101 #define M_TRX2 2
102 #define M_TON 3
103 #define M_TON_FREQ 4
104 #define M_IAMBICA 5
105 #define M_IAMBICB 6
106 #define M_ULTIMATIC 7
107 #define M_MEMORY 8
108 #define M_REVERSE 9
109 #define M_RATIO 10
110 #define M_WEIGHT 11
111 #define M_WPMBPM 12
112 #define M_MEMBUTTONMODE 13
113 #define M_RISETIME 14
114 #define M_DEBOUNCE 15
115 #define M_MAX 15
117 #define CLEARLINE " "
118 #define NORMAL 0
119 
120 struct State
121 {
122  uint8_t WpMChanged: 1;
123  uint8_t WriteWpMEEprom: 1;
124  uint8_t WriteEEprom: 1;
125  uint8_t WriteMsgEEprom: 2;
126  uint8_t SidetoneOff: 1;
127  uint8_t SidetoneEnabled: 1;
128  uint8_t SendStatus;
129  uint8_t Automatic;
130  uint8_t LastSymbolWasDit: 1;
131  uint8_t DitPressed: 1;
132  uint8_t DahPressed: 1;
133  uint8_t KeyState:1;
134  uint8_t KeyTX:1;
135 };
136 
137 struct MenuCtrl
138 {
139  uint8_t buttonPressed: 1;
140  uint8_t buttonPressedLong: 1;
141  uint8_t m_buttonPressed: 2;
142  uint8_t m_buttonPressedLong: 1;
143  uint8_t ClrScr: 1;
144  uint8_t Config: 1;
145  uint8_t Update: 1;
146  uint8_t CurMenue;
147  uint8_t SubMenue: 1;
148 };
149 
150 struct Config
151 {
152  uint8_t Trx1: 1;
153  uint8_t Trx2: 1;
154  uint8_t KeyerMode: 3;
155  uint8_t SidetoneEnabled: 1;
156  uint8_t WpMBpM: 1;
157  uint8_t Reverse: 1;
158  uint8_t Ratio;
159  uint8_t Weight;
160  uint8_t Memory:1;
161  uint8_t MemButtonMode:1;
162  uint16_t SidetoneFreq;
163  uint8_t WpM;
164  uint8_t RiseTime;
165  uint8_t RiseTimeCounter;
166  uint8_t DebounceTime;
167 };
168 
169 #define MSGSIZE 60
170 
171 struct Message
172 {
173  char Msg1[MSGSIZE];
174  char Msg2[MSGSIZE];
175  char Msg3[MSGSIZE];
176  char Msg4[MSGSIZE];
177  char Msg5[MSGSIZE];
178 };
179 
180 
181 
182 // Pin Change Interrupt Merker für Port
183 uint8_t LastPINDState;
184 
185 // Drehencoder
186 volatile uint8_t EncoderTimer;
187 volatile int8_t EncoderCounter;
188 volatile int8_t EncoderPos;
189 volatile int8_t EncoderPosConfig;
190 volatile int8_t EncoderPosSubConfig;
191 
192 uint16_t StoreEEpromTimer;
193 
194 uint8_t WpM;
195 uint8_t PaddleMode;
196 uint8_t KeyerMode;
197 uint8_t KeyTX;
198 
199 // Sidetone generation
200 volatile uint8_t icnt;
201 volatile uint8_t ocr2a;
202 volatile uint8_t lastButton;
203 volatile uint16_t DitMillis;
204 volatile uint16_t DahMillis;
205 volatile uint16_t SpcMillis;
206 // Zähler und Status für Entprellung der Tasteneingänge und Mithörton
207 volatile uint8_t StateStraightKeyPressed;
208 volatile uint8_t TimerStraightKeyPressed;
209 volatile uint8_t StatePaddleDitKeyPressed;
210 volatile uint8_t TimerPaddleDitKeyPressed;
211 volatile uint8_t StatePaddleDahKeyPressed;
212 volatile uint8_t TimerPaddleDahKeyPressed;
213 volatile uint8_t StateButtonPressed;
214 volatile uint8_t TimerButtonPressed;
215 volatile uint8_t StateRiseTimeCounter;
216 volatile uint8_t StateRiseTime;
218 uint16_t MenuCtrlTimer;
219 volatile uint16_t t_delayms;
220 volatile uint16_t t_elementlength;
221 #endif
volatile uint8_t StateRiseTimeCounter
Zähler für Anstieg des Mithörtons.
Definition: globals.h:215
uint16_t MenuCtrlTimer
Diverse Zähler für Timer 0.
Definition: globals.h:218
volatile uint8_t StateButtonPressed
Merker für Speichertaste betätigt.
Definition: globals.h:213
volatile uint8_t TimerStraightKeyPressed
Timer Variable für Entprellung.
Definition: globals.h:208
volatile uint8_t TimerPaddleDitKeyPressed
Timer Variable für Entprellung.
Definition: globals.h:210
volatile uint8_t EncoderTimer
10ms Timer for Encoder
Definition: globals.h:186
uint8_t WpM
Aktuelle Zeichengeschwindigkeit.
Definition: globals.h:194
volatile int8_t EncoderPosSubConfig
Encoderposition für Submenues.
Definition: globals.h:190
volatile int8_t EncoderPosConfig
Encoderposition für Einstellungen.
Definition: globals.h:189
volatile uint16_t DitMillis
Dauer eines Dits.
Definition: globals.h:203
volatile uint8_t StateStraightKeyPressed
Merker für StraightKey betätigt.
Definition: globals.h:207
volatile int8_t EncoderPos
Encoderposition für WpM/BpM.
Definition: globals.h:188
volatile int8_t EncoderCounter
Vor/Rück Zähler.
Definition: globals.h:187
volatile uint16_t t_delayms
Timer 0 max. 65535ms, all purpose timer variable.
Definition: globals.h:219
#define MSGSIZE
60 Zeichen für jeden Textspeicher
Definition: globals.h:169
volatile uint8_t TimerPaddleDahKeyPressed
Timer Variable für Entprellung.
Definition: globals.h:212
volatile uint16_t SpcMillis
Dauer einer Pause zwischen den Zeichen.
Definition: globals.h:205
volatile uint16_t t_elementlength
Timer 0 max. 65535ms, element length of dit or dah.
Definition: globals.h:220
volatile uint8_t StatePaddleDahKeyPressed
Merker für Paddle betätigt.
Definition: globals.h:211
volatile uint8_t TimerButtonPressed
Timer Variable für Entprellung.
Definition: globals.h:214
volatile uint8_t StatePaddleDitKeyPressed
Merker für Paddle betätigt.
Definition: globals.h:209
uint8_t KeyerMode
Merker für Iambic A, Iambic B oder Ultimatic.
Definition: globals.h:196
volatile uint8_t StateRiseTime
Definition: globals.h:216
volatile uint8_t lastButton
Wert der letzten Buttonabfrage.
Definition: globals.h:202
volatile uint16_t DahMillis
Dauer eines Dahs.
Definition: globals.h:204
uint8_t PaddleMode
Merker für Links / Rechts vertauscht.
Definition: globals.h:195
Definition: globals.h:151
uint8_t Trx2
TRX 2 eingeschaltet.
Definition: globals.h:153
uint8_t Memory
Punkt/Strich Speicher.
Definition: globals.h:160
uint8_t RiseTimeCounter
Anzahl Sinusschwingungen für den Anstieg.
Definition: globals.h:165
uint8_t RiseTime
Anstiegszeit Sinuston.
Definition: globals.h:164
uint8_t WpMBpM
WpM oder BpM Anzeige.
Definition: globals.h:156
uint8_t Trx1
TRX 1 eingeschaltet.
Definition: globals.h:152
uint8_t SidetoneEnabled
Mithörton eingeschaltet.
Definition: globals.h:155
uint8_t Reverse
linkes/rechtes Paddle vertauschen
Definition: globals.h:157
uint16_t SidetoneFreq
Frequenz des Mithörtons.
Definition: globals.h:162
uint8_t Ratio
Punkt/Strich Verhältnis 1:3.
Definition: globals.h:158
uint8_t DebounceTime
Entprellzeit für Straight Key Eingang.
Definition: globals.h:166
uint8_t Weight
Punkt/Strich Gewichtung.
Definition: globals.h:159
uint8_t WpM
WpM.
Definition: globals.h:163
uint8_t MemButtonMode
Button 5 als Umschalter TRX oder Speichertaste.
Definition: globals.h:161
uint8_t KeyerMode
Iambic A, Iambic B oder Ultimatic.
Definition: globals.h:154
Definition: globals.h:138
uint8_t m_buttonPressedLong
Merker für Taster Drehencoder lange gedrückt.
Definition: globals.h:142
uint8_t SubMenue
im Submenue
Definition: globals.h:147
uint8_t CurMenue
aktuelles Menue
Definition: globals.h:146
uint8_t buttonPressedLong
Taster Drehencoder lange gedrückt.
Definition: globals.h:140
uint8_t Config
Bitmerker für Config geändert.
Definition: globals.h:144
uint8_t Update
Bitmerker für Display update.
Definition: globals.h:145
uint8_t m_buttonPressed
Merker für Taster Drehencoder gedrückt.
Definition: globals.h:141
uint8_t ClrScr
Bitmerker für Display löschen.
Definition: globals.h:143
uint8_t buttonPressed
Taster Drehencoder gedrückt.
Definition: globals.h:139
Definition: globals.h:172
char Msg3[MSGSIZE]
Textspeicher 3.
Definition: globals.h:175
char Msg5[MSGSIZE]
Textspeicher 5.
Definition: globals.h:177
char Msg1[MSGSIZE]
Textspeicher 1.
Definition: globals.h:173
char Msg2[MSGSIZE]
Textspeicher 2.
Definition: globals.h:174
char Msg4[MSGSIZE]
Textspeicher 4.
Definition: globals.h:176
Definition: globals.h:121
uint8_t WriteWpMEEprom
nicht gespeicherte Geschwindigkeit
Definition: globals.h:123
uint8_t WriteEEprom
nicht gespeicherte EEprom Werte
Definition: globals.h:124
uint8_t LastSymbolWasDit
letztes Symbol war ein Punkt
Definition: globals.h:130
uint8_t DitPressed
Dit Hebel betätigt.
Definition: globals.h:131
uint8_t WpMChanged
Geschwindigkeit geändert.
Definition: globals.h:122
uint8_t SidetoneOff
Mithörton an oder aus.
Definition: globals.h:126
uint8_t DahPressed
Dah Hebel betätigt.
Definition: globals.h:132
uint8_t Automatic
Speicher wird gesendet.
Definition: globals.h:129
uint8_t SidetoneEnabled
Mithörton ein- oder ausgeschaltet.
Definition: globals.h:127
uint8_t SendStatus
Status, ob Symbol gesendet wird.
Definition: globals.h:128
uint8_t WriteMsgEEprom
nicht gespeicherte Textnachrichten
Definition: globals.h:125