Página 1 de 2
Comunicar PIC direto com outro PIC, é possível?

Enviado:
09 Mar 2010 06:54
por Smarley
Olá pessoal!
Eu estou tentando fazer com que 2 PIC's se comuniquem mas não estou conseguindo.
A idéia é que o PIC escravo envie valores dependendo dos botões apertados, e o PIC mestre mostre eles no display.
Só que o PIC mestre não está recebendo nada.
Eu liguei o pino Tx do escravo direto no Rx do mestre. Isso é possível ou eu tenho que montar algum circuito para fazer isso?
No PIC mestre eu estou utilizando o comando if(kbhit(){...} e lendo ele a uma velocidade de 50Khz. E a comunicação dos 2 PIC's está em 2400bps. Os 2 PIC's são 16F877A. Amanhã posso postar o código, mas é basicamente isso. O pic escravo espera um botão ser apertado e putc(valor_do_botão) e o pic mestre fica verificando com o kbhit.
Alguem pode me ajudar?
Obrigado!
Abraços!

Enviado:
09 Mar 2010 07:56
por fabim
tio, apenas o problema colocado, não serve para o pessoal se basear e dar algum piteco..
Tipo
TX escravo RX mestre
E os GND´S ? estão ligados ?
Quando utilizou o comando de inicialização da serial no CCS com esse kh,,, você fez igualzinho dos dois lados ? informou qual clock estava utilizando ?
Coisas do tipo.

Enviado:
09 Mar 2010 12:56
por Smarley
Olá!
Desculpe, realmente faltou alguns detalhes.
Os GND's deles estão conectados sim pois estão com a mesma alimentação na protoboard.
As linhas de inicialização estão iguais.
Escravo:
#use rs232(baud=2400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Mestre:
#use rs232(baud=2400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
Abraço!

Enviado:
09 Mar 2010 13:03
por _blackmore_
cara ... não tem erro ...
para enviar ...
- Código: Selecionar todos
#use RS232 ( baud=defina o baud, xmit=PIN_XX, rcv=PIN_XX )
#include <rs232.c>
printf ( "%3u\r\n", variavel_enviar );
para receber ...
- Código: Selecionar todos
#use rs232 ( baud=defina o baud, xmit=PIN_xx, rcv=PIN_xx)
#include <rs232.c>
if (kbhit()){
escreve o código aqui ;
}
defina o baud de acordo com o include ... se precisar mais rápido faça por hardware ...
abrax!

Enviado:
09 Mar 2010 13:14
por Smarley
Olá _blackmore_!
A única diferença no teu código é que eu utilizei putc(valor);
Mas no Proteus o programa está funcionando bem. O problema foi na prática.
E eu não usei #include <rs232.c>.
Inclusive o meu CCS nem tem essa biblioteca...
Abraço!

Enviado:
09 Mar 2010 13:25
por _blackmore_
então vc está utilizando usart.c ??

Enviado:
09 Mar 2010 15:25
por Smarley
Não, eu não estou usando nenhuma biblioteca.
Apenas o comando putc(valor); e valor=getch();
Não funciona sem uma biblioteca?
Desculpem pelas perguntas idiotas mas é a primeira vez que tento fazer uma comunicação entre 2 PIC's.

Enviado:
11 Mar 2010 12:33
por Smarley
Gostaria de agradecer aqui a ajuda do amigo _blackmore_ que me enviou as bibliotecas para a comunicação serial via software.
Agora eu vou estudar a comunicação via hardware utilizando o kbhit, pois com o software o programa fica parado esperando receber um byte. E eu precisaria rodar outras operação com o programa. Eu gostaria que fosse como uma interrupção, que ao receber um byte ele entrasse nela.
Abraços!

Enviado:
11 Mar 2010 13:18
por _blackmore_
por hardware .. utilize a interrupção ...

vai ficar bom
abrax!

Enviado:
11 Mar 2010 17:54
por Smarley
É, o problema vai ser fazer ele funcionar...
Tenho que descobrir ainda, pois não consegui fazer ele ler na prática.
Abraço!

Enviado:
20 Mar 2010 23:14
por Smarley
Olá pessoal.
Acabei descobrindo qual é a interrupção que deve ser usada para receber pela serial.
É mais barbada de configurar do que eu pensei.
Mas uma coisa eu notei. O mestre não recebe todos os dados corretamente.
Várias vezes ocorre dele receber um byte que não é o mesmo que foi enviado.
Aí eu implementei por software e ocorre a mesma coisa.
Para tentar solucionar o problema eu aterrei os cristais, coloquei um capacitor de 100nF no pino do receptor do mestre e transmissor do escravo ligado ao terra, e um resistor de 4k7 no pino do receptor do mestre e transmissor do escravo ligado aos 5V.
Será que eu vou ter que modificar o meu programa para solucionar este problema ou teria uma solução física?
Eu estou utilizando o 16F877A, me falaram que o 18F452 seria mais estável e melhor de se trabalhar. Alguém confirma isso e acha que vai resolver meu problema?
Abraços!
comunicacao serial

Enviado:
08 Ago 2010 11:01
por mugangalinux
pessoal...
estou trabalhando com comunicacao serial entre PC....pic mestre e pic escrevo.
O protocolo de comunicacao entre o PC e o pic mestre esta funcionando. O proximo passo sera a comunicacao entre os dois pic.
para a comunicacao entre PC e pic mestre utilizei a interrrupcao #int_rda entretanto tenho visto alguns programas que utilizam kbhit().
Qual a diferenca entre utilizar interrupcao (rda) e o comando kbhit() ??
obrigado
Muganga

Enviado:
08 Ago 2010 12:57
por Silvio51
Uma coisa que percebo em quem programa em C é que ficam amarrados na sintaxe da linguagem e não conseguem "pensar" o funcioanamento do micro. Uma simples comunicação serial na famigerada UART torna-se um trabalho árduo... sei não. Viva o assembly.
serial

Enviado:
09 Ago 2010 12:27
por mugangalinux
obrigado silvio pelo comentario.
nao sei se voce programa em C. Se sim, poderia solucionar esta minha duvida?
obrigado
Muganga

Enviado:
09 Ago 2010 12:46
por mastk
Eu penso exatamento ao contrario, trabalhando em C, vc pensa no dominio do objetivo/problema.
Se esta tendo problemas na comunicacao, pode ser o modo de recepcao do mestre, ou problemas no hardware, interferencia etc...