Ir ao conteúdo
  • Cadastre-se

Gerar 38kz timer2


jorgeletronico

Posts recomendados

Pretendo fazer uma torneira microcontrolada e preciso gerar 38kz,achei esse codigo e gostaria de saber se esta correto


#include <16f873a.h>
#int_TIMER2
void TIMER2_isr(void)
{
output_high(pin_c2);
}



void main()
{



setup_timer_2(T2_DIV_BY_4,25,1);
set_pwm1_duty(50);
setup_ccp1(CCP_PWM);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);

// TODO: USER CODE!!

}

.

Gostaria de uma ajuda ,pois nao sei mexer com essa parte de timer2 e gostaria de uma explicaçao simples de como chegar a esse calculo do timer2

Link para o comentário
Compartilhar em outros sites

Poxa colega Jorge, não vi esse seu tópico, mas para não passar em branco, o código seria:

#include <16f877A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading

#use delay (clock=4000000)


void main()
{
setup_ccp1(ccp_pwm);
setup_timer_2(T2_DIV_BY_1,25, 1);
set_pwm1_duty(12);

while(TRUE);
}

Com ele, você gera 38Khz no pino CCP1.

Falou

Link para o comentário
Compartilhar em outros sites

huahuauha O Tópico foi fechado e reaberto e nem vi! uahuahuaahua

Bem, voltei com a parte das contas:

O Timer2 é usado como base de tempo para a modulação PWM com o módulo CCP.

Veja que a frequência de saída é dada por:

                     Frequencia do Cristal
PWM Freq = -----------------------------------------------
(Carga do timer2 + 1) * (Timer2 Prescaler) * 4

O prescaler do Timer2 pode ser 1, 4 ou 16.

A carga do Timer2 ou pode chamar de período pode ser 0 a 255.

Considerando q você usa um cristal de 4Mhz:

Valor mínimo:

        4 MHz                  4,000,000
----------------------- = --------------- = 244 Hz
(255 + 1) * 16 * 4 16,384

Valor Máximo:

        4 MHz                  4,000,000
----------------------- = --------------- = 500000 Hz
(1 + 1) * 1 * 4 8

São valores teóricos.

Exemplo:

Gerar um sinal quadrado de 1Khz utilizando o Timer2 e o módulo CCP1 no PIC C da CCS.

Solução:

Para gerar um sinal de 1Khz, é necessário, T=(1/1000)=1mS, um período de 1mS (mili-segundos). Onde T=período.

Temos uma equação para cálculo do overflow (estouro) do Timer2. Que é:

T=1/clock*4*Prescaler*(carga Timer2+1)*Postcaler]

Usando a fórmula, temos:

1mS=1/4000000*4*4*(X+1)*1], onde X=249.

O Timer 2 fica assim:

setup_timer_2(T2_DIV_BY_4,249,1);

O duty cycle é configurado por: set_pwm1_duty(valor);

O conteudo de "valor" NÃO dever ser maior do q o periodo (ou carga do timer 2).

Exemplo:

Para valores de 16 Bits:

Temos que setup_timer_2(T2_DIV_BY_4,249,1) e com isso temos um periodo de 249. Se fizermos set_pwm1_duty(124L) (note o "L") temos que:

   16-bit Duty cycle                  124          124
--------------------------- = ------------ = ------ = 12.4%
(Timer 2 periodo +1) * 4 (249 +1) * 4 1000

Para valores de 8 Bits:

Agora se ao invés de set_pwm1_duty(124L) usarmos set_pwm1_duty(124) sem o "L", quer dizer q estamos no modo 8 bits. Isso nos dá:

   8-bit Duty cycle                  124
--------------------------- = ------------ = 49.6%
(Timer 2 periodo +1) 250

Acredito q dessa vez não cometi nenhum erro.

EDIT:

Criei um aplicativo aqui para você poder facilitar o cálculo do Timer2. Lembre-se q é melhor você aprender a calcular e não depender do programa.

OBS: O programa é Promo-version. Quer dizer q tem bug. Programei ele rapidin aqui só pra teste mesmo. Se for útil diz aí.

O programa tem 3 tipos. 1 para o net framework 3. Para o netframawork 3.5 e para o 4.0. Se você tiver o 4.0 instalado, funciona os outros. Recomendo o 4.0.

Se o programa não funcionar ou der erro, é porq você precisa baixar e instalar o net framework daki ó:

Download details: Microsoft .NET Framework 4 (Standalone Installer)

Programa:

Timer 2 para_NetFramework_3.0.html

Timer 2 para_NetFramework_3.5

Timer 2 para_NetFramework_4.0 (RECOMENDADO)

Digo: O programa tem bugs. Serve como base. Se for útil, posso melhorá-lo.

Falou

Link para o comentário
Compartilhar em outros sites

Tinha q ser o grande matheus,ja agradecendo a paciencia em me ensinar o caminho da programaçao em c no css,ja consegui desenvolver um projetinho muito util aqui pra mim,e agora estarei fazendo a torneira ,q logo postarei aqui pro pessoal.Sem palavaras grande amigo,continue esta pessoa maravilhosa.Grande bc,você ja ajuda muito ,você é 10 tbem.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...