ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

Áß¿äÇÔ¼ö    1

µðÁöÅÐ Æ÷Æ®ÀÇ ÀÔ·Â

ÇнÀ¸ñÇ¥

µðÁöÅÐÆ÷Æ®ÀÇ ÀÔ·ÂÀ» ÀÌÇØÇϰí À̸¦ ¼¾¼­ ¹× °èÃø¿¡ Ȱ¿ëÇÑ´Ù.

ÇнÀÁÖÁ¦

½ºÀ§Ä¡ÀÇ ÀԷ¿¡ µû¶ó Led¿¡ ºÒÀÌ µé¾î ¿Â´Ù.

¿¹½À³»¿ë

¾Æ·¡¿Í °°ÀÌ ÀԷº¸µå¸¦ ¸¸µç´Ù.

½Ç½À¹æ¹ý

¸ñ    Â÷

1. ÀÔ·Â º¸µåÀÇ ¿¬°á    1

2. ÇÁ·Î±×·¥ ÀÛ¼º    1

1. ÀÔ·Â º¸µåÀÇ ¿¬°á

º¸µåÀÇ ÀÔ·Â ½ºÀ§Ä¡´Â Æò»ó½ÃÀÀ 5V°¡ ÀÔ·ÂµÇ°í ½ºÀ§Ä¡¸¦ ´©¸£¸é 0V°¡ ÀԷµȴÙ.

Led°¡ ÀÖ´Â º¸µåÀÇ CON1Àº ¼ý³ØÅ͸¦ »ç¿ëÇϰí À§¿¡¼­ º¸¾ÒÀ» ¶§ ´ÙÀ½°ú °°ÀÌ ¿¬°áÇÑ´Ù.

2

4

6

8

10

1

3

5

7

9

µðÁöÅÐ Æ÷Æ®°¡ 0V ÀÏ ¶§ LED°¡ Á¡µîµÈ´Ù. ¾Æ·¡´Â LED µ¿ÀÛ¿¡ µû´Â Ãâ·Â °ªÀ» Ç¥½ÃÇÑ °ÍÀÌ´Ù.

 

»óÀ§ºñÆ®

ÇÏÀ§ºñÆ®

 

½ºÀ§Ä¡

Dp

g

f

E

d

c

b

a

ÀÔ·Â

º¸µåÇÉÀ̸§

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

 

º¸µåÇɹøÈ£

48

16

51

19

47

49

17

52

 

0

5V

5V

5V

5V

5V

5V

5V

0V

0xfe

1

5V

5V

5V

5V

5V

5V

0V

5V

0xfd

2

5V

5V

5V

5V

5V

0V

5V

5V

0xfb

3

5V

5V

5V

5V

0V

5V

5V

5V

0xf7

4

5V

5V

5V

0V

5V

5V

5V

5V

0xef

5

5V

5V

0V

5V

5V

5V

5V

5V

0xdf

6

5V

0V

5V

5V

5V

5V

5V

5V

0xbf

7

0V

5V

5V

5V

5V

5V

5V

5V

0x7f

 

2. ÇÁ·Î±×·¥ ÀÛ¼º

´ÙÀ½Àº ¡°C:/Program Files/National Instruments/NI-DAQ/Examples/DAQmx ANSI C/Digital/Read Values/Read Dig Chan ¡±ÀÇ ÇÁ·Î±×·¥À» ³ªÅ¸³½ °ÍÀÌ´Ù. ÀÌ´Â ¿¡·¯ ÇÔ¼ö¸¦ Á¦°ÅÇÏ¿© °£´ÜÈ÷ ÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ÀÔ·ÂÀº ¹è¿­ data[8]·Î µé¾î¿Â´Ù.

//ANSI C Example program: ReadDigChan.c

#include <stdio.h>

#include <NIDAQmx.h>

 

#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else

 

int main(void)

