Página 1 de 1

Configurações de timers permanecem pós regravações, né?

MensagemEnviado: 21 Jul 2011 23:32
por loowiz
Boa noite a todos!!

Passei por uma situação um tanto quanto estranha, porém acredito que vocês possam me ajudar com uma explicação simples...

Costumo usar uns defines pra configurar timers (habilitar, desabilitar, prescalers, etc), ints e uma porção de outras coisas. Até aí nenhuma novidade, certo? Bom, só pra situar, estou programando em C com CCS+MPLAB.

Blza, o ponto que quero chegar aconteceu esses dias comigo, utilizando as funções delay_ms() e delay_us(). Sempre uso um esqueleto padrão pra iniciar um projeto, e acabei deixando rodar uma parte do código que habilitava alguns timers e setava prescaler, etc. Como nunca tinha usado oscilador interno do PIC16F628, fui fazer um led piscar usando as funções de delay citadas e o led aparentemente nao piscava O.o

Neste ponto cheguei a desconfiar de nao estar programando corretamente o oscilador interno, mas vi que não era isso...

Certo, revirei o código várias vezes, mas o resultado nao mudava. Até que percebi que um delay_ms(10) tava demorando vários segundos... Ou seja, as configurações de prescaler zuaram as funções de delay o.O??

Desconfiei que a regravação nao modificava os SFR que configuram os timers (e outros dispositivos internos), e troquei o pic por um virgem... gravei o mesmo código e rodou sem problemas com o delay no tempo certo...

Normalmente não uso esses delays, mas achei estranho o que aconteceu.
As perguntas são: realmente a regravação nao meche nessas áreas do pic? Se não, como "formatar" o pic? Como funcionam por dentro essas funções de atraso, alguem sabe?

Re: Configurações de timers permanecem pós regravações, né?

MensagemEnviado: 22 Jul 2011 00:01
por andre_luis
As funções de atrazo executam um loop fechado, e o que eu apostaria, é que alguma interrupção está ocorrendo e por consequencia está atrapalhando o Delay ( ou seja, o que deveria levar 10ms, pode estar terminando em muito mais que isso ).

Mas francamente, acredito mais na possibilidade de ter havido um problema na gravação.


+++

MensagemEnviado: 23 Jul 2011 20:12
por RobL
Se seus chips forem iguais e novos (fabricado a poucos anos) não precisa ler o que vem a seguir e não sei o que pode ter dado este problema.

Você cita o PIC16F628 (este é antigo).
Se o chip que chamou de virgem for mais novo que o anterior ou ainda for um PIC16F628A e o outro um 628 (sem A) e o delay usa o Timer 1 aí tem um bug chamado "Timer 1 Module Silicon Bug ".
Há uma dependência "janela" de tempo em função da FCLK para carregar o Timer1H.
Seu compilador pode estar desenhado para chips fabricados recentemente.
Porém, penso que essas funções delay() não usam timer, verifique. Neste caso, pode ter informado o chip de forma errada (sem A e com A ou algo similar).

MensagemEnviado: 23 Jul 2011 20:47
por Andre_Cruz
loowiz,

Ná página 24 do datasheet descreve o registrador PCON o bit3 OSCF determina a frequência de trabalho, 0-> 37KHz e 1-> 4MHz.

Verifique as configurações dos fuses no ccs e verifique esse registrador PCON.

Abraço

MensagemEnviado: 25 Jul 2011 21:38
por loowiz
Pessoal, muito obrigado pelas dicas!!!

RobL, são 628A sim, acabei me esquecendo de colocar o "A" no tópico...

Descobri que o problema era ainda mais estranho... o Pic só tá rodando com um nível de tensão pouco abaixo de 5V, 4.9V pra ser mais exato, acima disso o Led que usei como teste pára de piscar (ou fica com delay muito acima do esperado)...

Percebi isso pois na mesma montagem estava ligando um display 16x2 com BL... como estava mantendo o BL ligado direto na fonte a tensão tinha uma queda e acreditei que estava rodando normal... Por algum motivo eu desliguei o BL e meu Led de teste parou de piscar... troquei por outras fontes até usar uma ajustável e batata... variando-se a tensão pra algo abaixo dos 4.90V ele aparentemente funciona normalmente, acima disso fica travado...

Alguma sugestão pra este fato?! O oscilador interno pode estar descalibrando com a diferença de tensão?!

ps.: viajei legal nas hipóteses iniciais hehehehe, faz parte!!

MensagemEnviado: 25 Jul 2011 21:57
por RobL
Como não vemos seu hardware, vamos no básico.
Isto parece mais ruído que outra coisa.
Tem capacitor cerâmico de 100nF entre Vss e Vdd (bem em cima dos pinos). ?

O oscilador interno não vai alterar a frequencia a ponto de lhe dar algum efeito visual. Considere, neste caso, a F constante em função de Vdd.

Parece que o circuito tem portas ligadas por aí, não tem um simples led.

Se houver alguma porta, dependendo dela se for Smith Trigger ou Vcc/2, pode ter algo que acima dos 4,9V gere interrupção não tratada, ou por varredura, mude o estado e entre em uma rotina estranha qualquer.

Tente primeiro o C sobre o chip, conforme acima.