Ir ao conteúdo

Posts recomendados

Postado

A comunicação rs232 consegui fazer entre dois pics, estou utilizando o PIC16F628A, entre fios de ligação direta entre os PICS funciona perfeitamente,

porém quando vou acrescentar dois transceivers MAX487 não está funcionando. Vou postar logo abaixo o código fonte dos dois PICS, se alguém puder me ajudar eu agradeço,

inclusive ja até pesquisei no youtube alguns projetos entre o pic mestre e o pic escravo, a pessoa que montou esse projeto habilita o pino ENABLE da RS232, onde os ports RE, DE são curtucircuitados para habilitação de envio ou recepção de dados. Porém, eu fiz um parecido e nada consegui por enquanto, alguém poderia me ajudar? Vou postar aqui o código dos dois PICS

 

 

#include <PICTESTER.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  
#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
  
#use delay(internal=4000000)
#use rs232(baud=3000,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,stream=PORT1,enable=PIN_A4)
  
int16 comando;
int16 resultado=0;
#include <lcd.c>
//////
void main()/////
{
/////

   disable_interrupts(global);
   lcd_init();
   printf(lcd_putc"\fRECEPTOR\nTRANSMISSOR");delay_ms(100);
   output_low(pin_a6);//PIC AINDA NÃO RECEBEU MENSAGEM DO transmissor DO CI DE COMUNC.
   while(TRUE)
   {
      ////testando receptor questões ok e falsa
      If (kbhit()){ //SE RECEBER MENSAGEM 1 que significa ok então
     comando=getc();
     if (comando=='1'){
     output_high(pin_a2);//LIGA LED DE receptor ok!
     resultado++;
     printf(lcd_putc"\fRECEPTOR    BOM\nTRANSMISSOR");delay_ms(100);////
     }     
   } 
   ////testando transmissor questões ok e falsa
     if (comando=='3'){
     delay_ms(2000);
     putc('5');//envia essas letras pela serial
     }
     if (comando=='9'){
     
     output_high(pin_a6);//LIGA LED DE transmissor ok!
     resultado++;
     printf(lcd_putc"\fRECEPTOR    BOM\nTRANSMISSOR BOM");delay_ms(2000);////
     }

     
     if (resultado==2){
     putc('8');//para finalizar no display
     delay_ms(100);
     printf(lcd_putc"\f   PIC_TESTER:\n    75176 BOM");delay_ms(3000);break;
     }
  
   
   }

}

 

 

 

/////////////////////////////////////////////////////////////


#include <envia tx transceiver rs485.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  
#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
  
#use delay(internal=4000000)
#use rs232(baud=3000,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,stream=PORT1,enable=PIN_A4)

#include <lcd.c>
int16 conta=0;//
int16 comando;
void testar_75176_agora(){
output_high(pin_a2);//led testando 
printf(lcd_putc"\f    TESTANDO\n    RECEPTOR");delay_ms(100);
delay_ms(1000);
putc('1');
delay_ms(1000);
printf(lcd_putc"\f    TESTANDO\n   TRANSMISSOR  ");
delay_ms(100);
putc('3');//envia 3, pictester manda 5
  // }//end if
}//end função testar_75176_agora
void leitura_serial_sn75176b (){//aqui dentro minhas condições
If (kbhit()){ //aqui é para testar o transmissor LEITURA DA SERIAL
     comando=getc();
     if (comando=='5'){//se pic tester mandou 5,mando 9 pela serial, sinal que funcionou o transmissor do 75176 quando enviou 5 
     putc('9');//confirmando dados do transmissor no pic tester, esse comando é só para o pictester realizar o bloco respectivo da função de liga e desliga led do tx
     }
      if (comando=='8'){//se pic tester mandou 5,mando 9 pela serial, sinal que funcionou o transmissor do 75176 quando enviou 5 
     output_low(pin_a2);//led testando 
     printf(lcd_putc"\fTESTE FINALIZADO\nDESLIGUE E LIGUE");delay_ms(2500);BREAK;
          }
     }
}
void main(){
   lcd_init();
   printf(lcd_putc"\f   PIC_TESTER\n TESTA SN75176B");delay_ms(5000);
   
     testar_75176_agora();
   while(TRUE)
   {
     leitura_serial_sn75176b();//habilito leitura serial em looping infinito com as minhas respectivas condições dentro da minha função

   }//end while

}//end void main

O Objetivo é testar os cis tranceivers.

 

Ou, alguém teria um exemplo para me ajudar? Agradeço desde ja

  • Membro VIP
Postado

Olá amigo. Bem eu nunca usei este ci mas a figura abaixo já nos fornece praticamente tudo pra entender e programar a comunicação que aparentemente é relativamente simples...

max487cpa-dip-8-max487-rs-485rs-422-tran

Também não avaliei seu fonte mas tem muita coisa pra arduino em que você pode se basear

Postado
Em 14/07/2020 às 08:14, Isadora Ferraz disse:

Olá amigo. Bem eu nunca usei este ci mas a figura abaixo já nos fornece praticamente tudo pra entender e programar a comunicação que aparentemente é relativamente simples...

max487cpa-dip-8-max487-rs-485rs-422-tran

Também não avaliei seu fonte mas tem muita coisa pra arduino em que você pode se basear

Muito obrigado, pela dica, vou tentar alguma coisa com esse exemplo ,

  • Curtir 1
Postado

Consegui fazer deu certo, a questão era o proteus em si, acredito que seja um bug mesmo.

 

Pela programação estava definindo quem ia enviar e que ia receber os dados. ATÉ AI OK....Quando ia simular , as vezes não funcionava, então,

inseri para o transceiver que transmite tx, um resistor de pull up, e para o que recebe o sinal (rx) um resistor de pull down.  Funcionou perfeitamente , obrigado pela ajuda 

 

adicionado 2 minutos depois

Próximo passo é fazer uma comunicação via Canbus

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!