Página 1 de 1
Problema com PIC16F877A

Enviado:
02 Jun 2010 10:55
por rflbeck
Olá para todos!
Sou novo no desenvolvimento de aplicações com PIC.
Estou tentando fazer funcionar um PIC16F877A com um cristal externo de 12MHz.
Eu pretendo fazer o PIC ler a informação de alguns sensores e mostrar em um LCD 16x2, mas por enquanto fiz um código pisca pisca de LED para testar o PIC. O projeto com o LCD eu ja tenho e simulando no proteus funciona direitinho.
Meu problema é que nada funciona quando ligo tudo na protoboard.
O circuito que eu fiz para testar esta da seguinte forma (Ligado em uma Protoboard):
Pinos 12 e 31 no terra, pinos 11 e 32 em +5V
O Cristal de 12Mhz esta ligado nas portas 13 e 14 do PIC, em cada saída do cristal há um capacitor de 22pF e o LED ligado na porta RA0 (pino 2)
Quando ligo o circuito, o LED pisca uma vez e apaga, depois disso não acontece mais nada.
Uma coisa curiosa é que se eu coloco o dedo no fio que liga o cristal ao PIC, o LED acende (algum fenômeno de eletronica que eu não faço idéia do que seja, pois meu conhecimento de eletronica é limitado).
Simulando isto no proteus novamente tudo acontece direitinho (logo o código deve estar certo).
Um teste que eu fiz foi usar um PIC16F628A com oscilador interno e funcionou tanto no proteus quanto na protoboard, então acredito que meu gravador também esteja funcionando.
Alguem tem idéia do que eu posso estar fazendo de errado?
GRato.

Enviado:
02 Jun 2010 11:02
por rafael.wachter
configuration bits: colocou como HS_OSC?
MCLR: colocou um botão? ligou direto no VCC?

Enviado:
02 Jun 2010 11:16
por rflbeck
Hmmm
Não estou com o código aqui, mas vou verificar.
Se não me engano eu coloquei XT_OSC e MCLR_OFF no configuration bits.
Vou confirmar...

Enviado:
02 Jun 2010 12:43
por tmarchesi2
Ja passei por situações semelhantes:
- Tente colocar um capacitor de 100nf o mais próximo possível do pino de alimentação. Parace besteira mas faz diferença.
- Tente trocar o cristal por um outro de mesmo valor, ja tive problemas com cristal sendo novo fazendo papel de antena.
- Se você possuir um limpa contato, tente passar nesta região do protoboard (não confunda com WD40).
Abraço; Se funcionar posta pra gente o problema !

Enviado:
02 Jun 2010 13:13
por rafael.wachter
no 628A funcionou com oscilador interno.. blz com MCLR off... blz
mas no 877A, ele não tem oscilador interno e tbm não tem como tu desabilitar o MCLR, ou seja, se tu tah usando um cristal de 12MHz coloca HS_OSC (ateh 4MHz eh XT_OSC e acima de 4MHz eh HS_OSC) e o pino MCLR coloca ligado direto no VCC ou coloca um botão e um resistor de pull-up

Enviado:
02 Jun 2010 18:22
por Cleber
Cara pelo que andei olhando não tem como desligar o MCLR do 877, outra coisa coloca o cristal o mais proximo possivel dos pinos do pic.

Enviado:
03 Jun 2010 12:37
por Andre_Cruz
rflbeck,
Enfentei um problema parecido essa semana, os capacitores de 22pF estavem com pau !
Retire os capacitores do cristal da protobord, e teste !
Abraço
André Cruz

Enviado:
03 Jun 2010 13:30
por renatokodaira
As vezes o circuito oscilador a cristal nao funciona no protoboard (principalmente os mais porcarias) por causa de capacitancias parasitas entre os contatos. Esse parece ser o seu caso, pois funciona colocando o dedo. Jah nao eh a primeira vez que alguem reporta esse problema. O jeito eh montar em circuito impresso ou usar um clock externo (daqueles osciladores retangulares de 4 pinos de metal).

