COMI_SD502_SetCounter


SYNOPSYS

void COMI_SD502_SetCounter (HANDLE hDevice, int ch, int nMode, int nClkSource)

DESCRIPTION

  • 이 함수는 지정한 카운터 채널을 셋팅합니다.

PARAMETER

▶ hDevice : 디바이스 핸들값입니다. 이 값은 COMI_LoadDevice() 함수에 의해 얻어진 값이어야 합니다.

▶ ch : 카운터 채널 번호. 이 값은 0~9 사이의 값이어야 합니다.

▶ nMode : 카운터 모드를 지정합니다. 이 값은 0 ~ 2 사이의 값이어야 하며 각 모드에 대한 설명은 아래 이미지를 참조바랍니다.

../../../_images/SD502-1.jpg ../../../_images/SD502-2.jpg

▶ nClkSource : 소스클럭(Source clock) 을 지정합니다. 소스 클럭은 외부에서 입력하거나 내부의 클럭을 사용할 수 있습니다. nClkSource 에 지정할 수 있는 값은 -1 또는 0 ~ 15 사이의 값입니다. 각 값의 의미는 다음과 같습니다.

../../../_images/SD502-3.jpg

EXAMPLE

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*********************************************************************
/* [COMIDAS sample program by COMIZOA Inc., Ltd]
/*
/* Subject  : SD502 Counter 함수 사용 예
/* Contents : 이 프로그램은 사용자가 지정하는 Channel 과 mode 그리고
/*            Source clock으로 Counter 를 셋팅 한 후 지정한 채널의 카운트값을
/*            읽어서 화면에 표시합니다.
/* - Reamkrs :
/*       1. 이 예제는 COMI-SD502 보드에만 적용가능합니다.
/*********************************************************************/

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Comidas.h"

#define DEV_ID COMI_SD502

void main(void)
{
  HANDLE hDevice;
  int channel, mode, clk_src;
  ULONG now_count, old_count;
  double clk_freq, freq;
  char resp;
  // Load DLL //
  if(!COMI_LoadDll()){
    printf("Comidas.dll load failure");
    printf("아무키나 누르면 프로그램이 종료됩니다.. \n");
    _getch();
    exit(0);
  }
  // Load Device //
  hDevice = COMI_LoadDevice(DEV_ID, 0);
  if(hDevice == INVALID_HANDLE_VALUE){
    printf("Can't load specified device!");
    printf("아무키나 누르면 프로그램이 종료됩니다.. \n");
    _getch();
    COMI_UnloadDll();
    exit(0);
  }
  // Get channel Number //
  printf("Input Channel Number :");
  scanf("%d", &channel);
  // Get counter mode //
  printf("Select Counter Mode (0 or 1) : ");
  scanf("%d", &mode);
  // Get source clock(Only if counter mode is 0) //
  if(mode == 0){
    printf("Select source Clock (-1 ~ 15) : ");
    scanf("%d", &clk_src);
  }
  //Set counter channel //
  COMI_SD502_SetCounter(hDevice, channel, mode, clk_src);
  COMI_SD502_Clear(hDevice, channel);
  while(1)
  {
    now_count = COMI_SD502_ReadNowCount(hDevice, channel); // Read Now count
    old_count = COMI_SD502_ReadOldCount(hDevice, channel); // Read Old count

    printf("\n");
    printf("Now Count = %lu\n", now_count);
    printf("Old Count = %lu\n", old_count);
    if(mode == 0 && clk_src >= 0){ // Display frequence of Gate signal
      clk_freq = COMI_SD502_GetClkFreq(clk_src);
      if(old_count == 0)
        freq = 0.;
      else
        freq = 0.5 * clk_freq/old_count;
      printf("Freq (Hz) = %.1f\n", freq);
    }
    printf("\nPress ESC key to exit for press any other key to continue\n");
    resp = _getch();
    if(resp == 27); // ESC Key가 눌리면 종료
      break;
  }

  COMI_UnloadDevice(hDevice);
  COMI_UnloadDll();
}