Ir ao conteúdo
  • Cadastre-se

Recommended Posts

Olá,

Eu estou com um projeto em mente e pretendo utilizar um microcontrolador PIC 16F877A nele. Então, como não tenho muita experiência, resolvi tentar aprender como mexer neste microcontrolador e, de início, quis fazer um LED Blink, no qual um LED apenas piscará.

Para isso, utilizei o programa MikroC PRO for PIC com o seguinte código:

void main() {
  TRISB = 0;
  PORTB = 0;

  do {
    PORTB = 0;
    Delay_ms(500);
    PORTB = 1;
    Delay_ms(500);
  } while(1);
}

Configurei o programa para utilizar um oscilador RC (pois no momento não tenho um cristal) e compilei. Utilizei o Pickit 3 juntamente com o MpLab IPE para enviar para o PIC. O programa relatou que enviou/programou o PIC com sucesso.

Fiz as seguintes ligações em protoboard:

Gk7xBi0.png

 

Fiz estas ligações seguindo a imagem esquemática do PIC no datasheet:

uHBFqtb.png

 

O LED simplesmente permanece desligado durante todo o tempo, sem nem ao menos dar uma piscadela sequer.

Desculpem se foi algum erro "bobo", mas preciso de ajuda para fazer funcionar um projetinho desse, já que a partir daí virão outros.

Editado por Darnley da Silva
Inclusão da imagem do datasheet

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja com + carinho o d.s. os valores para oscilador RC e também COMO devem ser ligados. Penso ser da ordem de dezenas de K e alguns pF´s no máximo nF´s . Obviamente o correto valor de delay() depende disso.

Olha esta taquigrafia...

while(1)

{

PORTB^=1;

delay(xxx);

}

Vai dar a lesma lerda com bytes a menos.

Piscou 1 led? Falta pouco pra dominar o mundo!

Não use led verde

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continuando a partir da Isadora, Figura 14-3 - RC OSCILLATOR MODE.

Rext entre 3k e 100k e Cext maior que 20pF.

Essa constante de tempo está em 0,1s (muito alta). Selecione um capacitor com valor entre 22pF e 220pF.

Você configurou a seleção da palavra de controle para oscilador RC? Mesmo assim, com essa constante de tempo, acho que haveria alguma incompatibilidade.

MOR_AL

Editado por MOR

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Isadora Ferraz disse:

Veja com + carinho o d.s. os valores para oscilador RC e também COMO devem ser ligados. Penso ser da ordem de dezenas de K e alguns pF´s no máximo nF´s . Obviamente o correto valor de delay() depende disso.

Olha esta taquigrafia...

while(1)

{

PORTB^=1;

delay(xxx);

}

Vai dar a lesma lerda com bytes a menos.

Piscou 1 led? Falta pouco pra dominar o mundo!

Não use led verde

Ah, obrigado Isadora, realmente eu havia olhado a parte do datasheet sobre osciladores de forma rápida e confundido 20pF com 20uF. Mas acha o problema seja somente este? Seria melhor utilizar um cristal para isso?

 

31 minutos atrás, MOR disse:

Continuando a partir da Isadora, Figura 14-3 - RC OSCILLATOR MODE.

Rext entre 3k e 100k e Cext maior que 20pF.

Essa constante de tempo está em 0,1s (muito alta). Selecione um capacitor com valor entre 22pF e 220pF.

Você configurou a seleção da palavra de controle para oscilador RC? Mesmo assim, com essa constante de tempo, acho que haveria alguma incompatibilidade.

MOR_AL

Realmente, acabei deixando isso passar. Como calcula-se essa constante de tempo? Qual a melhor forma de dimensionar o circuito RC para essa finalidade? Quando você diz "seleção da palavra de controle", isso seria a configuração de qual será a fonte de oscilação? Obrigado pela resposta!

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, Darnley da Silva disse:

Mas acha o problema seja somente este?

Talvez

1 hora atrás, Darnley da Silva disse:

Seria melhor utilizar um cristal para isso?

Sim!

1 hora atrás, Darnley da Silva disse:

"seleção da palavra de controle", isso seria a configuração de qual será a fonte de oscilação?

Sim!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, obrigado pela ajuda de ambos! Eu refiz o circuito utilizando um cristal de 9MHz e agora está funcionando.


Segue a montagem: 
njstZZL.png

 

Segue o código, sugerido pela Isadora:

void main() {
  TRISB = 0;
  PORTB = 0;

  do {
    PORTB ^= 1;
    Delay_ms(500);
  } while(1);
}

Novamente, agradeço a ajuda de ambos!

Editado por Darnley da Silva

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, Nao Sei disse:

@Darnley da Silva O crystal no proteus não é simulado.A frequência você deve determinar clicando em cima do pic,e trocando o clock dele,o crystal é apenas enfeite.

Estou ciente disso, só utilizei ele para montar o circuito e postar aqui. Na realidade, estou utilizando um cristal de 9MHz ou 20MHz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×