duvida comunicação serial 16f877a

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

duvida comunicação serial 16f877a

Mensagempor denis neves » 26 Set 2008 10:42

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.
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Mensagempor fabim » 26 Set 2008 11:02

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
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!!!?

Re: duvida comunicação serial 16f877a

Mensagempor fabim » 26 Set 2008 11:05

denis neves escreveu:Fala galera...

.


DJR, o mininu é novo, vai com carma.rs
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 denis neves » 26 Set 2008 11:07

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!!!
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Mensagempor ze » 26 Set 2008 11:28

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
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor buiz » 26 Set 2008 14:38

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
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor fabio_pic » 26 Set 2008 16:11

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.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor denis neves » 26 Set 2008 16:18

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
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Mensagempor rodrigoadachi » 23 Out 2008 17:09

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...
rodrigoadachi
Nibble
 
Mensagens: 70
Registrado em: 15 Out 2007 12:19
Localização: Bahia - Brazil

Mensagempor fabim » 23 Out 2008 17:47

Desculpem.
Ja não basta o avatar enorme, o cara parece o capeta chupando manga...
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
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 LUCK » 23 Out 2008 20:01

Sem noção mesmo.... :roll:
Imagem

Imagem
Editado pela última vez por LUCK em 23 Out 2008 20:35, em um total de 4 vezes.
Avatar do usuário
LUCK
Byte
 
Mensagens: 109
Registrado em: 11 Out 2006 14:01

Mensagempor tcpipchip » 23 Out 2008 20:04

Deu estouro de memoria na placa de video minha :(
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor Sergio38br » 24 Out 2008 07:35

Interessante, meu micro recusou abrir a imagem, por que será???? :shock: :shock: :shock: :shock:

[ ]'s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor fabim » 24 Out 2008 08:03

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
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 denis neves » 24 Out 2008 08:59

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...
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Próximo

Voltar para PIC

Quem está online

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

cron

x