Monday, May 12, 2014

Encoder with velocity sense & 4Digit 7Segment LED Tutorial

Encoder with velocity sense

Rotary Encoder와 4 Digit 7-Segment 활용하기

버튼 4~5개가 해야 할일을 단 1개로 수행할 수 있으니 무척 유용한 부품입니다
0초에서 99분99초까지 타이머 설정을 7-Segment에 표시하는 예제입니다

기본 동작은 크게 3가지 입니다
1.오른쪽 회전 : 증가
2.왼쪽 회전 : 감소
3.버튼을 누를 경우 : Run/Stop (실제 타이머 동작은 하지 않습니다)

Encoder with velocity sense
음향 볼륨의 경우 한바퀴 혹은 두바퀴면  Max/Min 으로 이동 가능하지만
시간설정같이 이동 범위가 넓다면 Encoder knob를 여러번 돌려야 하는 불편함이 있습니다
이 문제를 해결하기위해 천천히 돌릴경우 최소단위(1초) 증가/감소
빠르게 돌릴경우엔 가중치(ENC_INC_SCALE)  를 주어 빠르게 이동하는 방법을 사용합니다

















회전속도가 44mSec 이상인 경우 1초씩 증가, 이하 인경우  30초씩 증가하도록 
구현되어있습니다, 가중치는 ENC_INC_SCALE 값을 통해 조정가능합니다 (Default : 30초)
// Default Up/Down Encoder Value
#define ENC_INC_SCALE  30 
ISR(INT0_vect)
{
  // When an interrupt occurs, we only have to check the level of
  // of pin PD2(INT0) to determine the direction.
  // We must also evaluate timer0counter for bigger steps when the encoder is turned faster.
  //
  // *Number of Detent : 12 PPR(Pulses Per Revolution) / 30 detents
  //  Number of Detent : 15 PPR(Pulses Per Revolution) / 24 detents

  // Up
  if(bit_is_clear( ENC_SET_PIN , ENC_UP) && (timer0counter > 10))     
  {
    if(timer0counter > 44)
      timestamp += 1;
    else
      timestamp += ENC_INC_SCALE;

    if(timestamp > ENC_MAX) timestamp = ENC_MAX;
  }
  // Down
  else if(bit_is_set( ENC_SET_PIN , ENC_UP) && (timer0counter > 10))
  {
   if(timer0counter > 44)   // 24:15/24(PPR/Detents), 44:12/30(PPR/Detents)
     timestamp -= 1;
   else
     timestamp -= ENC_INC_SCALE;

    if(timestamp < ENC_MIN) timestamp = ENC_MIN;
  }

  timer0counter = 0;
  mode = STS_SET;  // Time Set Mode
}

PPR? Detent?

PPR(Pulses Per Revolution) : 한바퀴(360도) 돌릴때 신호(Pulse)가 몇개 나오는지를 의미합니다.
Detent(멈춤쇠): 엔코더 스위치를 돌릴때 딸각 거리는 저항이 느껴집니다, 멈춤쇠라고도 합니다.



Testing & Prototyping

Schematic

Partlist exported from encoder test.sch at 2014-05-13 AM 2:25:15
QtyValueDevicePackagePartsDescription
6104C-EU025-025X050C025-025X050C1, C2, C3, C4, C5, C6CAPACITOR, European symbol
410KR-EU_0204/70204/7R1, R14, R15, R16RESISTOR, European symbol
112 PPR/30 DetentsEC12E_SW9915ENCODERCHANG SHIN Rotary Encoder with switch(Right Angle)
8220RR-EU_0204/70204/7R2, R3, R4, R5, R6, R7, R8, R9RESISTOR, European symbol
42SA1015-PNP-TO92-ECBTO92-ECBT1, T2, T3, T4PNP Transistror
44k7R-EU_0204/70204/7R10, R11, R12, R13RESISTOR, European symbol
1MEGA48VMEGA48/88/168-AUTQFP32-08IC1
1MLS-3461MLS-34614DIGIT-30147SEGMENTFour Digit 0.56" CA Seven-Segment LED Display

Parts



Dimensions




Downloads

No comments:

Post a Comment