pic12f675

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

pic12f675

Mensagempor rebelk » 10 Set 2008 20:07

o pic12f675 possui uma libração no oscilador , alguem poderia me explicar para que serve e como e feita essa calibração , eu não entendi porque os pic da serie 16f nao precisa e os da serie 12f precisa .

estou ultilizando o ccs c
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor Djalma Toledo Rodrigues » 10 Set 2008 21:50

O PIC12Fxxx possui um oscilador interno de 4.0 MHz (opcional). O Dado de Calibração esta no endereço maior , o último, da Memória de Programa, porisso não é recomendado acionar a função Apagar do Gravador de Programa. De qualquer modo pode voltar a ser Recalibrado, veja instruções para isso na Microchip.

Bichinho bom esse PIC12F.
Editado pela última vez por Djalma Toledo Rodrigues em 11 Set 2008 10:12, em um total de 2 vezes.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor renatokodaira » 11 Set 2008 09:38

1) Nem todos PICs 16F tem oscilador interno (por ex. 16F84 e 16F877). O 16F628 tem oscilador interno mas nao tem calibraçao. O 16F819 tem oscilador interno e tem calibraçao. Isso depende do modelo.

2) O 12F675 tem oscilador interno e se ativado pode ser ou nao calibrado. Pra calibrar voce precisa escrever um valor de 6 bits no registrador OSCCAL, e isso nao é feito automaticamente ao se configurar o uso do oscilador interno. Precisa ter algumas instruçoes no seu firmware pra fazer isso. Adicionalmente, de fabrica vem um valor de calibraçao (pra determinada condiçao de tensao de alimentaçao e temperatura de operaçao) que pode ser lido e depois escrito no OSCCAL. Esse valor fica no ultimo endereço da FLASH (3FFh). Se voce nao fizer esse procedimento, o clock do oscilador interno nao vai funcionar calibrado.

3) Como o oscilador interno pode variar a frequencia dependendo de fatores externos e de alimentaçao, o 12F675 pode ser calibrado para que seja compensada essa variaçao. Por ex. aplicaçao em ambiente de temperaturas mais altas ou com tensao diferente da usada pelo valor de fabrica. Assim voce pode fazer um ajuste fino, o que é uma vantagem. Num 16F819, nao vem um valor de fabrica, mas voce pode calibra-lo escrevendo valores de 6 bits no registrador OSCTUNE.

4) De qualquer forma a precisao e estabilidade do oscilador interno (com ou sem calibraçao) nao eh grande coisa, para aplicaçoes sensiveis a precisao do clock, é melhor usar cristal ou ressonador ceramico.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Djalma Toledo Rodrigues » 11 Set 2008 10:15

Renatokodaira Minha msg acima foi editada afim corrigir lapso.
Abraço e obrigado.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor rebelk » 11 Set 2008 11:22

PORQUE NÃO RODA LEGAL , PARECE QUE A LEITURA DO AD ESTA LOUCA , SERA QUE TEM ALGUM ERRO .


// progama TESTE

#include <12f675.h>
#device adc=16 // Configura o compilador para conversor A/D de 10 bits
#rom 0x3ff = { 0x34b4 } // RETIREI O LIVRO DO FABIO , PORQUE ESSE VALOR EU NÃO ENTENDI AINDA DIREITO.

#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT

#define pwm_1 pin_a4

int8 set_pwm_1=0;

int8 serra=0;

int16 V=0;

boolean fleg=0;


//**********************************************************************
//**********************************************************************


#int_timer0
void trata_t0 ()
{

if(serra < set_pwm_1 )
{
output_high(pwm_1);
}
else
{
output_low(pwm_1);
}

// serra++;
serra++;
if(serra >= 100)
{
serra=0;
}


set_timer0(200); // recarrega o timer 0


}
//**********************************************************************
//**********************************************************************

ler_ad()
{
int16 V=0;
int32 T=0;

T= (int32)read_adc()*100;
V= (int16)T/1024;

return V;
}
//**********************************************************************
//**********************************************************************

void main()
{

set_timer0(190); // carrega o timer 0 com 155
setup_timer_0 ( RTCC_INTERNAL );// configura o timer 0 para clock interno
enable_interrupts ( global | int_timer0 ); // habilita interrupções


setup_adc_ports( AN2_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL);

//setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
//setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

set_adc_channel(2);
delay_us(20);

while (true)
{
delay_ms(50);
set_pwm_1=ler_ad();

}
} //////////////////////////////////
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor turuna » 11 Set 2008 12:26

