Ir ao conteúdo

Posts recomendados

Postado

Galera 
 
tudo bom?
 
É o seguinte, estou com um pic16f877a e estou tentando comunicar com um arduino, no qual estou enviando  um caractere 'b'(arduino transmissor), e o que esta acontecendo, o meu led portb.rb7 do pic receptor, indica que recebeu o valor do arduino, aee estou com duvida agora, o arduino esta envoando o caractere 'b' a cada 200 ms, então o led rb7 do pic era para ficar acendendo e apagando conforme o programa, pois esta em um loop infinito... porém o led apenas acende uma vez só, agora não sei se esta comunicando? ou se esta comunicando ou se esta travando em algum lugar que esqueci ... segue o codigo do pic.

char recebe = 0;         // variavel que recebera os dados da comunicacaovoid main(){ADCON1 = 0x0F;TRISB  = 0x00;TRISC  = 0x80; // RC7/RX - Input -- RC6/TX - OutputPORTB  = 0x00;PORTC  = 0x00;TXSTA = 0b00000100;RCSTA = 0b10010000;SPBRG = 25; // fator do baud rate para 9600      while(1)      {       if (PIR1.RCIF == 1) // verifico se a dados a receber       {        recebe = RCREG;  // guardo o dado recebido na variavel recebe        Portb.rb6 = 1;        Delay_ms(100);        Portb.rb6 = 0;        Delay_ms(100);                       if (recebe == 'b') // se o dado recebido for o caractere 'b', acenda o led rb7               {                  Portb.rb7 = 1;                  Delay_ms(300);                  Portb.rb7 = 0;                  Delay_ms(100);                  SPBRG = 25;                }                delay_ms(200);        }      }}
Postado

codigo atualizado, fail, o led pisca uma tres vezes so, troquei o pic para 16f628a...

volatile char recebe = 0;void main(){TRISB  = 0x02;PORTB  = 0x00;TXSTA = 0b00000100;RCSTA = 0b10010000;SPBRG = 25;      while(1)      {       if (PIR1.RCIF == 1)       {        recebe = RCREG;        Portb.rb5 = 1;                       if (recebe == 'b')               {                  Portb.rb4 = 1;                  Delay_ms(300);                  Portb.rb4 = 0;                  Delay_ms(100);                }                PIR1.RCIF = 0;                recebe = 0;                SPBRG = 25;        }      }}
Postado

Tens que levar em conta a capacidade do buffer do PIC. O arduino envia o dado a cada 200ms. No programa desde o inicio do teste da recepção até o fim, passam 800ms. Nesse tempo o PIC recebe o dado três vezes e pode entrar em overflow.

 

Tenta aumentar o tempo de envio, ou limpar o buffer.

Visitante
Este tópico está impedido de receber novas respostas.

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!