Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Rodrigo Flister

[Resolvido] Comunicação serial em PIC com linguagem C

Recommended Posts

estou tentando fazer a comunicação serial do tipo use rs232 entre um pic 18f442 e um 16f628, onde o 628 envia um valor de uma variável para o 442, os programas são esse:

Recebedor

#include <18f442.h>

#use delay (clock=12000000)

#fuses HS, NOWDT, PUT, NOLVP

#use rs232 (baud = 4800, xmit=pin_b4, rcv=pin_b3)

#include <LCD.c>

// PINOS PIC PINOS LCD

// D0 enable

// D1 rs

// D2 rw

// D4 D4

// D5 D5

// D6 D6

// D7 D7

//

// Os pinos D0 a D3 do LCD não são usados.

main()

{

while(true)

{

int d=0;

lcd_init();

d=getc();

printf(lcd_putc,"\fo valor recebido pela serial e %d", d);

delay_ms(100);

}

}

Transmissor

#include <16f628A.h>

#use delay (clock=12000000)

#fuses HS, NOWDT, PUT, NOLVP

#use rs232 (baud = 4800, xmit=pin_b1, rcv=pin_b2)

main()

{

while(true)

{

int x;

x++;

putc(x);

}

}

porém nada acontece, a única coisa que eu posso afirmar e que não esta havendo transmissão, pois estou simulando tudo no proteus e nele tem o Terminal virtual onde eu posso ver a informação sendo transmitida.

Compartilhar este post


Link para o post
Compartilhar em outros sites
estou tentando fazer a comunicação serial do tipo use rs232 entre um pic 18f442 e um 16f628, onde o 628 envia um valor de uma variável para o 442, os programas são esse:

Recebedor

#include <18f442.h>

#use delay (clock=12000000)

#fuses HS, NOWDT, PUT, NOLVP

#use rs232 (baud = 4800, xmit=pin_b4, rcv=pin_b3)

#include <LCD.c>

// PINOS PIC PINOS LCD

// D0 enable

// D1 rs

// D2 rw

// D4 D4

// D5 D5

// D6 D6

// D7 D7

//

// Os pinos D0 a D3 do LCD não são usados.

main()

{

while(true)

{

int d=0;

lcd_init();

d=getc();

printf(lcd_putc,"\fo valor recebido pela serial e %d", d);

delay_ms(100);

}

}

Transmissor

#include <16f628A.h>

#use delay (clock=12000000)

#fuses HS, NOWDT, PUT, NOLVP

#use rs232 (baud = 4800, xmit=pin_b1, rcv=pin_b2)

main()

{

while(true)

{

int x;

x++;

putc(x);

}

}

porém nada acontece, a única coisa que eu posso afirmar e que não esta havendo transmissão, pois estou simulando tudo no proteus e nele tem o Terminal virtual onde eu posso ver a informação sendo transmitida.

Já experimentou colocar um delay ali no loop?

Delay_ms(100);

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <16f628A.h>
#use delay (clock=12000000)
#fuses HS, NOWDT, PUT, NOLVP
#use rs232 (baud = 4800, xmit=pin_b1, rcv=pin_b2)

main()
{
while(true)
{
int x;
x++;
putc(x);
[B]delay_ms(100);[/B]
}
}

Tenho minhas dúvidas quanto a funcionar essa função putc... Você está enviando 1 byte atraves de 1 bit, ele já faz decompoem certinho os sinais?

Experimenta fazer sua propria função de teste, deixe um pino do seu transmissor oscilando lentamente (pode ser 1 Hz) e o outro pino enviando bits de dados. No seu transmissor, você utiliza o pino de clock para se orientar quando pegar o dado do outro pino. ;)

Não é o padrão serial rs232, mas pelo menos você pode verificar se o básico do básico funciona!

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você se enganou, pois a função puntc envia não 1 bit mais um byte, pelo meno e isso que tenho no meu material: Uso aquela livro PIC programação em c da editora erica.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Acho que você se enganou, pois a função puntc envia não 1 bit mais um byte, pelo meno e isso que tenho no meu material: Uso aquela livro PIC programação em c da editora erica.

Não amigo, não me enganei.

Ele vai enviar 1 byte sim, mas vai enviar 1 bit de cada vez. O bus não é de 8 fios e sim de 1 fio, então não é possível enviar 256 possibilidades com 1 só fio, por isso que se chama serial, você envia em partes. A função por traz transforma teu 1 byte em 8 bits, e envia 1 bit de cada vez.

Faça o que eu disse anteriormente, teste lá fazendo sem a biblioteca.

Tem uma coisa que agora ví que eu não gostei muito, em ambos os códigos o

#use rs232

está configurado com

rcv=

, ou seja os dois estão como receive, não?... um deles não devia ser tipo um 'send'?

Compartilhar este post


Link para o post
Compartilhar em outros sites
:wacko::wacko:Na verdade eu não sei o que pode estar havendo, eu estou usando o livro que falei que indica o copilador CCS, so que o meu CCS e uma versão mais nova, que a indicada pelo livro e varias vezes meu copilador não aceita códigos que estão no livro, como por exemplo a biblioteca rs232.c que digitei todinha e na hora de usar o copilador não aceitou. Agora to meio sem saber o que fazer, o meu objetivo em usar a comunicação serial e para comunicar 2 pics, onde em um deles tem um programa de supervisorio de uma maquina e o outro tem um simples relógio, pois tenho que usar o relógio no programa do supervisorio. Ja tentei colocar o relógio no pic principal, porém ja estou usando 2 timers e um relógio junto de tudo isso ia complicar muito a minha vida.:(:(:(

Compartilhar este post


Link para o post
Compartilhar em outros sites
:wacko::wacko:Na verdade eu não sei o que pode estar havendo, eu estou usando o livro que falei que indica o copilador CCS, so que o meu CCS e uma versão mais nova, que a indicada pelo livro e varias vezes meu copilador não aceita códigos que estão no livro, como por exemplo a biblioteca rs232.c que digitei todinha e na hora de usar o copilador não aceitou. Agora to meio sem saber o que fazer, o meu objetivo em usar a comunicação serial e para comunicar 2 pics, onde em um deles tem um programa de supervisorio de uma maquina e o outro tem um simples relógio, pois tenho que usar o relógio no programa do supervisorio. Ja tentei colocar o relógio no pic principal, porém ja estou usando 2 timers e um relógio junto de tudo isso ia complicar muito a minha vida.:(:(:(

Amigo, faça sua própria biblioteca, as vezes não é útil utilizar bibliotecas prontas, pois caso você precise 'migrar' o seu sistema para outra linguagem, vai apanhar legal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×