Array
(
)

Como habilitar display digital no c

Rosiley
   - 06 nov 2007

Bom dia, estou escrevendo um programa que deverá ler um sinal analógico e mostrar o valor em um display digital, baixei o componente no site tmssoftware e instalei no programa mais não consigo fazer com que ele leia a informação da placa conversora AD.
Tenho mais dúvidas, mais vai ficar pra mais tarde.


Massuda
   - 06 nov 2007

Explique melhor. Que componente que você baixou? Como é seu hardware?


Rosiley
   - 06 nov 2007

São vários componentes, estou utilizando o vrmeter,vrdigit,vrlcd e vrscope todos baixados do site www.tmssoftware.com.
O software terá que ler uma entrada analogica e mostrar na tela do computador a tensao de entrada, estou utilizando um conversor AD pra enviar estas informações. Aqui vai parte do código:

#include <vcl.h>
include <stdio.h>
pragma hdrstop
include ´UnitPrincipal.h´
include ´FTD2xx.h´
include ´UnitSobre.h´
//------------------------------------------------------------------------------
pragma package(smart_init)
pragma link ´VrDigit´
pragma link ´VrLcd´
pragma link ´VrMeter´
pragma link ´VrScope´
pragma warn -aus
pragma resource ´*.dfm´
define MAX_BUF 128
TMERS *MERS;
FT_HANDLE ftHandle;
FT_STATUS ftStatus;
//------------------------------------------------------------------------------
const unsigned short LEN_BUFFER = 100L; //Tamanho do buffer de dados.
char BufferDados[LEN_BUFFER]; //Buffer de dados.
String StrComandos=´000´; //String comando.
DWORD BytesEscritos=0; //Para FT_Write() armazenar a quantidade de dados gravados.
DWORD BytesLidos=0;
char ID_STR[50]; //String de identificação do comando.
BYTE NUM_BYTE_0 = 0;
BYTE NUM_BYTE_1 = 0;
BYTE CMD_CR = ´\n´; //Retorno de carro.
bool GLB_Conectado = false; //Controle loop.
unsigned short int ByteRecebido=0; //Armazena o valor recebido.
DWORD TotalLidos;
char RxBuffer[MAX_BUF]; //Buffer para armazenar os dados lidos do dispositivo.
char RxBuffer2[MAX_BUF];
BYTE FLAG_Eventos;
void SEPARA_MSB_LSB(unsigned short int Num, unsigned char &msb, unsigned char &lsb);
//Variáveis globais da API do Windows para controle da Porta Serial.
//------------------------------------------------------------------------------

BYTE NUM_ByteOPT = 0;
void SEPARA_MSB_LSB(unsigned short int Num, unsigned char &msb, unsigned char &lsb);

//------------------------------------------------------------------------------
//Usada para apagar um bit numa variável unsigned char.
//Use 0 para indicar BIT0 e 7 para indicar BIT7.
//------------------------------------------------------------------------------
unsigned char DesligaBit(unsigned char valor, unsigned char Bit)
{
unsigned char BitMask=1; //00000001.
BitMask = (unsigned char)BitMask << Bit; //desloca bits para a esquerda.
if( (valor & BitMask) == BitMask ) //se bit ligado.
return(valor ^ BitMask); //desliga bit.
else
return(valor); //retorna sem modificar.
}
//------------------------------------------------------------------------------
//Usada para setar um bit numa variável unsigned char.
//Use 0 para indicar BIT0 e 7 para indicar BIT7.
//------------------------------------------------------------------------------
unsigned char LigaBit(unsigned char valor, unsigned char Bit)
{
unsigned char BitMask=1; //00000001.
BitMask = (unsigned char)BitMask << Bit; //desloca bits para a esquerda.
if( (valor & BitMask) == 0 ) //se bit de desligado.
return(valor ^ BitMask); //liga bit.
else
return(valor); //retorna sem modificar.
}
//------------------------------------------------------------------------------
//Usada para verificar se um bit numa variável unsigned char está ligado ou não.
//Use 0 para indicar BIT0 e 7 para indicar BIT7.
//------------------------------------------------------------------------------
unsigned char TestaBit(unsigned char valor, unsigned char Bit)
{
unsigned char BitMask = 1; //00000001.
BitMask = (unsigned char)BitMask << Bit; //desloca bits para a esquerda.
if( (valor & BitMask) == BitMask ) //se bit ligado.
return 1;
else
return 0;
}
//------------------------------------------------------------------------------
void SEPARA_MSB_LSB(unsigned short int Num, unsigned char &msb, unsigned char &lsb)
{
typedef union nome
{
unsigned short int valor;
unsigned char Numbyte[2];
}SeparaBytes;

SeparaBytes Dado;
Dado.valor = Num;
lsb = Dado.Numbyte[0];
msb = Dado.Numbyte[1];
}


//------------------------------------------------------------------------------

{
static unsigned int canal=0;
int ADC;
String NomeCanal;
DWORD EventDWord;
DWORD TxBytes=0; //Número de caracteres transmitidos.
DWORD RxBytes=0; //Número de caracteres recebidos.

//Para testar esta função é preciso enviar dados para RDX do FT232BM.
//Verificar se chegou caracteres.
FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord);
if(RxBytes > MAX_BUF)
RxBytes = MAX_BUF;

if(RxBytes > 0) //Se houver dados para leitura.
{
ftStatus = FT_Read(ftHandle,BufferDados,RxBytes,&BytesLidos);
if(ftStatus == FT_OK) //Se não houver erro em FT_Read().
{
BufferDados[BytesLidos] = NULL;
BufferDados[BytesLidos-2] = ´\0´; //Menos <CR><LF> ou (\r\n).
StrComandos = BufferDados;
NomeCanal = StrComandos.SubString(2,3);
try
{
if( NomeCanal == ´CH0´)
{
ADC = StrToInt(StrComandos.SubString(5,3).c_str());
}
}catch(...) //Se houver erro na conversão StrToInt().
{
}
}
}else{ //Requisitas leitura de canais à placa.
if( canal == 0 )
{
strcpy(ID_STR,´#CH0´);
FT_Write(ftHandle,ID_STR,4,&BytesEscritos);
FT_Write(ftHandle,&CMD_CR,1,&BytesEscritos);
FT_Write(ftHandle,&CMD_CR,1,&BytesEscritos);
}
canal++; //Incrementa a leitura do próximo canal ADC.
if(canal > 0)
canal=0; //Posiciona no primeiro canal.
}
static unsigned int Request_CMD = 0;
static bool ErroConverte = false;
String NomeID;
//Para testar esta função é preciso enviar dados para RDX do FT232BM.
//Verificar se chegou caracteres.
FT_GetStatus(ftHandle,&RxBytes,&TxBytes,&EventDWord);
if(RxBytes > MAX_BUF)
RxBytes = MAX_BUF;

if(RxBytes > 0) //Há dados a serem lidos?
{
ftStatus = FT_Read(ftHandle,BufferDados,RxBytes,&BytesLidos);
if(ftStatus == FT_OK)
{
BufferDados[BytesLidos] = NULL;
BufferDados[BytesLidos-2] = ´\0´;
StrComandos = BufferDados;
NomeID = StrComandos.SubString(2,3);
}
Request_CMD++; //Próxima requisição.
if(Request_CMD > 1)
Request_CMD=0;
}
}
//------------------------------------------------------------------------------