Caros companheiros já fiz alguns testes um pouco mais rigoroso com relação aos osciladores internos dos pics como segue:

Com relação ao 12F675; quando se utiliza o mplab o própio se encarrega de gravar a correção do oscilador interno quando esse se encontra muito deslocado apenas pedindo a permissão para isto.

Fui obrigado a testar a performance do oscilador interno do pic 16F628A por questão de utilização dos pinos da seguinte maneira:

Inicialmente fiz um pequeno programa para comunicação via usart utilizando 9600 e com cristal externo de 4 Mhz;
após comprovado o funcionamento simplesmente reconfigurei para utilizar o oscilador interno na mesma frequência;

primeiramente utilizando um soprador com ar quente e com auxílio de um termometro aqueci a mais de 150 graus quase a ponto de derreter a solda, aguardei estabilizr a temperatura aos 100 graus e liguei para testar, para a minha surpresa o funcionamento foi normal refiz os testes com outras 10 amostras as quais funcionaram normalmente. Mantive os teste contínuo até que os chip retornassem a temperatura ambiente, e após isso fiz o inverso colocando-os em um congelador até que chegassem a zero graus e tb funcionaram normalmente.

Conclusão:
Na velocidade de 9600 baulds tenho utilizado sem um cristal externo sem nenhum problema, que houve alguma alteração tenho certeza, mas não ao ponto de provocar erro na comunicação serial.
O oscilador interno dos pics superaram minhas expectativas com relação a estabilidade.

Turuna
turuna
Nibble
 
Mensagens: 97
Registrado em: 10 Mar 2008 12:50

Mensagempor Djalma Toledo Rodrigues » 11 Set 2008 12:44

turuna escreveu: O oscilador interno dos pics superaram minhas expectativas com relação a estabilidade.

Fico feliz, (Microchip tmb acredito) que tenha superado suas expectativas mas...
Essa não é a forma correta de analisar a estabilidade do Oscilador. O correto seria ligar em um pino do PIC que saia o Osc/4, um Frequencímetro, já que a medição direta no Oscilador seria um pouco complicado.

Abraço.

P.S. Os bicinhos sofreram pakas :D
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor turuna » 11 Set 2008 13:56

Caro Djalma, no meu texto não mencionei que era a maneira correta ou não de testar um oscilador, apenas fiz referência prática ao modo específico para o caso em questão (utilização da usart a 9600 com oscilador interno) e que tb mencionei que com certeza há desvio, mas que não prejudicou o desempenho para aquele uso específico, e aproveitando a deixa, tenho visto colegas sugerir que pra utiizar a usart do pic deve-se utilizar sempre um cristal, e comprovei que nem sempre é assim, dentro de certos limites, quem duvidar que teste........e tira a prova.

E por falar que os bichinhos sofreram, tb já alimentei os carinhas com 12vcc durante 5 minutos e acreditem não queimou não.....rsssssssss.

Turuna
turuna
Nibble
 
Mensagens: 97
Registrado em: 10 Mar 2008 12:50

Mensagempor Djalma Toledo Rodrigues » 11 Set 2008 21:10

Quem falou isso da UART, certamente conhece pouco de UART
1º Que em um pulso de 960 Bauds cabem mais de mil instruções do PIC a 4 MHz.
2º A USART se sincroniza a cada pulso de START
3º O START, DADOS e STOP são verificados no Centro do Pulso, de modo que é extremamente tolerante a freq., ou a velocidade de transmissão.

Pelas razões acima é que disse que não é possível avaliar a estabilidade do Osc. do PIC, por esse método.

O PIC12Fxxx é realmente muito robusto.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor microcontrolador.pic » 11 Set 2008 23:03

Djalma Toledo Rodrigues escreveu:O PIC12Fxxx é realmente muito robusto.


E é verdade mesmo. Mês passado montei um projetinho com esse PIC e sem querer apliquei uma tensão de 15v nos terminais de alimentação. Eu pensei que ele tinha fritado! (realmente ele esquentou bastante). Depois fui testar e estava tudo funcionando. (mesmo depois da bordoada no lombo do bichinho)
Avatar do usuário
microcontrolador.pic
Nibble
 
Mensagens: 50
Registrado em: 08 Set 2008 19:51

Mensagempor turuna » 12 Set 2008 12:08

