You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.5 KiB
C
60 lines
2.5 KiB
C
/** @file encoder.h
|
|
* @date 2014-12-04
|
|
* @author Frank Klee
|
|
* @brief Headerdatei Drehencoder Library
|
|
*
|
|
* Basisroutinen zum Abfragen eines Drehencoders mittels Polling.
|
|
* Quelle: https://www.mikrocontroller.net/articles/Drehgeber
|
|
*
|
|
* @brief Formatierungen und Umbenennungen der Funktionen
|
|
* @author Tom, DL7BJ
|
|
* @date 2023-03-23
|
|
*/
|
|
#ifndef ENCODER_H_
|
|
#define ENCODER_H_
|
|
// Art des Drehencoders definieren
|
|
// #define SingleStep
|
|
// #define TwoStep
|
|
#define TwoStep ///< Art des Drehencoders
|
|
|
|
#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)) ///< Makro Datenrichtungsregister
|
|
#define Port(x) (*(&x)) ///< Makro Port
|
|
#define PIN(x) (*(&x-2)) ///< Makro Pin
|
|
|
|
#define PHASE_A PIN(ENC_A_PORT) & (1<<ENC_A_PIN) ///< Makro für Encoder PHASE A
|
|
#define PHASE_B PIN(ENC_B_PORT) & (1<<ENC_B_PIN) ///< Makro für Encoder PHASE B
|
|
#define BUTTONPRESSED (!(PIN(ENC_T_PORT) & (1<<ENC_T_PIN))) ///< Makro für Taster des Encoders
|
|
|
|
#define BUTTON_DEBOUNCETIME_MS 30 ///< Entprellzeit Taster
|
|
#define BUTTON_PRESSEDLONG_MS 250 ///< Definition langer Tastendruck
|
|
|
|
typedef enum EButtonPressedState
|
|
{
|
|
ButtonPressed_Unpressed, ///< kein Taster betötigt
|
|
ButtonPressed_Short, ///< Taster kurz betätigt
|
|
ButtonPressed_Long ///< Taster lang betätigt
|
|
}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_ */
|
|
|