Página 1 de 2

duvida comunicação serial 16f877a

MensagemEnviado: 26 Set 2008 10:42
por denis neves
Fala galera...

Bom, o negocio é o seguinte...
Eu estou fazendo um programinha que faz comunicação serial com o pc e o pic 16f877a, no pc estou usando um programinha do rogercom para fazer a comunicação serial com pic!

Até ai tudo bem...mas o bendito do pic não responde aos meus comandos que eu estou dando no pc...Eu testei o programinha no Proteus e ele esta funcionando corretamente, até ja tinha feito o mesmo programa para um 16f628 e tambem ja havia funcionado.
Eu fiz as modificações necessarias para o pic16f877a mas nada de funcionar...bom esse é o programa em ccs:

#include<16f877a.h>
#use delay(clock = 4000000)
#use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7)

main()
{
int comando;
while(true)
{

if(kbhit())
{

switch (getc())
{

case '0' : comando = 0;
printf("/r/nRecebi o comando/r/n");
break;

case '1' : comando = 1;
printf("Recebi o comando");
break;

case '2' : comando = 2;
printf("Recebi o comando");
break;

case '3' : comando = 3;
printf("Recebi o comando");
break;

case '4' : comando = 4;
printf("Recebi o comando");
break;

case '5' : comando = 5;
printf("Recebi o comando");
break;

case '6' : comando = 6;
printf("Recebi o comando");
break;

case '7' : comando = 7;
printf("Recebi o comando");
break;


}

}

output_e(comando);

}
}

Eu queria saber se o pic 16f877a tem algum macete para fazer a comunicação com o pc...eu estou usando o lab-tool usb para fazer a gravação, tbm queria saber se o mesmo teria alguma configuração especial para gravação do 877a ?!?

Bom...desculpas por tantas perguntas, mas agradeço desde ja se alguem puder me ajudar.

Abraço.

MensagemEnviado: 26 Set 2008 11:02
por fabim
experimenta fazer o seguinte.
#byte VAR_A

#include<16f877a.h>
#use delay(clock = 4000000)
#use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7)

#byte VAR_A //************

main()
{
int comando;
while(true)
{

if(kbhit()) // se recebeu
{
VAR_A = getc(); //var_a = byte recebido
switch (VAR_A) // case VAR_A para!!!...
{

case '0' : comando = 0;
printf("/r/nRecebi o comando/r/n");
break;

case '1' : comando = 1;
printf("Recebi o comando");
break;

case '2' : comando = 2;
printf("Recebi o comando");
break;

case '3' : comando = 3;
printf("Recebi o comando");
break;

case '4' : comando = 4;
printf("Recebi o comando");
break;

case '5' : comando = 5;
printf("Recebi o comando");
break;

case '6' : comando = 6;
printf("Recebi o comando");
break;

case '7' : comando = 7;
printf("Recebi o comando");
break;


}

}

output_e(comando);

}
}

Tenta aí e ve no que dá.
E seu cabo serial como está ?

Fabim

Re: duvida comunicação serial 16f877a

MensagemEnviado: 26 Set 2008 11:05
por fabim
denis neves escreveu:Fala galera...

.


DJR, o mininu é novo, vai com carma.rs

MensagemEnviado: 26 Set 2008 11:07
por denis neves
Blz...vou testar !!!

Meu cabo ta em ordem...estou com um ociloscopio e eu vejo o sinal de tx normalmente chegando no PIC...e tbm o cabo é novo, acabei de fazer!!!

Mas blzzz...vou fazer o que vc me falou, qualquer resultado eu dou um toque!!!

Valeuuuu!!!