{

        int32           error=0;

        TaskHandle      taskHandle=0;

        uInt8           data[100];

        char            errBuff[2048]={'\0'};

        int32           i;

        int32           read,bytesPerSamp;

 

        /*********************************************/

        // DAQmx Configure Code

        /*********************************************/

        DAQmxCreateTask("",&taskHandle);

        DAQmxCreateDIChan(taskHandle,"Dev1/port0/line0:7","",DAQmx_Val_ChanForAllLines);

 

        /*********************************************/

        // DAQmx Start Code

        /*********************************************/

        DAQmxStartTask(taskHandle);

 

        /*********************************************/

        // DAQmx Read Code

        /*********************************************/

        DAQmxReadDigitalLines(taskHandle,1,10.0,DAQmx_Val_GroupByChannel,data,100,&read,&bytesPerSamp,NULL);

 

        // assuming 8 channels acquired

        for(i=0;i<8;++i)

                printf("Data acquired, channel %d: 0x%X\n",i,data[i]);

        if( taskHandle!=0 ) {

                /*********************************************/

                // DAQmx Stop Code

                /*********************************************/

                DAQmxStopTask(taskHandle);

                DAQmxClearTask(taskHandle);

        }

        getchar();

               

        return 0;

}

 

 

ÀÌÁ¦ ºñÁê¾ó ÇÁ·Î±×·¥À» ¸¸µé¾î º¸°Ú½À´Ï´Ù.

¾Æ·¡¿Í °°ÀÌ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µì´Ï´Ù.

MeasurmentStudio °¡ ¾øÀÌ ¾Æ·¡ Visual C++ ¸¸À¸·Î´Â ¾Æ·¡¿Í °°ÀÌ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ÀÌ ÈÄ´Â ¶È°°ÀÌ ÇÁ·Î±×·¥ÇÏ¸é µÈ´Ù.

ÀÌÈÄ ³ª¸ÓÁö´Â ±âº»°ªÀ¸·Î ¼±ÅÃÇÏ°í ¡°Finish¡±¸¦ ¼±ÅÃÇÑ´Ù.

 

È­¸é ¿À¸¥ÂÊÀÇ ¡°µµ±¸»óÀÚ¡±ÀÇ ¡°Button¡±À» ¼±ÅÃÇÏ¿© ´ÙÀ̾î·Î±× ¹Ú½º¿¡ ¸¸µç´Ù.

 

¡°¼Ó¼º¡±ÀÇ ¡°¼Ó¼ºÆäÀÌÁö¡±¿¡¼­ ¹öưÀÇ ¸ð¾çÀ» Led ÇüÅ·Π¹Ù²Û´Ù. ÀÌ °úÁ¤À¸·Î 8°³¸¦ ¸¸µç´Ù.

Led0¸¦ ¼±ÅÃÇÑ ÈÄ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´­·¯º­¼ö¸¦ Ãß°¡ÇÑ´Ù. 

Led 8°³¸¦ m_led0~m_led7 °¡Áö ¹Ýº¹ÇÏ¸é ±×¸²°ú °°ÀÌ Å¬·¡½º¿¡ º¯¼ö°¡ Ãß°¡µÇ¾î ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.

´ÙÀ̾î·Î±× ¹Ú½º¸¦ ¼±ÅÃÇÑ ÈÄ¿¡ ¡°¼Ó¼º¡±ÀÇ ¡°¸Þ½ÃÁö¡±¸¦ ¼±ÅÃÇÏ°í ¡°WM_TIMER¡±ÀÇ ¡°OnTimer¡± ÇÔ¼ö¸¦ ¸¸µç´Ù.

ŸÀ̸Ӹ¦ 0.5Ãʸ¶´Ù µ¿ÀÛ½ÃÄѼ­ ÀÐ¾î ¿À°Ú½À´Ï´Ù.

ReadDigChanDlg.h : Çì´õÆÄÀÏ¿¡ ¾Æ·¡¸¦ ¼±¾ðÇÑ´Ù.

// CReadDigChanDlg ´ëÈ­»óÀÚ

class CReadDigChanDlg : public CDialog

{

// »ý¼ºÀÔ´Ï´Ù.

public:

        CReadDigChanDlg(CWnd* pParent = NULL);   // Ç¥ÁØ»ý¼ºÀÚÀÔ´Ï´Ù.

 

// ´ëÈ­»óÀÚµ¥ÀÌÅÍÀÔ´Ï´Ù.

        enum { IDD = IDD_READDIGCHAN_DIALOG };

 

        protected:

        virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù.

 

 

// ±¸ÇöÀÔ´Ï´Ù.

protected:

        HICON m_hIcon;

 

private:

    std::auto_ptr<CNiDAQmxTask> m_task;

    std::auto_ptr<CNiDAQmxDigitalSingleChannelReader> m_reader;

 

        // »ý¼ºµÈ¸Þ½ÃÁö¸ÊÇÔ¼ö

        virtual BOOL OnInitDialog();

        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

