1
0
Tom, DL7BJ 74f768a095 Es wird vorerst keine Winkeyer Emulation geben, da ich die Funktion
nicht benötige. Der Wert im EEprom wurde zu geschwindigkeitsabhängigem
Punkt/Strich Verhältnis geändert. Die Berechnung muss noch in SetRatio()
erfolgen.

Anzeige auf dem Display geändert, es wird nun das eingestellte
Punkt/Strich Verhältnis und der Punkt/Strich Speicherstatus anzeigt.

Dokumentation ergänzt.
2023-08-24 00:37:05 +02:00

57 Zeilen
2.0 KiB
C

#ifndef ENCODER_H_
#define ENCODER_H_
// Art des Drehencoders definieren
// #define SingleStep
// #define TwoStep
#define TwoStep
#define ENC_A_PORT PORTB /**< port for line A */
#define ENC_A_PIN PB1 /**< pin for line A */
#define ENC_B_PORT PORTB /**< port for line B */
#define ENC_B_PIN PB0 /**< pin for line B */
#define ENC_T_PORT PORTB /**< port for button */
#define ENC_T_PIN PB2 /**< pin for button */
#define DDR(x) (*(&x-1))
#define Port(x) (*(&x))
#define PIN(x) (*(&x-2))
#define PHASE_A PIN(ENC_A_PORT) & (1<<ENC_A_PIN)
#define PHASE_B PIN(ENC_B_PORT) & (1<<ENC_B_PIN)
#define BUTTONPRESSED (!(PIN(ENC_T_PORT) & (1<<ENC_T_PIN)))
/** @brief Timer für Encoderpolling
*
* Wenn der Timer für das Polling vom Drehencoder mit
* anderen Zeiten als 1ms läuft, dann müssen hier die
* Werte für Debounce und das lange Drücken des Tasters
* im Encoder angepasset werden. Standardwert ist normal
* 1ms, im BJ-Keyer wird 5ms verwendet.
*/
#define ENCODERTIMER 5
#define BUTTON_DEBOUNCETIME_MS 30/ENCODERTIMER
#define BUTTON_PRESSEDLONG_MS 250/ENCODERTIMER
typedef enum EButtonPressedState
{
ButtonPressed_Unpressed,
ButtonPressed_Short,
ButtonPressed_Long
}tEButtonPressedState;
// Initialisiert den Encoder und aktiviert den Interrupt + Timer
void EncoderInit( void );
// Liest die Position des Encoders aus
// Wenn Ueberlauf=1 dann zählt der Encoder nach Max
// wieder von Min und umgekehrt
int8_t EncoderRead(char Ueberlauf);
// Ruft den Status des Encoder-Knopfes
tEButtonPressedState EncoderGetButtonState(void);
// Setzt die aktuelle Drehencoderposition
void EncoderWrite(int8_t EncoderPos);
// Setzt Min- und Max-Werte für die Drehgeberposition
void EncoderMinMax(int8_t EncoderMin,int8_t EncoderMax);
void EncoderPolling(void);
#endif /* ENCODER_H_ */