MensagemEnviado: 26 Set 2008 11:28
por ze
se eu fizesse parte da "galera" (éca) e não fosse ccs (éca II) ia lhe sugerir:
Código: Selecionar todos
for(;;)
{
while (!RCIF); //acho que é este o nome
RCIF=0; //só pra garantir
switch (RXREG) //acho que é este o nome
  {
  case X: fnuçãoY();break;
  ....
  ...
  }
...

ficaria mais pequeno o cod e o hex

MensagemEnviado: 26 Set 2008 14:38
por buiz
Olá Denis,

Faz alguma coisa simples, para ver se o PIC esta mandando corretamente para o PC tipo:
Código: Selecionar todos
#include<16f877a.h>
#use delay(clock = 4000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7)

main()
{

while(true)
{

printf("Recebi o comando\r\n");// Envia pela serial e observe a barra.
delay_ms(500); // envia a cada 500 milissegundos.

}
}


Se chegar tudo ok na tela do PC vc não tem problema com a comunicaçao , observe tambem se a velocidade esta igual no rogercom e no uC.

Faça testes para eliminar possiveis erros.

Só um lembrete, vc não esta esquecendo de declarar os fuses do uC?

Para ter certeza que esta tudo ok com o meu programa no uC, quando estou desenvolvendo tenho mania de colocar um led em qualquer uma das portas e fazer ele ligar no inicio da execução do programa e desligar no final, para ter certeza de que o uC esta executando aquela função.

Falou,

Buiz

MensagemEnviado: 26 Set 2008 16:11
por fabio_pic
Fala denis,

Um vez "pastei" muito com esse negócio de comunicação serial.
O problema era o pino de Tx que estava setado para input e o de Rx setado para output no set tris_ !!!

No início do código, force a direção dos pinos.

Boa sorte,
Fábio.

MensagemEnviado: 26 Set 2008 16:18
por denis neves
Valeu galera....funcionou !!!

O pau era o fuses que o buiz falou....puts...um detalhe tão simples, porem muito importante que eu esqueci de colocar, eu estava configurando os fuses no gravador, mas acho que tava dando pau !!!

Valeu galera, muito obrigado !!!

Se precisqarem de alguma coisa estarei a disposição!!!

Falowww

MensagemEnviado: 23 Out 2008 17:09
por rodrigoadachi
denis neves escreveu:Valeu galera....funcionou !!!

O pau era o fuses que o buiz falou....puts...um detalhe tão simples, porem muito importante que eu esqueci de colocar, eu estava configurando os fuses no gravador, mas acho que tava dando pau !!!

Valeu galera, muito obrigado !!!

Se precisqarem de alguma coisa estarei a disposição!!!

Falowww


Ola Denis,

Poderia postar o script já pronto, do jeito que funcionou?

Valew...

MensagemEnviado: 23 Out 2008 17:47
por fabim
Desculpem.
Ja não basta o avatar enorme, o cara parece o capeta chupando manga...
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

MensagemEnviado: 23 Out 2008 20:01
por LUCK
Sem noção mesmo.... :roll:
Imagem

Imagem

MensagemEnviado: 23 Out 2008 20:04
por tcpipchip
Deu estouro de memoria na placa de video minha :(

MensagemEnviado: 24 Out 2008 07:35
por Sergio38br
Interessante, meu micro recusou abrir a imagem, por que será???? :shock: :shock: :shock: :shock:

[ ]'s
Sergio

MensagemEnviado: 24 Out 2008 08:03
por fabim
sinplest..
Seuas maquinas devem ser de origem evangélica ou católica.
Sendo assim, o processador de vídeo ciênte disto, se recusa a mostrar a imagem do capeta..

Fei, que parece o capeta de cuéca.
Avatar não deve ser inserido imagêns do tamanho que você quiser, ou simplesmente sem procurar saber a maxima resolução..

ranca esse seu avatar sinão você vai sofrer a maldição dos 1000 camelos..

Fabim

MensagemEnviado: 24 Out 2008 08:59
por denis neves
Fala Rodrigo...

Aqui está o programinha que eu fiz para incrementar ou decrementar valores em binario via serial na entrada de 5 laths, na saida dos laths coloquei 5 conversores DAs para acionar as 5 fontes de corrente que eu estou usando para controlar o brilho de LEDs de potência.

#include<16f877a.h>
#use delay(clock = 4000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)

main()
{

int comando;
comando = 0;
printf("\r\nComando = 0\r\n");
while(true)

{

if(kbhit())
{

switch (getc())
{

case '+' : if(comando < 31) comando ++;
if(comando == 31) comando = 31;
printf("comando = %u\r\n", comando);
break;

case '-' : if(comando > 0) comando --;
if(comando == 0) comando = 0;
printf("comando = %u\r\n", comando);
break;

case 'h' : output_high(pin_c0);
delay_ms(100);
output_low(pin_c0);
printf("\r\nO latch foi habilitado\r\n");
break;


}


}

output_b(comando);

}
}

Aqui neste programa eu só coloquei para acionar um lath, para acionar os outros basta definir uma tecla e fazer a mesma logica desse ai de cima.

Bom é isso...qq duvida dá um toque!!!

Abraço...