        afx_msg void OnPaint();

        afx_msg HCURSOR OnQueryDragIcon();

        DECLARE_MESSAGE_MAP()

 

¾Æ·¡ °ªÀ» Ãʱ⠼±¾ð ÇÑ´Ù.

BOOL CReadDigChanDlg::OnInitDialog()

{

        CDialog::OnInitDialog();

 

        // ½Ã½ºÅÛ¸Þ´º¿¡"Á¤º¸..." ¸Þ´ºÇ׸ñÀ»Ãß°¡ÇÕ´Ï´Ù.

 

        // IDM_ABOUTBOX´Â½Ã½ºÅÛ¸í·É¹üÀ§¿¡ÀÖ¾î¾ßÇÕ´Ï´Ù.

        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

        ASSERT(IDM_ABOUTBOX < 0xF000);

 

        CMenu* pSysMenu = GetSystemMenu(FALSE);

        if (pSysMenu != NULL)

        {

                CString strAboutMenu;

                strAboutMenu.LoadString(IDS_ABOUTBOX);

                if (!strAboutMenu.IsEmpty())

                {

                        pSysMenu->AppendMenu(MF_SEPARATOR);

                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

                }

        }

 

        // ÀÌ´ëÈ­»óÀÚÀǾÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÇÁÖâÀÌ´ëÈ­»óÀÚ°¡¾Æ´Ò°æ¿ì¿¡´Â

        //  ÇÁ·¹ÀÓ¿öÅ©°¡ÀÌÀÛ¾÷À»ÀÚµ¿À¸·Î¼öÇàÇÕ´Ï´Ù.

        SetIcon(m_hIcon, TRUE);                  // Å«¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù.

        SetIcon(m_hIcon, FALSE);         // ÀÛÀº¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù.

 

        // TODO: ¿©±â¿¡Ãß°¡ÃʱâÈ­ÀÛ¾÷À»Ãß°¡ÇÕ´Ï´Ù.

        // Create the task

        m_task = std::auto_ptr<CNiDAQmxTask>(new CNiDAQmxTask());

 

        // Create the digital input channel

        m_task->DIChannels.CreateChannel(

            "Dev1/port0/line0:7",

            "",

            DAQmxOneChannelForAllLines);

        // Create the reader

        m_reader = std::auto_ptr<CNiDAQmxDigitalSingleChannelReader>(new CNiDAQmxDigitalSingleChannelReader(m_task->Stream));

 

        // Enable the timer

        SetTimer(1, 500, NULL);

 

        return TRUE;  // Æ÷Ä¿½º¸¦ÄÁÆ®·Ñ¿¡¼³Á¤ÇÏÁö¾ÊÀ¸¸éTRUE¸¦¹ÝȯÇÕ´Ï´Ù.

}

 

 

OnTimer ÇÔ¼ö¿¡ ¾Æ·¡¸¦ ÇÁ·Î±×·¥ÇÑ´Ù.

void CReadDigChanDlg::OnTimer(UINT_PTR nIDEvent)

{

        // TODO: ¿©±â¿¡¸Þ½ÃÁö󸮱âÄڵ带Ãß°¡¹×/¶Ç´Â±âº»°ªÀ»È£ÃâÇÕ´Ï´Ù.

        CNiBoolVector readData(8);

       

        // Read the digital channel

        m_reader->ReadSingleSampleMultiLine(readData);

 

        // Led·ÎÃâ·ÂÀ»³»º¸³½´Ù.

        // 0V¿¡¼­OnÀ̵ÊÀ¸·Î1Àº0À¸·Î0Àº0À̾ƴѰªÀ¸·Î

        m_led0.Value = readData[0]-1;

       m_led1.Value = readData[1]-1;

       m_led2.Value = readData[2]-1;

       m_led3.Value = readData[3]-1;

       m_led4.Value = readData[4]-1;

       m_led5.Value = readData[5]-1;

       m_led6.Value = readData[6]-1;

       m_led7.Value = readData[7]-1;

 

        CDialog::OnTimer(nIDEvent);

}

 

arrow01cóÀ½

°ú    Á¦

½ÃÀÛ, Á¤Áö ¹öưÀ» ¸¸µé¾î ÀÔ·ÂÀ» ÀÌ¿¡ µû¶ó µ¿ÀÛÇϵµ·Ï ÇÁ·Î±×·¥ ÇϽÿÀ.