diff --git a/Encoder.c b/Encoder.c index ec1c9e1..a76f0b1 100644 --- a/Encoder.c +++ b/Encoder.c @@ -1,16 +1,161 @@ #include #define F_CPU 1000000UL -#define PIND_MASK 0b11000011 -#define PIND_SHIFT 6 +#define PIND_CLK 0b00010000 +#define PIND_DT 0b01000000 +//#define PIND_MASK PIND_CLK + PIND_DT volatile uint8_t next_state, prev_state, state, state_1; -int sw34; // Передача +int sw34, PIND_SHIFT_1, PIND_SHIFT_2, PIND_MASK, PIN_CLK_2, PIN_DT_2; // Передача + void read_encoder_state() { + PIND_SHIFT_1 = 0; + PIND_SHIFT_2 = 0; + PIND_MASK = 0; + + if(PIND_CLK == 4 & PIND_DT == 8) //0b00001100 = 12 + { + PIND_SHIFT_1 = 2; + PIND_SHIFT_2 = 2; + } + if(PIND_CLK == 4 & PIND_DT == 16) //0b00010100 = 20 + { + PIND_SHIFT_1 = 2; + PIND_SHIFT_2 = 3; + } + if(PIND_CLK == 4 & PIND_DT == 32) //0b00100100 = 36 + { + PIND_SHIFT_1 = 2; + PIND_SHIFT_2 = 4; + } + if(PIND_CLK == 4 & PIND_DT == 64) //0b01000100 = 68 + { + PIND_SHIFT_1 = 2; + PIND_SHIFT_2 = 5; + } + if(PIND_CLK == 4 & PIND_DT == 128) //0b10000100 = 132 + { + PIND_SHIFT_1 = 2; + PIND_SHIFT_2 = 6; + } + + + if(PIND_CLK == 8 & PIND_DT == 4) //0b00001100 = 12 + { + PIND_SHIFT_1 = 3; + PIND_SHIFT_2 = 2; + } + if(PIND_CLK == 8 & PIND_DT == 16) //0b00011000 = 24 + { + PIND_SHIFT_1 = 3; + PIND_SHIFT_2 = 3; + } + if(PIND_CLK == 8 & PIND_DT == 32) //0b00101000 = 40 + { + PIND_SHIFT_1 = 3; + PIND_SHIFT_2 = 4; + } + if(PIND_CLK == 8 & PIND_DT == 64) //0b01001000 = 72 + { + PIND_SHIFT_1 = 3; + PIND_SHIFT_2 = 5; + } + if(PIND_CLK == 8 & PIND_DT == 128) //0b10001000 = 136 + { + PIND_SHIFT_1 = 3; + PIND_SHIFT_2 = 6; + } + + + if(PIND_CLK == 16 & PIND_DT == 4) //0b00010100 = 16 + { + PIND_SHIFT_1 = 4; + PIND_SHIFT_2 = 2; + } + if(PIND_CLK == 16 & PIND_DT == 8) //0b00011000 = 24 + { + PIND_SHIFT_1 = 4; + PIND_SHIFT_2 = 3; + } + if(PIND_CLK == 16 & PIND_DT == 32) //0b00110000 = 48 + { + PIND_SHIFT_1 = 4; + PIND_SHIFT_2 = 4; + } + if(PIND_CLK == 16 & PIND_DT == 64) //0b01010000 = 80 + { + PIND_SHIFT_1 = 4; + PIND_SHIFT_2 = 5; + } + if(PIND_CLK == 16 & PIND_DT == 128) //0b10010000 = 144 + { + PIND_SHIFT_1 = 4; + PIND_SHIFT_2 = 6; + } + + + if(PIND_CLK == 32 & PIND_DT == 4) //0b00100100 = 36 + { + PIND_SHIFT_1 = 5; + PIND_SHIFT_2 = 2; + } + if(PIND_CLK == 32 & PIND_DT == 8) //0b00101000 = 40 + { + PIND_SHIFT_1 = 5; + PIND_SHIFT_2 = 3; + } + if(PIND_CLK == 32 & PIND_DT == 16) //0b00110000 = 48 + { + PIND_SHIFT_1 = 5; + PIND_SHIFT_2 = 4; + } + if(PIND_CLK == 32 & PIND_DT == 64) //0b01100000 = 96 + { + PIND_SHIFT_1 = 5; + PIND_SHIFT_2 = 5; + } + if(PIND_CLK == 32 & PIND_DT == 128) //0b10100000 = 160 + { + PIND_SHIFT_1 = 5; + PIND_SHIFT_2 = 6; + } + + + if(PIND_CLK == 64 & PIND_DT == 4) //0b01000100 = 68 + { + PIND_SHIFT_1 = 6; + PIND_SHIFT_2 = 2; + } + if(PIND_CLK == 64 & PIND_DT == 8) //0b01001000 = 72 + { + PIND_SHIFT_1 = 6; + PIND_SHIFT_2 = 3; + } + if(PIND_CLK == 64 & PIND_DT == 16) //0b01010000 = 80 + { + PIND_SHIFT_1 = 6; + PIND_SHIFT_2 = 4; + } + if(PIND_CLK == 64 & PIND_DT == 32) //0b01100000 = 96 + { + PIND_SHIFT_1 = 6; + PIND_SHIFT_2 = 5; + } + if(PIND_CLK == 64 & PIND_DT == 128) //0b11000000 = 192 + { + PIND_SHIFT_1 = 6; + PIND_SHIFT_2 = 6; + } + + + PIN_CLK_2 = (PIND & PIND_CLK) >> PIND_SHIFT_1; + PIN_DT_2 = (PIND & PIND_DT) >> PIND_SHIFT_2; + PIND_MASK = (PIN_CLK_2 + PIN_DT_2); + // Читаем состояние энкодера - next_state = (PIND & PIND_MASK) >> PIND_SHIFT; + next_state = (PIND & PIND_MASK); // Обновляем состояние энкодера if (next_state != prev_state) @@ -45,7 +190,7 @@ void setup() // Настройка портов ввода-вывода DDRD = 0x00; - PORTD = PIND_MASK; + PORTD = (PIND_CLK + PIND_DT); } void loop()