Comunicar PIC direto com outro PIC, é possível?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Comunicar PIC direto com outro PIC, é possível?

Mensagempor Smarley » 09 Mar 2010 06:54

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!
Smarley
Bit
 
Mensagens: 48
Registrado em: 17 Jul 2008 17:05

Mensagempor fabim » 09 Mar 2010 07:56

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.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Smarley » 09 Mar 2010 12:56

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!
Smarley
Bit
 
Mensagens: 48
Registrado em: 17 Jul 2008 17:05

Mensagempor _blackmore_ » 09 Mar 2010 13:03

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!
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Smarley » 09 Mar 2010 13:14

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!
Smarley
Bit
 
Mensagens: 48
Registrado em: 17 Jul 2008 17:05

Mensagempor _blackmore_ » 09 Mar 2010 13:25

então vc está utilizando usart.c ??
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Smarley » 09 Mar 2010 15:25

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.
Smarley
Bit
 
Mensagens: 48
Registrado em: 17 Jul 2008 17:05

Mensagempor Smarley » 11 Mar 2010 12:33

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!
Smarley
Bit
 
Mensagens: 48
Registrado em: 17 Jul 2008 17:05

Mensagempor _blackmore_ » 11 Mar 2010 13:18

por hardware .. utilize a interrupção ... :) vai ficar bom

abrax!
_blackmore_
Dword
 
Mensagens: 1397
Registrado em: 28 Set 2008 13:26

Mensagempor Smarley » 11 Mar 2010 17:54

É, o problema vai ser fazer ele funcionar...
Tenho que descobrir ainda, pois não consegui fazer ele ler na prática.

Abraço!
Smarley
Bit
 
Mensagens: 48
Registrado em: 17 Jul 2008 17:05

Mensagempor Smarley » 20 Mar 2010 23:14

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!
Smarley
Bit
 
Mensagens: 48
Registrado em: 17 Jul 2008 17:05

comunicacao serial

Mensagempor mugangalinux » 08 Ago 2010 11:01

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
mugangalinux
Nibble
 
Mensagens: 62
Registrado em: 19 Abr 2007 15:59

Mensagempor Silvio51 » 08 Ago 2010 12:57

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.
Silvio51
Byte
 
Mensagens: 383
Registrado em: 02 Nov 2006 14:04
Localização: Brasil

serial

Mensagempor mugangalinux » 09 Ago 2010 12:27

obrigado silvio pelo comentario.

nao sei se voce programa em C. Se sim, poderia solucionar esta minha duvida?

obrigado

Muganga
mugangalinux
Nibble
 
Mensagens: 62
Registrado em: 19 Abr 2007 15:59

Mensagempor mastk » 09 Ago 2010 12:46

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...
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x