Ir ao conteúdo
  • Cadastre-se

Clock do PIC16F628A atrasado!


Marcos Baungartner

Posts recomendados

  • Membro VIP

Estou programando esse PIC no compilador mickroc, para que a saida B0 acenda um led somente enquanto o nível lógico da entrada A0 for 1. Pois bem, quando mando 1 na entrada A0 o led acend, mas quando mando 0 nessa entrada o led deveria apagar no mesmo instante, o problema é que ele está demorando em torno de 5 segundos para desligar.

Já configurei como mostra na imagem do anexo.

CÓDIGO:

#define A0 PORTA.F0

#define A1 PORTA.F1

#define A2 PORTA.F2

#define A3 PORTA.F3

#define A4 PORTA.F4

#define A5 PORTA.F5

#define A6 PORTA.F6

#define A7 PORTA.F7

#define B0 PORTB.F0

#define B1 PORTB.F1

#define B2 PORTB.F2

#define B3 PORTB.F3

#define B4 PORTB.F4

#define B5 PORTB.F5

#define B6 PORTB.F6

#define B7 PORTB.F7

void main()

{

CMCON = 0b00000111; // Desabilita comparador

TRISA = 0b00111111; // Seta portas RA0-5 como entradas

TRISB = 0b00000000; // Seta todas as portas RB como saída

PORTB = 0b00000000; // Inicia com 0 nas saidas

PORTA = 0b00000000; // Inicia com 0 nas entradas

while(1) //LOOP INFINITO

{

/*COMANDOS DE DIRECAO EM REPOUSO*/

if(A0==0) //ENTRADA 0 for 0

{

delay_ms(10); //DELAY PARA CONFIRMAR SINAL

if(A0==0) //ENTRADA 0 for 0

{

B0=0; //desliga led

}

}

if(A0==1) //ENTRADA 0 for 1

{

delay_ms(10); //DELAY PARA CONFIRMAR SINAL

if(A0==1) //ENTRADA 0 for 1

{

B0=1; //liga led

}

}

}

}

Como podem ver, o LED deveria apagar no mesmo instante que eu deixasse de mandar nível 1 na entrada A0.

Alguém sabe qual o motivo desse atraso para o LED apagar?

post-156789-13884962482033_thumb.png

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Opa, beleza? Então, eu testei aqui em casa e funcionou, você está simulando ou já testou na prática? Pode ser problema do compilador também, já tive problemas semelhantes no MikroC Pro e só resolvi reinstalando.

Eu to simulando no fisico, só o PIC mesmo com o led na saida. Eu baixei o mikroC no site oficial, criei um novo projeto, compilei e usei o Pickit2 pra gravar o HEX no PIC.

Mesmo assim o atraso continua.

Link para o comentário
Compartilhar em outros sites

Compila isso e ve o que acontece;


#define B0 PORTB.F0
#define B1 PORTB.F1
#define B2 PORTB.F2
#define B3 PORTB.F3
#define B4 PORTB.F4
#define B5 PORTB.F5
#define B6 PORTB.F6
#define B7 PORTB.F7



void main()
{

CMCON = 0b00000111; // Desabilita comparador
TRISA = 0b00111111; // Seta portas RA0-5 como entradas
TRISB = 0b00000000; // Seta todas as portas RB como saída
PORTB = 0b00000000; // Inicia com 0 nas saidas
PORTA = 0b00000000; // Inicia com 0 nas entradas


while(1) //LOOP INFINITO
{

/*COMANDOS DE DIRECAO EM REPOUSO*/
if(A0==0) //ENTRADA 0 for 0
{
delay_ms(10); //DELAY PARA CONFIRMAR SINAL
B0=0; //desliga led
}

if(A0==1) //ENTRADA 0 for 1
{
delay_ms(10); //DELAY PARA CONFIRMAR SINAL
B0=1; //liga led
}

}

}

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Compila isso e ve o que acontece;


#define B0 PORTB.F0
#define B1 PORTB.F1
#define B2 PORTB.F2
#define B3 PORTB.F3
#define B4 PORTB.F4
#define B5 PORTB.F5
#define B6 PORTB.F6
#define B7 PORTB.F7



void main()
{

CMCON = 0b00000111; // Desabilita comparador
TRISA = 0b00111111; // Seta portas RA0-5 como entradas
TRISB = 0b00000000; // Seta todas as portas RB como saída
PORTB = 0b00000000; // Inicia com 0 nas saidas
PORTA = 0b00000000; // Inicia com 0 nas entradas


while(1) //LOOP INFINITO
{

/*COMANDOS DE DIRECAO EM REPOUSO*/
if(A0==0) //ENTRADA 0 for 0
{
delay_ms(10); //DELAY PARA CONFIRMAR SINAL
B0=0; //desliga led
}

if(A0==1) //ENTRADA 0 for 1
{
delay_ms(10); //DELAY PARA CONFIRMAR SINAL
B0=1; //liga led
}

}

}

Mesma coisa, estou pensando em usar um oscilador externo, cristal de 20MHz e ver no que dá. Só que esse atraso realmente ta muito estranho, acredito que o oscilador interno de 4MHz esteja funcionando corretamente, deve ter alguma coisa faltando aí.

Descobri que o comparador analógico pode não ter sido desligado, pois encostei um resistor na entrada A0 e o LED acendeu!!! Talvez o "CMCON = 0b00000111" não seja o suficiente para desligar o comparador analógico!

RESOLVI!

Para desabilitar o comparador tive que usar essas três linhas de programação:

CMCON = 0b00000111; // Desabilita comparadores analógicos

TRISA = 0b00000000;

TRISB = 0b00000000;

Porém não consegui usar o pino RA5 como entrada, tive que usar RA6, alguém sabe por quê?

Link para o comentário
Compartilhar em outros sites

RESOLVI!

Para desabilitar o comparador tive que usar essas três linhas de programação:

CMCON = 0b00000111; // Desabilita comparadores analógicos

TRISA = 0b00000000;

TRISB = 0b00000000;

??? Se voce configurou tudo como saida, quem será a entrada ??? e o quê que o TRIS tem a ver com os comparadores ???

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
??? Se voce configurou tudo como saida, quem será a entrada ??? e o quê que o TRIS tem a ver com os comparadores ???

Aí que tá, eu tenho que zerar o TRISA e TRISB senão os pinos não ficam digitais, e qualquer variação no pino de entrada pode acender o LED.

Link para o comentário
Compartilhar em outros sites

!!! Agora entendi qual deve sr o problema !!!

Será que você usou o resistor de PULL_DOWN no pino de entrada?? Se você não fez isso então é aí que mora o problema...

eu tenho que zerar o TRISA e TRISB senão os pinos não ficam digitais

Meu caro colega isso não existe em nenhum PIC, em nenhuma linguagem... Verifica o teu hardware.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Meu caro colega isso não existe em nenhum PIC, em nenhuma linguagem... Verifica o teu hardware.

Eu sei que não existe pois o TRIS serve para definir o que será entrada e o que será saída, mas foi o único modo para fazer funcionar sem resistores de pull-down. No meu circuito os pinos de entrada não estão ligados em nada.

Falando nisso eu não tentei usar resistores de Pull-Down nos pinos de entrada do PIC. Vou tentar usar os resistores junto com o TRISA configurado pra ver no que vai dar.

post-156789-13884962494791_thumb.gif

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!