2016-09-03 3 views
0

내 무지 때문에 죄송하지만 FTDI 칩 리눅스 소프트웨어 개발에 매우 ​​익숙합니다. 4 포트 출력 (릴레이) 및 4 포트 광 절연 입력 장치로 프로그래밍 된 FT245RL 칩 기반 모듈이 있습니다. C의 인터넷 프로그램에서 출력 D0 ~ D3에 연결된 릴레이를 켜거나 끄는 것을 발견했습니다. 컴파일 후 제대로 작동합니다. 이 작업 프로그램의 초안 아래 :FT245RL 핀의 상태 읽기

/* switch4.c 
* # gcc -o switch4 switch4.c -L. -lftd2xx -Wl,-rpath,/usr/local/lib 
* Usage 
* # switch4 [0-15], for example # switch4 1 
* */ 
#include <stdio.h> 
#include <stdlib.h> 
#include "./ftd2xx.h" 

int main(int argc, char *argv[]) 
{ 
    FT_STATUS ftStatus; 
    FT_HANDLE ftHandle0; 
    int parametr; 
    LPVOID pkod; 
    DWORD nBufferSize = 0x0001; 
    DWORD dwBytesWritten; 

      if(argc > 1) { 
        sscanf(argv[1], "%d", ¶metr); 
      } 
      else { 
        parametr = 0; 
      } 

    FT_SetVIDPID(0x5555,0x0001); // id from lsusb 
    FT_Open(0,&ftHandle0); 
    FT_SetBitMode(ftHandle0,15,1); 

    pkod=&parametr; 

    ftStatus = FT_Write(ftHandle0,pkod,nBufferSize,&dwBytesWritten); 
    ftStatus = FT_Close(ftHandle0); 
} 

내 질문에 대한 답변입니다. 같은 프로그램, 입력으로 프로그래밍 된 D4 ~ D7 핀의 상태를 어떻게 읽을 수 있습니까? 출력 핀 (또는 모든 입력/출력 핀)의 상태 (0 또는 1)를 나타내는 숫자를 표준 출력하는 "printf"를 의미합니다. 아무도 초보자를 도와 줄 수 있습니까?

UPDATE-1

// # gcc -o read5 read5.c -L. -lftd2xx -Wl,-rpath,/usr/local/lib 

#include <stdio.h> 
#include <stdlib.h> 
#include "./ftd2xx.h" 

int main(int argc, char *argv[]) 
{ 
    FT_STATUS ftStatus; 
    FT_HANDLE ftHandle0; 
    UCHAR BitMode; 

     FT_SetVIDPID(0x5555,0x0001); // id from lsusb 
     ftStatus = FT_Open(0,&ftHandle0); 
     if(ftStatus != FT_OK) { 
     printf("FT_Open failed"); 
     return; 
     } 
     FT_SetBitMode(ftHandle0,15,1); 

     ftStatus = FT_GetBitMode(ftHandle0, &BitMode); 
     if (ftStatus == FT_OK) { 
     printf("BitMode contains - %d",BitMode); 
     } 
     else { 
     printf("FT_GetBitMode FAILED!"); 
     } 

     ftStatus = FT_Close(ftHandle0); 
} 

FT_GetBitMode

내 프로그램입니다하지만 반환 "FT_GetBitMode 실패!" 대신 BitMode 값

답변

0

FT_GetBitMode는 핀의 순간 값을 반환합니다. 1 바이트는 이되어, 현재의 핀의 값을 포함 해 돌려 주어집니다. 입력은 모두 입력이며, 출력은 입니다.

Source.

+0

그래서 내가 문서의 약자로 FT_GetBitMode를 사용하려고합니다. 하지만 "FT_GetBitMode FAILED!"가 반환됩니다. 대신 BitMode의 값. 첫 번째 게시물에 UPDATE-1 내 프로그램 소스. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? – mackowiakp

+0

FT_GetBitMode() 호출에서 반환되는 ftStatus 코드는 무엇입니까? 코드에서 거기에 뭔가 잘못하고있는 것처럼 보이지 않습니다. 당신은 그들에게 이메일을 보낼 수 있습니다, 나는 그들이 당신을 도울 것이라고 확신합니다 : [email protected] – spatial

+0

흠, 이상합니다. ftStatus 코드는 FT_GetBitMode() 호출에서 숫자 4로 반환됩니다. 그러나 Windows 용 테스트 프로그램이 있기 때문에 하드웨어 오류가 아니며 제대로 작동합니다. – mackowiakp

0

마지막으로 잘못된 점을 발견했습니다. 잘못된 버전의 ftdi 라이브러리를 사용했습니다. x86_64의 플랫폼 전용 올바른 버전은 여기에 있습니다 :

Link to FTDI library