Estou montando um projeto porem funciona no proteus e não no protoboard
Eu aperto o botão, ele manda o caracter A para o arduino, o mesmo processa e manda o caracter A para o pic que aciona o led.
Transmissor:
int FLAG_01 = 0;
int FLAG_02 = 0;
int FLAG_03 = 0;
int FLAG_04 = 0;
int FLAG_05 = 0;
void main(){
UART1_Init(9600);
Delay_ms(10);
TRISA = 255;
TRISB = 0b11111011;
PORTA = 0;
PORTB = 0;
while(1)
{
if(PORTA.F0 == 1 && FLAG_01 == 0){ //Carga 01
UART1_Write('A');
//RF_Send('A',1);
delay_ms(500);
FLAG_01 = 1;
}
if(PORTA.F0 == 1 && FLAG_01 == 1){
UART1_Write('A');
//RF_Send('A',0);
delay_ms(500);
FLAG_01 = 0;
}
if(PORTA.F1 == 1 && FLAG_02 == 0){ //Carga 02
UART1_Write('B');
//RF_Send('B',1);
delay_ms(500);
FLAG_02 = 1;
}
if(PORTA.F1 == 1 && FLAG_02 == 1){
UART1_Write('B');
//RF_Send('B',0);
delay_ms(500);
FLAG_02 = 0;
}
if(PORTA.F2 == 1 && FLAG_03 == 0){ //Carga 03
UART1_Write('C');
//RF_Send('C',1);
delay_ms(500);
FLAG_03 = 1;
}
if(PORTA.F2 == 1 && FLAG_03 == 1){
UART1_Write('C');
//RF_Send('C',0);
delay_ms(500);
FLAG_03 = 0;
}
if(PORTA.F3 == 1 && FLAG_04 == 0){ //Carga 04
UART1_Write('D');
//RF_Send('D',1);
delay_ms(500);
FLAG_04 = 1;
}
if(PORTA.F3 == 1 && FLAG_04 == 1){
UART1_Write('D');
//RF_Send('D',0);
delay_ms(500);
FLAG_04 = 0;
}
if(PORTB.F0 == 1 && FLAG_05 == 0){ //Carga 05
UART1_Write('E');
//RF_Send('E',1);
delay_ms(500);
FLAG_05 = 1;
}
if(PORTB.F0 == 1 && FLAG_05 == 1){
UART1_Write('E');
//RF_Send('E',0);
delay_ms(500);
FLAG_05 = 0;
}
}
}
Arduino:
#include <AFMotor.h>
/*
* comandos via serial
*/
/*
echo
reenvia para o computador o dado recebido pela serial
*/
byte byteRead;
const int LED = 11; // the pin that the LED is attached to
void setup() {
Serial.begin(1200); //configura comunicação serial com 9600 bps
pinMode(LED,OUTPUT); //configura pino do led como saída
}
void loop() {
if (Serial.available()) //se byte pronto para leitura
{
switch(Serial.read()) //verifica qual caracter recebido
{
case 'A': //caso 'A'
Serial.write('A'); //reenvia para o computador o dado recebido
digitalWrite(LED,!digitalRead(LED)); //inverte estado do LED
break;
case 'B': //caso 'B'
Serial.write('B'); //reenvia para o computador o dado recebido
break;
case 'C': //caso 'C'
Serial.write('C'); //reenvia para o computador o dado recebido
break;
case 'D': //caso 'D'
Serial.write('D'); //reenvia para o computador o dado recebido
break;
case 'E': //caso 'E'
Serial.write('E'); //reenvia para o computador o dado recebido
break;
}
}
}
Receptor:
char valor;//variavel q recebe um valor da serial
int flag;
void main() {
UART1_Init(1200);
Delay_ms(100);
TRISA = 0b11100000;
TRISB = 0b00000010;
PORTB.F0 = 1;
while(1){
if(UART1_data_ready())//se algum dado foi recebido
{
valor = UART1_read();//salva o dado na variavel
if(valor == 'A'){
porta.f0 = ~porta.f0;
}
if(valor == 'B'){
porta.f1 = ~porta.f1;
}
if(valor == 'C'){
porta.f2 = ~porta.f2;
}
if(valor == 'D'){
porta.f3 = ~porta.f3;
}
if(valor == 'E'){
portb.f0 = ~portb.f0;
}
}
}
}
Alguém pode me ajudar?
Tags:
Serial legal colocar um led+resistor para visualizar o que acontece.
Não vejo erro de codigo, tentaria:
- Checar se interligou os GNDs;
- Checar se ligou TX com RX e vice versa (precisa cruzar);
- Checar se o erro está ao transmitir ou ao receber;
- Checar se configurou corretamente os cristais. Normalmente vc nem mexe com isso, mas por ex no Arduino se vai gravar direto (Sem bootloader) ele pode estar com os fusiveis para o oscilador interno. Tudo funciona mas não dá a velocidade correta na serial (o interno é de 8MHz contra 16MHz do externo, normalmente).
Estou usando cristal de 4Mhz nos pic, velocidade de 9600bps, devo trocar?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por