Ola, amigos garagistas, estou montando um projeto em que preciso comunicar um Arduíno e um pic por meio da serial, fiz os dois programas, (Arduíno) e (pic), simulei no proteus e tudo certo só que quando monto o circuito, nada acontece. já tentei de tudo e nada, o Arduíno não da nenhum sinal que recebeu dados.

O programa funciona mais ou menos assim

O pic manda uma string via serial

Exemplo: 'A'

O Arduíno recebe e compara internamente, caso essa string esteja inclusa no programa ele executa 

a função do Switch case correspondente

quando mando os dados pela serial do programa do Arduíno pela Usb tudo funciona normal, só que pela entrada rx simplesmente não acontece nada

segue a foto da montagem no proteus

Exibições: 830

Responder esta

Respostas a este tópico

coloque um foto da montagem real... a alimentação esta em comum? o pic ta usando cristal? o reset esta habilitado no codigo? coloque o codigo do arduino e do pic aqui

vlw, blz vou postar tudo aqui,mas vou adiantar que o pic e o arduino estão com alimentação comum, o reset ta desabilitado e estou usando o clock interno de 4 mhz, muito obrigado pela atenção.

código do pic (Ccs)

#include "C:\Users\Jonasmagalhaes\Desktop\teste 3\main.h"


void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
#use delay(clock=4000000)

While(TRUE)
{
delay_ms(100);
putc('1');
delay_ms(500);
putc('Z');
delay_ms(500);
putc('2');
delay_ms(500);
putc('Z');
}
}

Código do Arduíno (Arduíno IDE)

#include <SPI.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //portas de comunicação com o lcd

int temp;//variavel para o lcd

int byteRecebido;//armazenamento da serial
boolean retorno = 0;

int s1 = 6; //comunicação entre arduino e o pic 16f877a boolean
int s2 = 7; //comunicação entre arduino e o pic 16f877a boolean
int s3 = 8; //comunicação entre arduino e o pic 16f877a boolean
int s4 = 9; //comunicação entre arduino e o pic 16f877a boolean
int Beep = 13;


void setup() {

lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)

Serial.begin(9600);//comando iniciar serial a 9600 bauds

pinMode(s1,OUTPUT); //define pino como saida
pinMode(s2,OUTPUT); //define pino como saida
pinMode(s3,OUTPUT); //define pino como saida
pinMode(s4,OUTPUT); //define pino como saida
pinMode(Beep,OUTPUT); //define pino como saida

lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Iniciando... "); //Escreve no LCD

Serial.println("Iniciando...");

digitalWrite(Beep,HIGH);//beep de inicialização
delay(60);
digitalWrite(Beep,LOW);
delay(60);
digitalWrite(Beep,HIGH);
delay(60);
digitalWrite(Beep,LOW);
delay(60);
digitalWrite(Beep,HIGH);
delay(60);
digitalWrite(Beep,LOW);
delay(60);

Serial.println("Pronto");
Serial.println("Aguardando comando");

lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Pronto "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Aguardando cmd."); //Escreve no LCD
delay(500);


}


void loop(){

//zerar saídas//
digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);


//////////////////////////////////// setores //////////////////////////////////

//////////////////////////////////// setor 1 //////////////////////////////////


/////////////////////////////setor 1 temporizador ///////////////////////////

switch(Serial.read()) //verifica qual caracter recebido
{

case 'A':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 1"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 1");

digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);

break;



/////////////////////////////setor 1 computador ///////////////////////////


case '1':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 1"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 1");

digitalWrite(s1,LOW);
digitalWrite(21,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);

break;


//////////////////////////////////// setor 2 //////////////////////////////////


/////////////////////////////setor 2 temporizador ///////////////////////////


case 'B':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 2"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 2");

digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);

break;



/////////////////////////////setor 2 computador ///////////////////////////


case '2':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 2"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 2");

digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);

break;



//////////////////////////////////// setor 3 //////////////////////////////////


/////////////////////////////setor 3 temporizador ///////////////////////////




case 'C':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 3"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 3");

digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);

break;



/////////////////////////////setor 3 computador ///////////////////////////


case '3':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 3"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 3");

digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);

break;


//////////////////////////////////// setor 4 //////////////////////////////////


/////////////////////////////setor 4 temporizador ///////////////////////////




case 'D':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 4"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 4");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);

break;



/////////////////////////////setor 4 computador ///////////////////////////


case '4':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 4"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 4");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);

break;

//////////////////////////////////// setor 5 //////////////////////////////////


