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?

Exibições: 402

Responder esta

Respostas a este tópico

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?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço