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