Eu sei o suficiente para desenvolver projetos em uma empresa renome nacional, essas informações passadas são pra pessoas que querem aprender umas com as outras e não pra aqueles que ja sabem mais que todos...........................e gostam de questionar informações simples com o intuito de compartilhar, aprender, compartilhar informações são realmente pra poucos e ler e tirar proveito do que é bom e ignorar o que não é o suficientemente bom, que tal montar um cursinho de como passar informações de maneira correta no fórum, a eu gostaria que aqueles que se acham donos da verdade deixassem os burrinhos dar suas opiniões sem serem atropelados de qual maneira é correta ou não. Está cheio de engenheiros por ai levando surra de técnicos burrinhos que não sabem escrever aquilo que sabem. rsssssssssssssssssssss.

Turuna :P
turuna
Nibble
 
Mensagens: 97
Registrado em: 10 Mar 2008 12:50

Mensagempor rebelk » 12 Set 2008 12:39

como posso identificar que o oscilador da 12f675 esta calibrado , no progama que mencionei acima , eu não consigo gerar uma interrupçao interna pelo timer0 , sera que a configuração e recarga do timer0 esta correta ? ou no 12f675 se configura de outra forma ?



#rom 0x3ff = { 0x34b4 } // RETIREI O LIVRO DO FABIO , PORQUE ESSE VALOR EU NÃO ENTENDI AINDA DIREITO.
rebelk
Byte
 
Mensagens: 301
Registrado em: 15 Nov 2006 20:16

Mensagempor turuna » 12 Set 2008 13:30

Vamos là, tentarei auxiliar, bem primeiro deve-se habilitar as interrupções gerais setando bit7 , 6 e 5 do registrador INTCON, o bit7 ativa as interrupçoes gerais, o bit6 ativa as interrupções dos periféricos e o bit 5 habilita a interrução do timer zero.
Pra vc saber se houve a imterrupção do timer zero, deve-se testar o INTCON,2 dentro da interrupção e limpá-lo ao sair, agora como isso será feito pelo seu compilador.........ai é com vc. Eu sei que na unha é mole........isso é no asm rssssssss.

Ps: para trabalhar com o AD do pic não importa a que velocidade está o oscilador interno não, isso porque o AD do pic é lento pra caramba. e alguns hertz acima ou abaixo não muda em nada. porque se isso for importante então é aconselhável um cristal externo.

Turuna :P
turuna
Nibble
 
Mensagens: 97
Registrado em: 10 Mar 2008 12:50

Mensagempor renatokodaira » 12 Set 2008 13:47

Existe um AN da Microchip que ensina a fazer a autocalibraçao do oscilador atraves de um programinha.
Uma sugestao seria fazer um programinha em assembly (precisa ser em assembly pra voce ter controle das instruçoes) que fica chaveando (1 e 0) uma porta de saida com uma frequencia conhecida (tipo 10kHz) e ficar monitorando com um frequencimetro.
Se a frequencia nao estiver correta (muito longe) entao o valor de calibraçao estah errado e atraves de um botao em outra porta que chamaria uma rotina para alterar o registrador OSCCAL "on the fly" e modificando o clock interno ateh que o frequencimetro medisse o mais perto de 10kHz, voce poderia achar um valor mais adequado para OSCCAL. Esse valor poderia ser gravado na EEPROM, de forma que depois pudesse ser lido e recuperado.

Sobre a duvida do livro, eu presumo que o valor 34B4h seja apenas um exemplo, jah que cada PIC tem um valor distinto (dentro das 64 possibilidades).
Esse valor representa uma instrucao RETLW que retorna o valor B4 (10110100) para o registrador W. Desse valor o OSCCAL aproveita somente os 6 bits mais significativos (101101) que representam o valor de calibraçao 45 decimal, ou seja um pouco acima do valor medio (32) de calibraçao.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Djalma Toledo Rodrigues » 12 Set 2008 15:34

renatokodaira escreveu:Existe um AN da Microchip que ensina a fazer a autocalibraçao do oscilador atraves de um programinha.
Uma sugestao seria fazer um programinha em assembly (precisa ser em assembly pra voce ter controle das instruçoes) que fica chaveando (1 e 0) uma porta de saida com uma frequencia conhecida (tipo 10kHz) e ficar monitorando com um frequencimetro.


Sugiro freq. mais alta que 10 Kcps, pois quanto mais divide mais fica difícil detetar variação.
As instruções abaixo geram uma onda quadrada na freq. máx possível e com duty cicle exato de 50%

Movlw 0FFH
Loop:
xorwf GPIO,F
goto Loop


Eu a bolei para meu Gerador de Função
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x