Página 1 de 1

Enviado:
05 Ago 2010 13:39
por Andre_Cruz
O valor da ultima posição de memória corresponde ao valor que deve ser carregado no registrador OSCCAL, para garantir que o PIC trabalhe a 4MHz.
Para fazer o PIC 12C508A rodar a 4 MHz, coloque ele no seu gravador, e leia a memória de programa dele, a ultima posição é o valor calibrado pela Microchip para o oscilador funcionar a 4MHz.
Faz esse isso, que é pra funcionar!
Abraço
André Cruz
[Resolvido] PIC12C508A Configurar OSC

Enviado:
05 Ago 2010 15:04
por [Daniel]
Oi bom dia,
Alguém sabe como configurar o oscilador interno do PIC12C508A?
-Em linguagem Assembly
Parte do meu código:
- Código: Selecionar todos
;*******************************************************
LIST p=12C508A
#INCLUDE "P12C508A.INC"
;*******************************************************
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC
;*******************************************************
;MEMORIA DO PIC
;*******************************************************
;DEFINES ENTRADA E SAIDA
;*******************************************************
INICIO
MOVLW B'00000000' ;CONFIGURACAO DO OSCILADOR INTERNO
MOVWF OSCCAL
MOVLW B'11111001' ;CONFIGURACAO DOS PINOS ENTRADA/SAIDA
TRIS GPIO
CLRF GPIO
GOTO MAIN
;*******************************************************
MAIN
;PROGRAMA...
END
;*******************************************************
Como faço ele funcionar a 4mhz no RC interno? esta correto?
Obrigado

Enviado:
05 Ago 2010 16:01
por Djalma Toledo Rodrigues
- Código: Selecionar todos
MOVLW B'00000000' ;CONFIGURACAO DO OSCILADOR INTERNO
MOVWF OSCCAL
OSCCAL é a calibragem da frequência do Oscilador RC e
não Configuração.
No Programa do Gravador é onde esta a seleção do Oscilador e
outros.
DJ

Enviado:
05 Ago 2010 16:06
por [Daniel]
Uhm, então esta linha do meu programa não esta fazendo nada além de não definir nenhuma alteração na calibragem?
Sabes como eu deveria proceder?
por exemplo qual o valor deve ser inserido e onde coloca-lo... pelo que estava vendo tenho que por algum valor na ultima linha do meu .hex, é isso?

Enviado:
05 Ago 2010 17:24
por renatokodaira
Duas coisas:
- Pra selecionar ou configurar o uso do oscilador interno do 12c508, voce tem a linha __CONFIG onde voce estabelece IntRC_OSC o que estah correto. Outra forma pra fazer isso eh selecionar essa opçao quando for gravar o PIC, no programa que faz o controle do gravador (que voce pode modificar o que estabeleceu na linha __CONFIG).
- O 12C508A tem um valor de calibraçao que vem de fabrica e estah gravado na ultima posiçao de memoria. Nela tem uma instruçao MOVLW xx, onde xx eh o valor da calibraçao do oscilador interno. Se voce quiser que esse valor seja usado, basta colocar no começo do seu programa a instruçao
MOVWF OSCCAL que vai pegar o valor xx e usar no funcionamento do oscilador. Ao ligar o PIC, a instruçao MOVLW xx estah no vetor de reset e portanto eh executada toda vez que o PIC eh inicializado, como estah na ultima posiçao de memoria, o programa volta para o começo da memoria de programa e vai encontrar a sua instruçao MOVWF OSCCAL. Se voce nao quiser usar o valor da calibraçao, nao coloque essa instruçao no começo do programa. Se voce colocar (como fez) uma instruçao MOVLW 00, entao o oscilador vai usar o valor 0 como calibraçao do oscilador e muito provavelmente vai ter uma frequencia muito diferente de 4MHz (mas nao espere um valor muito preciso mesmo com o valor de calibraçao de fabrica). Para aplicaçoes nao sensiveis a temporizaçao precisa, seu codigo vai funcionar.

Enviado:
06 Ago 2010 16:13
por [Daniel]
Então colegas, novas:
Fiz a leitura na ultima linha havia o valor C50 deixei assim, no programa somente deixei o Intrc_osc lá no _config gravei, deu um erro na gravação mas do mesmo modo funcionou.
Removi a linha MOVWF OSCCAL.
Muito obrigado pela ajuda, funcionou tudo certinho!

Enviado:
06 Ago 2010 17:21
por Andre_Cruz
Daniel,
O valor de configuração do OSCCAL é de 8 bits, indo de 0x00 a 0xFF, geralmente é 0xFF ou 0xFD, não tem como ser 0xC50.
No datasheet do 12F675 tem um exemplo.
- Código: Selecionar todos
BSF STATUS, RP0 ;SELECIONA BANCO 1
CALL 3FFh ;SALTA PARA A ULTIMA POSIÇÃO DA MEMÓRIA
MOVWF OSCCAL ;CALIBRA O OSCILADOR INTERNO
BCF STATUS, RP0 ;SELECIONA BANCO 0
Abraço
André Cruz

Enviado:
06 Ago 2010 18:11
por renatokodaira
Nao Andre, o 12C508A eh diferente do 12F675/629 com relaçao ao valor de calibraçao. Porque na ultima posiçao de memoria do 508 tem uma instruçao MOVLW xx enquanto que no 675 tem uma instruçao RETLW xx.
O valor de calibraçao de ambos eh de 6 (seis) bits, sendo posicionados do bit 7 ao bit 2 (portanto os valores de calibraçao variam de 4 em 4).
Como o opcode da instruçao MOVLW xx eh 1100 bbbb bbbb entao o digito hexadecimal mais significativo tem que ser "C" mesmo. Ou seja o PIC do Daniel tem valor de calibraçao $50 ou 0101 0000 onde somente 010100 eh usado.

Enviado:
06 Ago 2010 22:34
por Andre_Cruz
Olá Renato, tudo bem ?
Pensei que a configuração do oscilador interno do 12C508 fosse igual a do 12F675, desculpa falha nossa rsrsrss
Valew pela dica
Abraço
André Cruz

Enviado:
07 Ago 2010 09:28
por renatokodaira
Olá Renato, tudo bem ?
Pensei que a configuração do oscilador interno do 12C508 fosse igual a do 12F675, desculpa falha nossa rsrsrss
Valew pela dica
Abraço
André Cruz
Oi Andre !
Que eh isso, a culpa nao eh sua, eh da Microchip que fica mudando as coisas de modelo pra modelo, he he he. Precisamos tomar cuidado quando nos acostumamos com um modelo de PIC e passamos a usar outro modelo. Jah pastei por causa disso e mesmo assim esse problema sempre se repete.
Outra dica: sempre que vou usar um novo PIC12F629/675 eu leio o valor da calibraçao e anoto numa etiquetazinha grudada em cima ou embaixo do chip, porque esses valores sao apagaveis, e depois dah o maior trabalho pra se descobrir ou recalbrar o oscilador de novo.
abs