Ср янв 15, 2014 08:48:00
Ср янв 15, 2014 08:57:29
SmarTrunk писал(а):КРАМ
Я считаю, что это разные вещи.
Ср янв 15, 2014 09:44:35
КРАМ писал(а):А кто будет ресетить флаги состояния?
Ср янв 15, 2014 12:02:17
Ср янв 15, 2014 12:09:12
Ср янв 15, 2014 12:17:47
КРАМ писал(а):ЗЫ. Сам по себе автомат состояний дребезг полностью не удаляет. Возможны неприятные ложные срабатывания при нечеткой фиксации положения энкодера.
Ср янв 15, 2014 15:07:28
+1...rx3apf писал(а):Эти задачи (энкодер и кнопки) решаются по-разному.
Ср янв 29, 2014 17:02:14
Пт авг 22, 2014 22:42:30
Чт сен 25, 2014 21:54:37
Вт янв 07, 2020 03:41:53
// INTEDG0 - бит фронта прерывания INT0. Если INTEDG0 = 1, то нарастающий, если INTEDG0 = 0 - спадающий.
// Канал A энкодера висит на INT0, канал B - на RB2.
void Encoder() iv 0x0008 { // Вектор высокоприоритетного прерывания.
if (INTCON2.INTEDG0 == 0) { // Если прерывание INT0 стоит по спадающему фронту, то условие прямое:
if (PORTB.B2 == 1) { // Если во время нарастающего фронта PORTB.B2 равен единице, то инкремент.
A++;
}
if (PORTB.B2 == 0) { // Если во время нарастающего фронта PORTB.B2 равен нулю, то декремент.
A--;
}
}
if (INTCON2.INTEDG0 == 1) { // Если прерывание INT0 стоит по нарастающему фронту, то условие обратное:
if (PORTB.B2 == 0) { // Если во время спадающего фронта PORTB.B2 равен нулю, то инкремент.
A++;
}
if (PORTB.B2 == 1) { // Если во время спадающего фронта PORTB.B2 равен единице, то инкремент.
A--;
}
}
INTCON2.INTEDG0 = ~INTCON2.INTEDG0; // Меняем фронт срабатывания INT0 на противоположный.
INT0IF_bit = 0; // Сбрасываем флаг прерывания.
}
Вт янв 07, 2020 08:00:30
Вт янв 07, 2020 09:45:11
Вт янв 07, 2020 12:00:36
Вт янв 07, 2020 12:15:01
Вт янв 07, 2020 18:27:52
Вт янв 07, 2020 20:26:59
Вт янв 07, 2020 20:42:30
давайте разберемся с "терминологией" N-кликовый это за сколько тактильных щелчков контакты встают в исходное положение, т.е. совершается полный шаг?
думаю, они внутри могут быть полностью одинаковыми и отличаться только трещёткой...
Вт янв 07, 2020 23:10:48
Ср янв 08, 2020 00:55:40