/////////////////////////////setor 5 temporizador ///////////////////////////




case 'E':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 5"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 5");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);

break;



/////////////////////////////setor 5 computador ///////////////////////////


case '5':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 5"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 5");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);

break;



//////////////////////////////////// setor 6 //////////////////////////////////


/////////////////////////////setor 6 temporizador ///////////////////////////




case 'F':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 6"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 6");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);

break;



/////////////////////////////setor 6 computador ///////////////////////////


case '6':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 6"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 6");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);

break;



//////////////////////////////////// setor 7 //////////////////////////////////


/////////////////////////////setor 7 temporizador ///////////////////////////




case 'G':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 7"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 7");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);

break;



/////////////////////////////setor 7 computador ///////////////////////////


case '7':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 7"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 7");

digitalWrite(s1,LOW);
digitalWrite(s2,HIGH);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);

break;


//////////////////////////////////// setor 8 //////////////////////////////////


/////////////////////////////setor 8 temporizador ///////////////////////////




case 'H':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 8"); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Irrigando area 8");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);

break;



/////////////////////////////setor 8 computador ///////////////////////////


case '8':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print("Irrigando area 8"); //Escreve no LCD

Serial.println("Computador");
Serial.println("Irrigando area 8");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);

break;

//////////////////////////////////// bombas //////////////////////////////////


//////////////////////////////////// Bomba 1 //////////////////////////////////


/////////////////////////////Bomba 1 temporizador ///////////////////////////




case 'I':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 1 "); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Bomba 1");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);

break;



/////////////////////////////bomba 1 computador ///////////////////////////


case '9':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 1 "); //Escreve no LCD

Serial.println("Computador");
Serial.println("Bomba 1");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,HIGH);
delay(500);

break;

//////////////////////////////////// Bomba 2 //////////////////////////////////


/////////////////////////////Bomba 2 temporizador ///////////////////////////




case 'J':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 2 "); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Bomba 2");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);

break;



/////////////////////////////bomba 2 computador ///////////////////////////


case 'X':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 2 "); //Escreve no LCD

Serial.println("Computador");
Serial.println("Bomba 2");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,LOW);
delay(500);

break;


//////////////////////////////////// Bomba 3 //////////////////////////////////


/////////////////////////////Bomba 3 temporizador ///////////////////////////




case 'K':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Temporizador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 3 "); //Escreve no LCD

Serial.println("Temporizador");
Serial.println("Bomba 3");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);

break;



/////////////////////////////bomba 3 computador ///////////////////////////


case 'Y':


lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Computador "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Bomba 3 "); //Escreve no LCD

Serial.println("Computador");
Serial.println("Bomba 3");

digitalWrite(s1,HIGH);
digitalWrite(s2,LOW);
digitalWrite(s3,HIGH);
digitalWrite(s4,HIGH);
delay(500);

break;

case 'Z':



lcd.clear();
lcd.setCursor(0, 0); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Pronto "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na coluna(0) e na linha(0) do LCD
lcd.print(" Aguardando cmd."); //Escreve no LCD

Serial.println("Pronto");
Serial.println("Aguardando comando");

digitalWrite(s1,LOW);
digitalWrite(s2,LOW);
digitalWrite(s3,LOW);
digitalWrite(s4,LOW);
delay(500);

break;
}
}

os códigos estão incompletos ainda, gostaria só de faze-los funcionar pra depois desenvolve-los melhor

segue também as fotos da montagem na protoboard (obs, para alimentar o pic e Arduíno estou usando a saída 5 volts de um conversor serial ttl Usb, mas sem conectá-los em tx rx so 5v e Gnd, desde já agradeço a ajuda 

Anexos

amigo coloque tambem o codigo do arquivo "#include C:\Users\Jonasmagalhaes\Desktop\teste 3\main.h"

vc utilizou qual gravador no PIC... verifique se na hora da gravação o fuse de clock interno esta habilitado... tente um teste com pic fazendo um led pisca para verifica se ele esta funcionando.

blz, segue o código do main.h

#include <16F628A.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,restart_wdt)

ah quanto ao q vc falou, testei o pic, rodei um codigozinho pra fazesegue a imagem da edição de fuser do microbrn)

Anexos

*rodei um codigo que piscava um led ligado na porta 18 no pic e tudo certo, funcionou legal

parece que descobrir qual é o problema, estava na fonte, usei uma fonte pra protoboard e Graças a Deus funcionou perfeitamente,mas mesmo assim agradeço a disposição em me ajudar, muito Obrigado !

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço