Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено -=John=- 05 декабря 2004 г. 09:54
В ответ на: Народ плиз, задолбался, бьюсь головой о стену, но так и несмог заставить AT90S2313 работать с энкодером. поделитесь исходом желательно на си отправлено Sasha NT 05 декабря 2004 г. 03:59

Вот пример. Эту процедуру надо постоянно вызывать. Правда, обычно это я вставляю этот текст в процедуру обработки прерывания таймера. Герц 100 вполне достаточно.


// Переменные для обработки сигналов от энкодера
volatile unsigned char EncoderOld;
volatile signed char EncoderRes;

//--------------------------------
// Обработка сигналов от энкодера
void Encoder ()
{
unsigned char PNew;

PNew = ( PIND & 0x0C ) >> 2;
if ( PNew != EncoderOld )
{
if ( PNew == 0x00 )
{
if ( EncoderOld == 0x02 ) EncoderRes -= 1;
if ( EncoderOld == 0x01 ) EncoderRes += 1;
}
else
{
if ( PNew == 0x01 )
{
if ( EncoderOld == 0x00 ) EncoderRes -= 1;
if ( EncoderOld == 0x03 ) EncoderRes += 1;
}
else
{
if ( PNew == 0x02 )
{
if ( EncoderOld == 0x03 ) EncoderRes -= 1;
if ( EncoderOld == 0x00 ) EncoderRes += 1;
}
else
{
if ( PNew == 0x03 )
{
if ( EncoderOld == 0x01 ) EncoderRes -= 1;
if ( EncoderOld == 0x02 ) EncoderRes += 1;
}
}
}
}
}
EncoderOld = PNew;
} // Encoder

<\pre>

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru