Página 1 de 1
Registrador OSCCAL no 16F676

Enviado:
20 Abr 2007 10:25
por Adauto sampaio
Bom dia. Estou trabalhando com um 16F676, e quando gravo, aparece uma msg dizendo que a memória de calibração não está programada. Ele grava tudo certo (apesar de ainda ter que acertar o programa). Sei que tem a ver com a calibração do oscilador interno, então como faço para acertar isso?
Obridago e abraços a todos!!!

Enviado:
20 Abr 2007 14:11
por zielpunkt
Vc poderia postar literalmente o cabeçalho do seu código (fuses, processor, includes, etc) e a mensagem do MPLAB que aparece? Assim fica mais fácil de identificar o problema, ok.
Abço.

Enviado:
20 Abr 2007 14:58
por Adauto sampaio
Boa tarde Zielpunkt. Aqui vai o cabeçalho:
ERRORLEVEL -302
__CONFIG _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _WDT_ON & _PWRTE_ON & _CP_OFF & _BODEN_OFF
#include <p16f676.inc>
Depois que termina a programação e vai para a verificação (verifying), aparece uma janela escrito na barra de cima:
Calybration memory not programmed
E no centro da janela:
Calibration memory is already programmed. seguido de uma tecla OK.
O programa funciona, mas quero saber o por que da mensagem, o que preciso fazer. Ah, detalhe, uso o McFlash direto pelo MpLab.
Abraços!!!
zielpunkt escreveu:Vc poderia postar literalmente o cabeçalho do seu código (fuses, processor, includes, etc) e a mensagem do MPLAB que aparece? Assim fica mais fácil de identificar o problema, ok.
Abço.

Enviado:
20 Abr 2007 15:44
por zielpunkt
Ele está te informando que já gravou o OSCCAL com o valor armazenado no ultimo endereço do mcu, que tá tudo bem, mas que vc precisa dar OK pra ele ficar feliz

. (aperta o OK senão dá caca, pq ele não conclui o procedimento de gravação). Just It! É esquisito, mas é assim pra alguns micros da linha - conforme-se. Se algum gênio tiver alguma teoria à respeito do por que disso, ela será bem vinda...
É isso

Enviado:
20 Abr 2007 16:13
por Adauto sampaio
Valeu Zielpunkt, tava achando que tinha alguma caca por lá, mas o programa funcionou perfeito. Brigadão.
Abraços

Enviado:
20 Abr 2007 20:04
por Rota
Eu fiz o seguinte teste:
li o ultimo endereço de um micro 16f675 novo, anotei esse valor para não perder a calibração, alterei esse valor, mandei gravar, depois de gravado li novamente, e o valor voltou ao que veio de fabrica, ou seja, mesmo se vc apagar o endereço, ele ve o melhor valor para o oscilador e escreve no ultimo endereço.
acho que é isso

Enviado:
20 Abr 2007 20:15
por zielpunkt
Meio difícil, hein, Rota. Nunca tentei alterar o OSCCAL, mas qual foi esse procedimento de apagar e regravar um novo valor no OSCCAL, que não regravou? Posta o que vc fez e o seu código ai pra gente ver, ok.
Abço.

Enviado:
21 Abr 2007 09:06
por otavio luiz
o gravador só ira gravar nessa posição se existir um valor, se voce colocar na ultima posição da memória e mandar ele gravar ele grava e apaga o que estava la e não existe nenhum método de auto recuperação, voce tem que fazer na mão mesmo depois.

Enviado:
23 Abr 2007 00:29
por Rota
gente, pra variar falei merd.....
Eu tambem tava encucado com essa mensagem, como a mensagem tinha a palavra calibration, eu ja pensei, caracas, se eu por ventura mudar acidentalmente o ultimo valor da memoria (que contem o valor para calibrar o oscilador interno), o mplab acerta novamente, que
maravilha.
Então eu mudava o valor (dentro do mplab: view-> program memory), mandava gravar, depois lia, e para o meu espanto, o valor voltava para o que veio de fabrica!!! que chique o compilador calibrava o micro e escrevia no ultimo endereço.
Hoje fui ver direito, não foi o mplab que calibrou o micro e escreveu no ultimo endereço, é que o MPLAB não deixa escrever nesse endereço, justamente para não perder o valor da calibragem do pic.
Se voce for em programmer-> settings->memory rangers desmarcar auto select memory areas and range e tentar colocar no endereço final o valor 03ff, o compilador não aceitara, só aceitara até 03fe.
Agora, se voce editar o arquivo pic12f675 (que esta dentro da pasta device), e tirar essa linha:
calmem (region=0x3FF-0x3FF)
ai sim, voce pode alterar o valor que esta no endereço 03ff que o mplab ira gravar no micro o valor que voce colocar la. (não aparece mais a
mensagem)
zielpunkt, eu não não usei nenhuma linguagem para fazer esse teste, eu alterei os valores dentro do mplab. Quando voce escreveu :
"Ele está te informando que já gravou o OSCCAL com o valor armazenado no ultimo endereço do mcu"
está correto?? pois o osscal esta na ram, o mplab não iria escrever na ram do pic, correto?
então resumindo:
no ultimo endereço da memoria de programa tem o comando RETLW XX aonde XX é o valor da calibragem,
na inicialização do micro tem esse bloco de comando:
call 0x3FF ; retrieve factory calibration value
bsf STATUS,RP0 ; set file register bank to 1
movwf OSCCAL ; update register with factory cal value
bcf STATUS,RP0
ele chama a subrotina em 3ff, que dela retorna em W o valor da calibragem e move para o registro OSSCAL.
a mensagem que o mplab apresenta, é informando que a memoria de programa não foi calibrada, ou seja, o programa do pic que esta na memoria do pc, foi transferido para o microcontrolador, menos o ultimo
endereço, que contem o valor de fabrica, e que o micro ja esta calibrado.
é isso mesmo??? o falei mais merd.....
marcelo

Enviado:
23 Abr 2007 12:28
por zielpunkt
Rota,
Não é questão de falar m**** ou não, isso é bobagem. A questão é apenas de conceito. O que eu quis dizer de forma simples é que o MPLAB informa que recuperou, em tempo de compilação, e carregou, durante a gravação, o registrador OSCCAL com o valor que encontrou no endereço 0X03FF. Se vc quiser (ou precisar) mudar o valor de calibragem do oscilador interno que vem de fabrica pode escrever:
- Código: Selecionar todos
ORG 0x03FF ; endereço do valor default (fábrica)
DATA 0x058 ; exemplo de novo valor desejado, que substituirá o default
...antes de executar as linhas de código que fazem a calibração. Se quiser apenas alterar para um novo valor, sem alterar o default, pode escrever:
- Código: Selecionar todos
MOVLW 0x06A; exemplo de novo valor para o oscilador
MOVWF OSCCAL; carrega o OSCCAL com esse valor, e só.
..sem executar mais nenhum código de calibragem. Escrever valores de calibragem no OSCCAL é comum quando se utilizam os chips de 'janela' (apagáveis por UV) tipo 12C508, etc, que possuem oscilador interno e que vc deve primeiramente ler e anotar aquele valor para então inserir no código como está no ultimo exemplo. Se não me engano, alguns compiladores alternativos não garantiam a preservação desse valor mesmo para mcu com flash, e ai vc tinha que fazer o mesmo procedimento dos de 'janela', como já expliquei.
Abço.

Enviado:
25 Abr 2007 18:59
por Andre Rasminio
Pelo que conheço deste micro ele tem 6 bits de calibração dentro do registro OSCCAL. A frequencia interna pode variar em torno de 4MHz, pois depende da temperatura de operação de também da alimentação.
Eu já trabalhei com este pic e quando se calibra, a frequencia crava em 4MHz.