Últimos assuntos
Tópicos semelhantes
Anuncios
Nenhum anúncio
programação do pic com comunicação TTL
2 participantes
Página 1 de 1
programação do pic com comunicação TTL
Estou num projeto, que tenho que fazer o controle de um motor (sentido direita e sentido esquerda), o pic que tomara de acordo com que o sensor de codigo de barras ler, a sida do sensor é TTL, ela pelo manual pode ser diretamente ligada ao Pic , não necessitando de um conversor, mais ja pesquisei muito aqui na net, em tudo livros, fala muito pouco em programação de PIc com Saida de sensores TTL.
Sobre o codigo de barras usarei os mais simples, mais preciso uma comparação entre eles, para poder dicidir qual sentido o motor gira, direita ou esquerda.
Última edição por braztiago em Qui 06 Out 2011, 15:38, editado 1 vez(es) (Motivo da edição : Projeto TCC)
braztiago- NOVATO
- TEMPO DE EXPERIÊNCIA : Nenhuma
Sexo :
Número de Mensagens : 5
Idade : 34
Cidade/Estado: : Pindamonhangaba/São Paulo
Data de inscrição : 06/10/2011
Re: programação do pic com comunicação TTL
Olá amigo,
seria motor de passo? unipolar ou bipolar? qual o pic que você está usando?
aqui um exemplo de como usar a lógica para mudar de direção, espero que ajude.
![programação do pic com comunicação TTL Motorn](https://2img.net/r/ihimizer/img197/3769/motorn.png)
seria motor de passo? unipolar ou bipolar? qual o pic que você está usando?
aqui um exemplo de como usar a lógica para mudar de direção, espero que ajude.
![programação do pic com comunicação TTL Motorn](https://2img.net/r/ihimizer/img197/3769/motorn.png)
Miranda_2- Participante
- TEMPO DE EXPERIÊNCIA : 10
Sexo :
Número de Mensagens : 38
Idade : 49
Cidade/Estado: : Porto Alegre/RS
Data de inscrição : 28/09/2011
Re: programação do pic com comunicação TTL
Amigo o motor é bipolar, mais assim o circuito ja tenho pronto, meu problema ta sendo fazer a cmunicação do sensor de codigo de barras com o pic 16f628A, o sensor possui saida TTl, preciso estar fazendo a programação, para o pic fazewr a tomada de decisão para roda o motor para a direita ou esquerda.
Entendeu?
Desde ja muito Obrigado.
Entendeu?
Desde ja muito Obrigado.
braztiago- NOVATO
- TEMPO DE EXPERIÊNCIA : Nenhuma
Sexo :
Número de Mensagens : 5
Idade : 34
Cidade/Estado: : Pindamonhangaba/São Paulo
Data de inscrição : 06/10/2011
Re: programação do pic com comunicação TTL
Não conheço esse sensor, tem algum datasheet dele?
Se for fazer em C ....
Abraço.
#include <16F628A.h>
//
#FUSES WDT //No Watch Dog Timer
#FUSES XT //Internal RC Osc, no CLKOUT
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming
#FUSES NOCPD //No EE protection
//
//
#use delay(clock=4000000,RESTART_WDT)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,RESTART_WDT, STREAM=PC)
#use fast_io(a)
#use fast_io(b)
//
//--------------------------------------------------
//definições de portas I/O
//--------------------------------------------------
#byte porta_a = 0x05 //define um rótulo para o portA
#byte porta_b = 0x06 //define um rótulo para o portB
//
#bit botao_dir = porta_a.4 // 1 entrada
#bit botao_vel = porta_a.5 // 1 entrada
#bit lcd_d4 = porta_a.3 // 0 saída, lcd pino 11
#bit lcd_d5 = porta_a.2 // 0 saída, lcd pino 12
#bit lcd_d6 = porta_a.1 // 0 saída, lcd pino 13
#bit lcd_d7 = porta_a.0 // 0 saída, lcd pino 14
//
#bit lcd_EN = porta_b.3 // 0 saída, lcd pino 6
#bit lcd_RS = porta_b.0 // 0 saída, lcd pino 4
//
#define trisa 0b00110000 //0x30 0=saída, 1 entrada
#define trisb 0b00000010 //0x02 0=saída, 1 entrada
//
//incluir o drive lcd depois das definições do port
#include <lcd.c>
//----------------------------------------------------
//definição dos comandos enviados pelo computador
//----------------------------------------------------
#define CMD_TEMPO 0x7A
#define CMD_DIRECAO 0x7B
#define CMD_MOVE 0x7C
#define CMD_SEQ 0x7D
//
#define PACKET_SOF 0x01 //cabeçalho do pacote
#define tamanho_buffer 0x1E //30 bytes
#define VERIFICA 0X00 //
#define ADICIONA 0X01 //
#define COMANDO_OK 0xFA //comando com sucesso
#define ERRO_LRC 0x08 //reporta erro de lrc
//--------------------------------------------------
//declaração das funções utilizadas
//--------------------------------------------------
static short lrc( int *buffer, int size, int modo );
void responde( int len );
void erroLRC(void);
void comando_efetuado( int cmd );
void altera_sequencia( void );
int timed_getc();
//
byte buffer[tamanho_buffer];//buffer de recepção e transm.
//
int contador; //contador de interrupções do timer0
int velocidade; //valor * 1ms, máx. 255ms
int indice; //indice se sequência de passos
int direcao; //0 esquerda 1 direita
int flag; //opções internas
int i;
#bit flag_movimenta = flag.0 //motor parado/em movimento
int sequencia[] = {0b10000000,
0b01000000,
0b00100000,
0b00010000 };
enum opcao{ ESQUERDA, DIREITA }; //0=esquerda, 1=direita
//
#int_timer0
void timer0_isr(void){
//pode movimentar o motor?
if( flag_movimenta ){
contador ++; //incrementa o contador de interrupções
//núm. de interrupções = velocidade desejada?
if( contador >= velocidade ){
contador = 0; //sim, zera o contador
//aumenta ou diminui o indice de acordo com a direção
if( (opcao)direcao != DIREITA ) indice ++;
else indice --;
//não importa o valor do indice pois sempre fará
//um AND com 3 ex: 201 0b11001001 & 3 = 01
//sempre terei valores entre 00(0) e 11(3)
//após localizar o elemento do vetor seqüência faz
//AND com F0 selecionando somente o byte msb
//ex: sequencia[2] & 0xF0 = 0010
porta_b = sequencia[ indice & 0x03 ] & 0xF0;
};
};
}
//----------------------------------------------------
// LRC longitudinal redundance ciclical
//----------------------------------------------------
static short lrc( int *buffer, int size, int modo ){
int x;
int lsb = 0;
int msb = 0;
restart_wdt();
//para cálculo desconsidera os dois últimos bytes
for( x = 0; x <= (size - 2) ; x++ ){
lsb ^= buffer[ x ]; // byte lsb XOR buffer[x]
}; //
msb = lsb ^ 0xFF; // byte msb XOR lsb
if( modo != VERIFICA){ // adiciona
buffer[size -1] = lsb; // byte lsb
buffer[size ] = msb; // byte msb
}
else //checagem
if( buffer[size -1] == lsb &&
buffer[size ] == msb ) return TRUE;
else return FALSE;
}
//
//----------------------------------------------------
// retorna o pacote para o PC
//----------------------------------------------------
void responde( int len ){
int j;
lrc( buffer, len, ADICIONA ); //adiciona o LRC
for( j = 0; j < len; j++ ){
printf("%X", buffer[ j ], PC);
};
}
//----------------------------------------------------
//responde ao PC informando ocorrencia de erro
//----------------------------------------------------
void erroLRC(void){
restart_wdt();
buffer[ 0 ] = PACKET_SOF; //cabeçalho
buffer[ 1 ] = 6; //tamanho
buffer[ 2 ] = ERRO_LRC; //ocorreu erro
buffer[ 3 ] = 0; //flag
responde( buffer[ 6 ] ); //envia ao PC
}
//--------------------------------------------------
//devolve pacote ao PC indicando recebimento do comando
//--------------------------------------------------
void comando_efetuado( int cmd ){
restart_wdt();
buffer[ 0 ] = PACKET_SOF; //cabeçalho
buffer[ 1 ] = 6; //tamanho
buffer[ 2 ] = cmd; //devolve o comando
buffer[ 3 ] = COMANDO_OK; //flag comando entendido
responde( buffer[ 6 ] ); //envia ao PC
}
//--------------------------------------------------
//recebe nova seqüência de passos do computador e
//preenche o vetor para sequenciar
//--------------------------------------------------
void altera_sequencia( void ){
sequencia[0] = buffer[3];
sequencia[1] = buffer[4];
sequencia[2] = buffer[5];
sequencia[3] = buffer[6];
}
//--------------------------------------------------
//aguarda um tempo limite para recepção de caractere
//no UART do pic. aguarda 100 ms
//--------------------------------------------------
int timed_getc(){
long timeout; //variável para incremento de ciclo de máq.
int retorno; //uso temporário, auxíliar
timeout=0; //valor inicial
//kbhit() retorna true se detectar start bit no uart
//aguarda 100.000 ciclos de máquina
while( ! kbhit() && ( ++timeout < 100000 ))
//aguarda 10 uS para recepção completa do caracter
delay_us(10);
// testa novamente e captura o caratere e retorna
if( kbhit() ) retorno = getc();
else retorno = 0;
//
return( retorno );
}
//--------------------------------------------------
//coloca os dados no LCD
//--------------------------------------------------
void informa(void){
lcd_pos(1,0);
printf(LCD, "Direcao: %U", (opcao)direcao );
lcd_pos(2,0);
printf(LCD, "Veloc.(ms): %3U", velocidade);
}
//--------------------------------------------------
// função principal
//--------------------------------------------------
void main() {
//resolução = 1/clock * (256 * RTCC_DIV)
//0,000.001*(256*4) = 1ms.
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); //timer0
//
setup_timer_1(T1_DISABLED); //timer 1 desabilitado
setup_timer_2(T2_DISABLED,0,1); //timer 2 desabilitado
setup_comparator(NC_NC_NC_NC); //desabilita o comparador
setup_vref(FALSE); //desabilita tensão ref.
//
enable_interrupts(int_timer0); //habilita interrupção
enable_interrupts(GLOBAL);
//
//
set_tris_a( trisa ); //ajusta a direção do portA
set_tris_b( trisb ); //ajusta a direção do portB
//
porta_a = 0; //limpa todos os bits do portA
porta_b = 0; //limpa todos os bits do portB
//
delay_ms(15); //aguarda 15ms para estabilização
lcd_inicializa(); //inicializa o LCD
//
//
contador = 0; //contador de interrupções de TMR0
velocidade = 100; //tempo em ms = (contador * 1ms)
direcao = 0;
indice = 0;
flag_movimenta = 1;
//
//
while( true ){ //loop contínuo
// testa os botões
if( ! botao_dir ){
direcao ++; //incrementa a direção
direcao &= 0x03; //seleciona os valores válidos
};
if( ! botao_vel ) velocidade += 10;
//zera o buffer[0]
buffer[0] = 0;
buffer[0] = timed_getc(); //recebe caractere ou zero
//se caractere inicial for início de cabeçalho, então
if( buffer[0] == PACKET_SOF ){
// formato do pacote de dados
// +------------------------------+
// | SOF | len | cmd | DATA | LRC |
// +-----+-----+-----+-----+------+
// | 1 | 1 | 1 | n | 2 | bytes
// +------------------------------+
// | 0 | 1 | 2 | 3.. | | buffer
// +------------------------------+
//recebe o próximo byte que informa a quantidade de
//bytes do pacote de dados
buffer[1] = fgetc(PC);
//-1 é a correção buffer que começa em 0
for( i = 2; i <= buffer[1]-1; i++ ){
//recebe o restante do pacote
buffer[ i ] = fgetc(PC);
};
//se verificação de LRC for válida. chaveia o comando
if( lrc( buffer, buffer[1]-1, VERIFICA)){
switch( buffer[ 2 ] ){
case CMD_TEMPO : velocidade = buffer[ 3 ] ;break;
case CMD_DIRECAO : direcao = buffer[ 3 ] ;break;
case CMD_MOVE : flag_movimenta = buffer[ 3 ] ;break;
case CMD_SEQ : altera_sequencia(); break;
};
//entendi o comando, sinalizo com um ok
comando_efetuado( buffer[2] );
}
//recebí comando com erro, respondo informando o erro
else erroLRC();
};
};
}
Se for fazer em C ....
Abraço.
#include <16F628A.h>
//
#FUSES WDT //No Watch Dog Timer
#FUSES XT //Internal RC Osc, no CLKOUT
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming
#FUSES NOCPD //No EE protection
//
//
#use delay(clock=4000000,RESTART_WDT)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,RESTART_WDT, STREAM=PC)
#use fast_io(a)
#use fast_io(b)
//
//--------------------------------------------------
//definições de portas I/O
//--------------------------------------------------
#byte porta_a = 0x05 //define um rótulo para o portA
#byte porta_b = 0x06 //define um rótulo para o portB
//
#bit botao_dir = porta_a.4 // 1 entrada
#bit botao_vel = porta_a.5 // 1 entrada
#bit lcd_d4 = porta_a.3 // 0 saída, lcd pino 11
#bit lcd_d5 = porta_a.2 // 0 saída, lcd pino 12
#bit lcd_d6 = porta_a.1 // 0 saída, lcd pino 13
#bit lcd_d7 = porta_a.0 // 0 saída, lcd pino 14
//
#bit lcd_EN = porta_b.3 // 0 saída, lcd pino 6
#bit lcd_RS = porta_b.0 // 0 saída, lcd pino 4
//
#define trisa 0b00110000 //0x30 0=saída, 1 entrada
#define trisb 0b00000010 //0x02 0=saída, 1 entrada
//
//incluir o drive lcd depois das definições do port
#include <lcd.c>
//----------------------------------------------------
//definição dos comandos enviados pelo computador
//----------------------------------------------------
#define CMD_TEMPO 0x7A
#define CMD_DIRECAO 0x7B
#define CMD_MOVE 0x7C
#define CMD_SEQ 0x7D
//
#define PACKET_SOF 0x01 //cabeçalho do pacote
#define tamanho_buffer 0x1E //30 bytes
#define VERIFICA 0X00 //
#define ADICIONA 0X01 //
#define COMANDO_OK 0xFA //comando com sucesso
#define ERRO_LRC 0x08 //reporta erro de lrc
//--------------------------------------------------
//declaração das funções utilizadas
//--------------------------------------------------
static short lrc( int *buffer, int size, int modo );
void responde( int len );
void erroLRC(void);
void comando_efetuado( int cmd );
void altera_sequencia( void );
int timed_getc();
//
byte buffer[tamanho_buffer];//buffer de recepção e transm.
//
int contador; //contador de interrupções do timer0
int velocidade; //valor * 1ms, máx. 255ms
int indice; //indice se sequência de passos
int direcao; //0 esquerda 1 direita
int flag; //opções internas
int i;
#bit flag_movimenta = flag.0 //motor parado/em movimento
int sequencia[] = {0b10000000,
0b01000000,
0b00100000,
0b00010000 };
enum opcao{ ESQUERDA, DIREITA }; //0=esquerda, 1=direita
//
#int_timer0
void timer0_isr(void){
//pode movimentar o motor?
if( flag_movimenta ){
contador ++; //incrementa o contador de interrupções
//núm. de interrupções = velocidade desejada?
if( contador >= velocidade ){
contador = 0; //sim, zera o contador
//aumenta ou diminui o indice de acordo com a direção
if( (opcao)direcao != DIREITA ) indice ++;
else indice --;
//não importa o valor do indice pois sempre fará
//um AND com 3 ex: 201 0b11001001 & 3 = 01
//sempre terei valores entre 00(0) e 11(3)
//após localizar o elemento do vetor seqüência faz
//AND com F0 selecionando somente o byte msb
//ex: sequencia[2] & 0xF0 = 0010
porta_b = sequencia[ indice & 0x03 ] & 0xF0;
};
};
}
//----------------------------------------------------
// LRC longitudinal redundance ciclical
//----------------------------------------------------
static short lrc( int *buffer, int size, int modo ){
int x;
int lsb = 0;
int msb = 0;
restart_wdt();
//para cálculo desconsidera os dois últimos bytes
for( x = 0; x <= (size - 2) ; x++ ){
lsb ^= buffer[ x ]; // byte lsb XOR buffer[x]
}; //
msb = lsb ^ 0xFF; // byte msb XOR lsb
if( modo != VERIFICA){ // adiciona
buffer[size -1] = lsb; // byte lsb
buffer[size ] = msb; // byte msb
}
else //checagem
if( buffer[size -1] == lsb &&
buffer[size ] == msb ) return TRUE;
else return FALSE;
}
//
//----------------------------------------------------
// retorna o pacote para o PC
//----------------------------------------------------
void responde( int len ){
int j;
lrc( buffer, len, ADICIONA ); //adiciona o LRC
for( j = 0; j < len; j++ ){
printf("%X", buffer[ j ], PC);
};
}
//----------------------------------------------------
//responde ao PC informando ocorrencia de erro
//----------------------------------------------------
void erroLRC(void){
restart_wdt();
buffer[ 0 ] = PACKET_SOF; //cabeçalho
buffer[ 1 ] = 6; //tamanho
buffer[ 2 ] = ERRO_LRC; //ocorreu erro
buffer[ 3 ] = 0; //flag
responde( buffer[ 6 ] ); //envia ao PC
}
//--------------------------------------------------
//devolve pacote ao PC indicando recebimento do comando
//--------------------------------------------------
void comando_efetuado( int cmd ){
restart_wdt();
buffer[ 0 ] = PACKET_SOF; //cabeçalho
buffer[ 1 ] = 6; //tamanho
buffer[ 2 ] = cmd; //devolve o comando
buffer[ 3 ] = COMANDO_OK; //flag comando entendido
responde( buffer[ 6 ] ); //envia ao PC
}
//--------------------------------------------------
//recebe nova seqüência de passos do computador e
//preenche o vetor para sequenciar
//--------------------------------------------------
void altera_sequencia( void ){
sequencia[0] = buffer[3];
sequencia[1] = buffer[4];
sequencia[2] = buffer[5];
sequencia[3] = buffer[6];
}
//--------------------------------------------------
//aguarda um tempo limite para recepção de caractere
//no UART do pic. aguarda 100 ms
//--------------------------------------------------
int timed_getc(){
long timeout; //variável para incremento de ciclo de máq.
int retorno; //uso temporário, auxíliar
timeout=0; //valor inicial
//kbhit() retorna true se detectar start bit no uart
//aguarda 100.000 ciclos de máquina
while( ! kbhit() && ( ++timeout < 100000 ))
//aguarda 10 uS para recepção completa do caracter
delay_us(10);
// testa novamente e captura o caratere e retorna
if( kbhit() ) retorno = getc();
else retorno = 0;
//
return( retorno );
}
//--------------------------------------------------
//coloca os dados no LCD
//--------------------------------------------------
void informa(void){
lcd_pos(1,0);
printf(LCD, "Direcao: %U", (opcao)direcao );
lcd_pos(2,0);
printf(LCD, "Veloc.(ms): %3U", velocidade);
}
//--------------------------------------------------
// função principal
//--------------------------------------------------
void main() {
//resolução = 1/clock * (256 * RTCC_DIV)
//0,000.001*(256*4) = 1ms.
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); //timer0
//
setup_timer_1(T1_DISABLED); //timer 1 desabilitado
setup_timer_2(T2_DISABLED,0,1); //timer 2 desabilitado
setup_comparator(NC_NC_NC_NC); //desabilita o comparador
setup_vref(FALSE); //desabilita tensão ref.
//
enable_interrupts(int_timer0); //habilita interrupção
enable_interrupts(GLOBAL);
//
//
set_tris_a( trisa ); //ajusta a direção do portA
set_tris_b( trisb ); //ajusta a direção do portB
//
porta_a = 0; //limpa todos os bits do portA
porta_b = 0; //limpa todos os bits do portB
//
delay_ms(15); //aguarda 15ms para estabilização
lcd_inicializa(); //inicializa o LCD
//
//
contador = 0; //contador de interrupções de TMR0
velocidade = 100; //tempo em ms = (contador * 1ms)
direcao = 0;
indice = 0;
flag_movimenta = 1;
//
//
while( true ){ //loop contínuo
// testa os botões
if( ! botao_dir ){
direcao ++; //incrementa a direção
direcao &= 0x03; //seleciona os valores válidos
};
if( ! botao_vel ) velocidade += 10;
//zera o buffer[0]
buffer[0] = 0;
buffer[0] = timed_getc(); //recebe caractere ou zero
//se caractere inicial for início de cabeçalho, então
if( buffer[0] == PACKET_SOF ){
// formato do pacote de dados
// +------------------------------+
// | SOF | len | cmd | DATA | LRC |
// +-----+-----+-----+-----+------+
// | 1 | 1 | 1 | n | 2 | bytes
// +------------------------------+
// | 0 | 1 | 2 | 3.. | | buffer
// +------------------------------+
//recebe o próximo byte que informa a quantidade de
//bytes do pacote de dados
buffer[1] = fgetc(PC);
//-1 é a correção buffer que começa em 0
for( i = 2; i <= buffer[1]-1; i++ ){
//recebe o restante do pacote
buffer[ i ] = fgetc(PC);
};
//se verificação de LRC for válida. chaveia o comando
if( lrc( buffer, buffer[1]-1, VERIFICA)){
switch( buffer[ 2 ] ){
case CMD_TEMPO : velocidade = buffer[ 3 ] ;break;
case CMD_DIRECAO : direcao = buffer[ 3 ] ;break;
case CMD_MOVE : flag_movimenta = buffer[ 3 ] ;break;
case CMD_SEQ : altera_sequencia(); break;
};
//entendi o comando, sinalizo com um ok
comando_efetuado( buffer[2] );
}
//recebí comando com erro, respondo informando o erro
else erroLRC();
};
};
}
Miranda_2- Participante
- TEMPO DE EXPERIÊNCIA : 10
Sexo :
Número de Mensagens : 38
Idade : 49
Cidade/Estado: : Porto Alegre/RS
Data de inscrição : 28/09/2011
Re: programação do pic com comunicação TTL
Boa tarde, então esse sensor não veio data sheet, mais estarei te mandando o manual dele, contem as informações necessárias..http://www.cis.com.br/produtos-resposta.asp?id=76&namect=Produtos
Ai tem o seu folheto e seu manual, vou estar vendo sua programação, Muito obrigado...
Ai tem o seu folheto e seu manual, vou estar vendo sua programação, Muito obrigado...
braztiago- NOVATO
- TEMPO DE EXPERIÊNCIA : Nenhuma
Sexo :
Número de Mensagens : 5
Idade : 34
Cidade/Estado: : Pindamonhangaba/São Paulo
Data de inscrição : 06/10/2011
Re: programação do pic com comunicação TTL
Olá Braztiago,
pelo que vi, basta ligar o pino 2 do sensor em um a/d do pic, pra ver o que é recebido, apartir dai, é adaptar o software.
Outra coisa, o 16f628 não tem a/d, tente usar um uC com a/d.
Abraço
pelo que vi, basta ligar o pino 2 do sensor em um a/d do pic, pra ver o que é recebido, apartir dai, é adaptar o software.
Outra coisa, o 16f628 não tem a/d, tente usar um uC com a/d.
Abraço
Miranda_2- Participante
- TEMPO DE EXPERIÊNCIA : 10
Sexo :
Número de Mensagens : 38
Idade : 49
Cidade/Estado: : Porto Alegre/RS
Data de inscrição : 28/09/2011
Re: programação do pic com comunicação TTL
Cara muito obrigado, vou agora terminar de motar a placa e ja fazer teste, to atrasadão...
Ei muito Obrigado...
Ei muito Obrigado...
braztiago- NOVATO
- TEMPO DE EXPERIÊNCIA : Nenhuma
Sexo :
Número de Mensagens : 5
Idade : 34
Cidade/Estado: : Pindamonhangaba/São Paulo
Data de inscrição : 06/10/2011
Re: programação do pic com comunicação TTL
Bom dia Miranda, então tive analisando sua programação, fiz uma simulação rodou perfeitamente, mais assim no meu projeto não estou com conversor max232, tipo tenho apenas o sensor com saida TTL conectado a placa, pq quando comprei o sensor o vendedor disse que ele pode ser conectado direto ao pic.
Então gostaria que vc me ajudasse nessa parte, fazer a tomada de decisão do pic (o sentido de rotação do motor) de acordo com os codigos que ele vai ler, mais sem fazer a conversão e ler pelo pc...
Tipo procurei na net mais encontrei muito pouco sobre comunicação TTL, tenho um programa que cria os codigo de barras ja, ai queria entender a programação, como que o pic ler essa informação TTL e como posso fazer a tomada de decisão, diferenciar os codigo de barras pelo ultimo NIBLLE, ou ultimo BIT, algo assim...
Mas desde ja Agradeço...
Então gostaria que vc me ajudasse nessa parte, fazer a tomada de decisão do pic (o sentido de rotação do motor) de acordo com os codigos que ele vai ler, mais sem fazer a conversão e ler pelo pc...
Tipo procurei na net mais encontrei muito pouco sobre comunicação TTL, tenho um programa que cria os codigo de barras ja, ai queria entender a programação, como que o pic ler essa informação TTL e como posso fazer a tomada de decisão, diferenciar os codigo de barras pelo ultimo NIBLLE, ou ultimo BIT, algo assim...
Mas desde ja Agradeço...
braztiago- NOVATO
- TEMPO DE EXPERIÊNCIA : Nenhuma
Sexo :
Número de Mensagens : 5
Idade : 34
Cidade/Estado: : Pindamonhangaba/São Paulo
Data de inscrição : 06/10/2011
![-](https://2img.net/i/empty.gif)
» Comunicação
» controle de radar aéreo com comunicação com aviões.
» RADIOS DE COMUNICAÇÃO VHF DEFEITOS E SOLUÇÕES
» controle de radar aéreo com comunicação com aviões.
» RADIOS DE COMUNICAÇÃO VHF DEFEITOS E SOLUÇÕES
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
» cliente que não busca os aparelhos consertados, o que fazer
» SYSTEM PHILIPS NTRX505/78 - Sem Áudio - Preciso de dicas e/ou esquema.
» Alguém tem o esquema da caixa amplificada PRO BASS UNDERGROUND 15 PF?
» Auto rádio Philco PCA530 firmware
» Tv cl29k40mq gera e fica piscando
» Tv samsung cl 29k40mq problema no impulso.
» Atualização tv semp tcl 32s6500s
» Multimetro Hioki AS100D - Resistor torrrado sem identificação
» (Resolvido) MICROONDAS SAMSUNG MB6752W NÃO RESPONDE COMANDOS DO TECLADO
» videoke raf 2500 sem imagem
» Microondas MEF-41 Eletrolux, não acende luz da porta quando abre, e quando fecha não liga
» Video cassete Gradiente GSV-950H preciso de esquema
» Video cassete JVC HR-J401M - preciso de esquema
» Identificar o valor de um resistor com cores não padrão
» duvida sobre diodo smd
» (Resolvido) Pré amplificador ART TubeOpto 8 - resistor R27 queimado
» Caixa Mackie Thump 15 ,ligada em 220V
» Na queima desse fusível,eu não ponho outro igual.
» Mais uma profissão quase extinta.
» Panasonic Tv tc-55gx500b em looping. Só entra na tela inicial (logo).
» esquema tv lg uk6520psa
» Nobreak Enermax Power Guard 1300VA (Solicito Esquema)
» tv samsung un40ku6000 liga e desliga a tela
» Tv sansung UN40EH6030 standy
» tv cce ln24g - Funciona apenas sem o flat do backlight
» [Resolvido]Microondas Eletrolux ME28S entrando em proteção.
» Display "Porta aberta", microondas BMV38ABHNA
» TV PHILIPS 26PFL3404/78 nao liga nada
» Revistas antigas Blog do Picco e Datassette