Enviado:
08 Jun 2010 00:38
por rflbeck
rafael.wachter escreveu:no 628A funcionou com oscilador interno.. blz com MCLR off... blz
mas no 877A, ele não tem oscilador interno e tbm não tem como tu desabilitar o MCLR, ou seja, se tu tah usando um cristal de 12MHz coloca HS_OSC (ateh 4MHz eh XT_OSC e acima de 4MHz eh HS_OSC) e o pino MCLR coloca ligado direto no VCC ou coloca um botão e um resistor de pull-up
Boa noite para todos!
Bem, agradeço muito a ajuda de vocês e também peço desculpas pela demora da resposta, porém estes ultimos dias faltou tempo para eu dedicar-me ao meu projeto. Mas acabou de funcionar e eu ja vim postar aqui.
Enfim funcionou, eu alterei de XT_OSC para HS_OSC conforme a dica do nosso amigo e deu certo. Claro que não foi de primeira, tive que eliminar alguns fios com mal contato, trocar capacitores, fazer uma oração, etc...
E pra ajudar no meio do processo acabei queimando o PIC, ainda sim foi bom pois achei uma loja que vende mais barato.
Para encerrar, como eu havia dito sou iniciante, o que consegui ate agora foi piscar alguns LEDs, agora vou continuar com o projeto mesmo.
Obrigado a todos que ajudaram e espero contar com voces se aparecer mais algum problema.

Enviado:
08 Jun 2010 09:03
por rafael.wachter
estamos ae pra isso, ajudar

Continuando...

Enviado:
08 Jun 2010 16:20
por rflbeck
E ai galera!!
Bom, ja consegui bastante coisa, liguei meu LCD 16x2 no PIC, consegui fazer funcionar certinho, só tem uma coisa que ainda não esta certo.
Eu estou alternando o texto do display, seria para acontecer o seguinte, a cada segundo ele deveria trocar a mensagem "Texto1" e "Texto2", eu uso entre as trocas a função Delay_ms(1000); que seria para dar o tempo de 1 segundo, mas troca muito rápido, não chega a dar meio segundo.
O que eu devo fazer para ajustar isso?
Estou usando um Crystal de 12MHz, programando em MikroC, o clock que fica definido no mikroC influencia nisso? tenho que colocar o mesmo valor do crystal?
Há algum cálculo que preciso fazer?

Enviado:
08 Jun 2010 17:03
por Rodrigo.rb3s
rflbeck,
Aumenta o valor que vc está jogando em W antes de chamar a rotina delay se vc já estiver uzando 255 entao vai ter que criar uma outra rotina de atraso de tempo com uma variavel a mais, mas pode ser usada a mesma rotina de delay que o display de lcd usa pra ser inicializado, que funciona...
que linguagem voçe está usando assembly ou c?

Enviado:
09 Jun 2010 09:03
por rflbeck
Rodrigo.rb3s escreveu:rflbeck,
Aumenta o valor que vc está jogando em W antes de chamar a rotina delay se vc já estiver uzando 255 entao vai ter que criar uma outra rotina de atraso de tempo com uma variavel a mais, mas pode ser usada a mesma rotina de delay que o display de lcd usa pra ser inicializado, que funciona...
que linguagem voçe está usando assembly ou c?
Estou programando em C.
Não sei o que quer dizer este "W"


Enviado:
09 Jun 2010 09:38
por Sergio38br
Qual o valor do clk que vc colocou nas definições do projeto no mikroC, este usa o valor declarado para calcular os delays.
[ ]'s
Sergio

Enviado:
09 Jun 2010 09:44
por rflbeck
Sergio38br escreveu:Qual o valor do clk que vc colocou nas definições do projeto no mikroC, este usa o valor declarado para calcular os delays.
[ ]'s
Sergio
Opa!
Acho que resolveu, antes eu havia colocado 8MHz, agora eu coloquei 12MHz (o mesmo valor do Crystal), agora acho que esta funcionando.