Ir ao conteúdo
  • Cadastre-se

Dúvidas no comando Timer0


charlesfrances

Posts recomendados

Timer0!

ELE disse que era para usar um contador para contar quanto tempo aperto um botão!!

e não um temporizador..

então fica assim Setup_Counters(RTCC_INTERNAL | RTCC_DIV_256);

só estou com duvida neste codigo #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1, bits = 8)

eu sei que é no inicio da programação timer0 mais esse rs232(baud=9600 etc... não quer dizer que seria via rs232 naõ né????

queria saber a sua funcionalidade explicação :huh::D

mais pra que que coloca rs232 se a saida não vai ser por ela ou vai??

foi o unico programa que achei na net

e se não foce pelo rs232 como ficaria ?

alguem explica ai pois não estou bem certo!!!! não!!

#include	<16F628A.h>

#FUSES NOWDT, RC, PUT, NOPROTECT, BROWNOUT, NOMCLR, NOLVP, NOCPD
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

#use delay(clock=4000000)

ai vai void main()
{

prescaler bla bla bla...!

Link para o comentário
Compartilhar em outros sites

cara a função rs232 só se voce for comunicar o pic com outro. no seu caso voce so quer cronometrar o tempo, certo?

pode retirar ela dai. a nao sei que voce queira contar o tempo em um pic e enviar este tempo via rs232 para outro hardware.

nao sei se voce quer a explicação de como fazer o contador ou do protocolo rs232

Link para o comentário
Compartilhar em outros sites

esta a usar o CCS correto?

o timer 1 é um contador de 8 bists. ( de 0 a 255 )

quando ocorre um estouro ( quando passa pro 256) ele gera uma interrupçao.

ele pode ser externo ou interno.

para ler o valor = get_timer0()

ex: x = get_timer0() // x vai recereber o valor do timer0

para gravar um valor no timer = set_timer0 (valor)

ex set_timer0 ( 200) // como o timer ja vai começar em 200 ele so vai contar até 55 e vai aver uma interrupção.

voce quer contar o tempo que um botao fica pressionado?

explique melhor o que queres.

se voce queres apenas ligar o timer qando apertar um botão basta fazer assim

 
if (pin_a0 == 0)
{ enable_interrupts (int_timerX) } // o X é o timer que tu queres

obs: nao fiz o debouncing mas é so colocar ali.

Link para o comentário
Compartilhar em outros sites

è quase é assim Quanto tempo eu levo para apertar um botão hehehe

agora saquei, voce pode fazer via timer mesmo como o irmão falo no outro topico ou pode usar o modo captura.

poderia escrever um codigo aqui pra ti, mas to sem tempo, baia ai esta apostila e estude ela

PROGRAMANDO MICROCONTROLADORES PIC

ele vai te dar uma otimo ponto de partida, falando sobre os timers, o modo pwm

CCP, rs232 entre outros.

na pag 119 tem um exemplo da captira da largura de um pulso no pino rb3, da pra dar uma estudada e adequar a sua necessidade

Link para o comentário
Compartilhar em outros sites

aqui é merli2 você é meu mestre kkkkkkkkkkk

a maioria das duvidas v me ajudou tenho que destacalo existem pessoas que mal agradecidas querem que vocês ou qualquer outro resolvam tudo e nao é bem assm

ninguem é obrigado a ajudar ninguem!! valeu pelas ajudas anteriores...

algum dia vou conseguir entender RF ,eu sei que é difícil mas vou conseguir!!

consegui os arquivos sobre os timer0 com arh vou tentar fazer o codigo

Link para o comentário
Compartilhar em outros sites

ai consegui se excluir a rs232 o codigo funciona??? ja que eu não quero via rs232!!

só pra contar quanto tempo demoro pra apertar um botão o tempo no pic mesmo!!

com certeza ainda tenho muito que aprender kkkkk:eek:

è agora sem brincadeira estou precisando realmente de uma ajuda.

-----------------------------------------------------

Link para o comentário
Compartilhar em outros sites

ta mas no caso ai esse rs232 ele usou pra poder enviar os dados pro pc.

ja no seu caso como voce queria ver quanto tempo ficou com o botao pressionado?

LCD, display 7 seg. ???

voce vai precisar de uma interface ai, no caso do codigo os valores sao mostrados no pc.

a parte que faz o que tu queres mesmo seria esta aqui

While( true ){
capturou = 0; //zera flag de captura
interrupcao= 0; //zera flag de interrupção
set_timer1(0); //zera o timer1 , incremento a cada 1us.
while( ! capturou ); //executa enquanto não capturou
tempo = ccp_1;

a variavel tempo ira conter o valor do (tempo do botao) em uSegundos

desprezei a parte do compilador.

o problema é que voce ta querendo dar um paço maior que a perna, no caso ai ele usou a opção do CCP de captura.

leia sobre isto na apostila que te falei e voce vai entender, mas antes de chegar ai voce tem que saber pelo menos como os times funcionam

Link para o comentário
Compartilhar em outros sites

não se lembra era assim quanto tempo leva para apertar o botão

quando você disse assim

usando um led como saida ta bom sei lcd (quanto tempo leva para apertar o botão)

ai quando aperta captura o tempo...

Citação:

agora saquei, voce pode fazer via timer mesmo como o irmão falo no outro topico ou pode usar o modo captura.

poderia escrever um codigo aqui pra ti, mas to sem tempo, baia ai esta apostila e estude ela

PROGRAMANDO MICROCONTROLADORES PIC

ele vai te dar uma otimo ponto de partida, falando sobre os timers, o modo pwm

CCP, rs232 entre outros.

na pag 119 tem um exemplo da captira da largura de um pulso no pino rb3, da pra dar uma estudada e adequar a sua necessidad

Última edição por arh : Ontem às 23:42 H

Cara eu sou alegre palhaço e tudo mais eu ja estou endoidando com tudo isso!!!

:angry::bravo::aranha:

acho que devo excluir o rs232

naõ precisa é so isso

:mad::eek::muro::zoio::bravo::naonao: contagem de pulsos no pino CCP1.:naonao:

Link para o comentário
Compartilhar em outros sites

charlesfrances

pegue a apostila que te dei, esqueça por enquanto o que tu quer, e apenas leia ela desde o começo, quando voce chegar na parte do CCP voce ja vai tar fazendo este programa que tu querer brincando.

pois a base do pic ta nos timers e voce ainda nao sabe lidar com eles, então estude.

relaxa e comesse a ler a apostila, aposto que até semana que vem se voce seguir tudo direitinho voce vai tar beleza nesse programa

Link para o comentário
Compartilhar em outros sites

vamos continuar!!

entendi o seguinte e se eu não quiser usar um LCD ,não por que nao saiba

é logico aqui no forum tem bastante assunto para pesquisar rsrsr

mais tem uma coisa que esta me martelando na caixola como principiante,

nesta imagem

o timer0 conta de 0 a 255 que é 16000 (us) e 65.535 KHz pulsos maximo ?

por exemplo e a constante 4 pode ser mudada se for xt 4MHz/4=1MHz?????

mudada para 8 9 10 16 567 1000 e bla bla bla??? uns dizem que o timer0 é de 8bits e 16bits sei la e agora ????:devil::bravo::natal::stupid:

SIMPLESMENTE!! EU DO NOT UNDERSTAND !!!

preview_html_23d4e445.jpg

Link para o comentário
Compartilhar em outros sites

KKKKKKK tá fogo ein meu amigo ???

Na imensa maioria dos Pics e Avrs, TIMER0 e TIMER2 são de 8 bits !!! Apenas o TIMER1 é de 16 bits.

A tal da constante 4 não pode ser mudada.... é que tudo nesses Pics funciona dividindo a frequência do oscilador por 4 , e dessa conta é que resulta o clock real do Pic; é porisso que os AVR's são bem superiores em desempenho. Um simples Atmega4 ainda é cerca de 80% mais rápido que um Pic da família PIC18F..... porque que voce acha que os Arduínos usam AVR's ????

O tempo de latência é apenas o tempo que demora para o Timer gerar uma interrupção, só isso.

E repare que na figura, as contagens do Timer0 estão na parte de cima e sempre vão de 0 a 255 e voltam a zero ! Confirmando que é 8 bits.

voce está confundindo um pouco as coisas..... pense sempre assim, vou te dar um exemplo que é para o Timer0 :

1 - Existe um tal de PRESCALER, que é um divisor , que pega a frequência do clock e divide ela, para diminuir a frequência que será aplicada ao Timer0.

2 - O timer0 conta essa frequência do clock do microcontrolador já dividida pelo PRESCALER, sempre de 0 até 255 pulsos de clock ( 256 vezes pois é um timer de 8 bits). E ao final dessa contagem, ele gera uma interrupção, isto é, se não definirmos uma contagem inicial, teremos uma interrupção a cada 256 contagens do Timer0.

3 - Sempre podemos definir um número inicial para a contagem, ou seja, ela não precisa sempre começar no 0 !!! Podemos definir um número inicial, de 0 a 255, entendeu ? Assim, em vez de termos de esperar 256 pulsos de clock para ter uma interrupção, podemos, por exemplo, esperar apenas 4 se assim o quisermos ! Por exemplo, se definirmos a contagem inicial como 252, teremos uma interrupção para cada 4 contagens do Timer0 .

Veja se melhorou um pouco....

Paulo

Link para o comentário
Compartilhar em outros sites

Com absoluta certeza! sim agora entende ,então escolhemos de 0 a 10 100 155, ate 255

pois contando com o 0 a 255 da 256...possibilidades

existe um calculo especifico como converter isso

tipo

o timer0 conta de 0 a 255 que é 16000 (us) dos (us) estou falando!!

então para cada possibilidade existe o tempo (us) é isso ??

Programei no CCS em C.

Minha ideia é contruir um Tacômetro.. o apartelho que lê RPM. Se o circuito estiver correto.. fica fácil dae p frente só que eu queria tira esse LCD e usar LEDS nas portas alguem pode me ajudar??

O circuito:

queria usar leds em vez de LCD!! ajuda ai pessoal quem sabe,pois isso vai servi pra todo mundo, bom é ter o codigo ja feito não é???

pois só quero tirar o lcd e colocar os leds!! entendeu???

#include <16f876.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#include <lcd.c>
#byte PIR1=0x0C

int1 nuevopulso=0; //Entra outro pulso
int16 TFB=0,TFS=0,TF=0; //Tiempo flancos
float AP=0.0; //Valor final del ancho de pulso
int1 cambio=0; //Cambio de flanco de disparo

#int_ccp1
void ccp1_int(){ //Función interrupción
if(cambio==0){ //Flanco de subida
TFS=CCP_1; //Carga del valor del registro CCPR1 en flanco subida
setup_ccp1(CCP_CAPTURE_FE); //Configuración modo Captura en flanco de bajada
cambio=1; //Control de cambio de flanco
} else { //Flanco de Bajada
TFB=CCP_1; //Carga del valor del registro CCPR1 en flanco bajada
setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida
cambio=0; //Control de cambio de flanco

if(nuevopulso==0){ //Fin de pulso...
nuevopulso=1; //pulso a medir
}
}
}

void main() {

lcd_init();
setup_timer_1(T1_INTERNAL); //Configuración TMR1
setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida
cambio = 0; //Control de cambio a 0

enable_interrupts(int_ccp1); //Habilitación interrupción modulo CCP
enable_interrupts(global); //Habilitación interrupción global

do {
if(nuevopulso==1){ //¿Pulso nuevo?
TF=(TFB-TFS); //Ancho de pulso.
AP = TF*1.0; //Ancho de pulso en microsegundos (a 4MHz:1us)
printf(lcd_putc,"\nPulso = %6.1fuS ", AP);
nuevopulso=0; //Pulso ya medido, espera nuevo
}
} while (TRUE);
}

Link para o comentário
Compartilhar em outros sites

primeiro transforme o timer 0 em segundos (quanto tempo demora para estorar o contador timer 0? 256 corresponde a quanto tempo??

que valor posso usar no timer 0 quando inicia lo para dar uma contagem exata?

http://eng-serve.com/pic/pic_timer.html

e use a interrupcao do timer0 quando ele estoura

ai calcule quantos estouros sao necessarios para dar 1 segundo

dai pra minutos e horas e fácil

ai você sabe quanto tempo o botao foi apertado

mais em c deve ser mais fácil ainda...

Com absoluta certeza! sim agora entende ,então escolhemos de 0 a 10 100 155, ate 255

pois contando com o 0 a 255 da 256...possibilidades

existe um calculo especifico como converter isso

tipo

o timer0 conta de 0 a 255 que é 16000 (us) dos (us) estou falando!!

então para cada possibilidade existe o tempo (us) é isso ??

Programei no CCS em C.

Minha ideia é contruir um Tacômetro.. o apartelho que lê RPM. Se o circuito estiver correto.. fica fácil dae p frente só que eu queria tira esse LCD e usar LEDS nas portas alguem pode me ajudar??

O circuito:

queria usar leds em vez de LCD!! ajuda ai pessoal quem sabe,pois isso vai servi pra todo mundo, bom é ter o codigo ja feito não é???

pois só quero tirar o lcd e colocar os leds!! entendeu???

#include <16f876.h>

#fuses XT,NOWDT

#use delay(clock=4000000)

#include <lcd.c>

#byte PIR1=0x0C

int1 nuevopulso=0; //Entra outro pulso

int16 TFB=0,TFS=0,TF=0; //Tiempo flancos

float AP=0.0; //Valor final del ancho de pulso

int1 cambio=0; //Cambio de flanco de disparo

#int_ccp1

void ccp1_int(){ //Función interrupción

if(cambio==0){ //Flanco de subida

TFS=CCP_1; //Carga del valor del registro CCPR1 en flanco subida

setup_ccp1(CCP_CAPTURE_FE); //Configuración modo Captura en flanco de bajada

cambio=1; //Control de cambio de flanco

} else { //Flanco de Bajada

TFB=CCP_1; //Carga del valor del registro CCPR1 en flanco bajada

setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida

cambio=0; //Control de cambio de flanco

if(nuevopulso==0){ //Fin de pulso...

nuevopulso=1; //pulso a medir

}

}

}

void main() {

lcd_init();

setup_timer_1(T1_INTERNAL); //Configuración TMR1

setup_ccp1(CCP_CAPTURE_RE); //Configuración modo Captura en flanco de subida

cambio = 0; //Control de cambio a 0

enable_interrupts(int_ccp1); //Habilitación interrupción modulo CCP

enable_interrupts(global); //Habilitación interrupción global

do {

if(nuevopulso==1){ //¿Pulso nuevo?

TF=(TFB-TFS); //Ancho de pulso.

AP = TF*1.0; //Ancho de pulso en microsegundos (a 4MHz:1us)

printf(lcd_putc,"\nPulso = %6.1fuS ", AP);

nuevopulso=0; //Pulso ya medido, espera nuevo

}

} while (TRUE);

}

http://eng-serve.com/pic/pic_timer.html

Link para o comentário
Compartilhar em outros sites

sou principiante mais modifica esse codigo pra mim em vez de LCD coloca leds so´como exemplo Obrigado!!

então tiro o lcd e coloco os pinos de saida em leds, é por que ainda não estou muito fmiliarizado com CCP1 e mudança de codigo

se é que vocês me entende queria só ver a mudança e pegar a manha sem o lcd VaLEU , por favor galera sou apenas um parceiro a mais!!:mellow:

Link para o comentário
Compartilhar em outros sites

Vou estudar o codigo e me dedicar , Obrigado de coração ,sei que é um incomodo

ficar pedindo é porcausa do tempo pessoal , Muito obrigado mesmo!! aphawk Valeu!!

depois de dominar isto pesquisar sobre os AVRs ja que dizem que eles são tão precisos ,mais acredito que a fama dos PICs não caira

a tecnologia esta sempre melhorando!!

patoassado espere eu tenho algo que consegui e isto e do interesse de todos!!

O circuito:

queria usar leds em vez de LCD!! ajuda ai pessoal quem sabe,pois isso vai servi pra todo mundo, bom é ter o codigo ja feito não é???

pois só quero tirar o lcd e colocar os leds!! entendeu???

não é o tempo que ele fica apertado e sim quantos apertos em um segundo!! la no topico Ai para um principiante fica difícil entender tempo de latência!!! entendeu?

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Desculpe a demora pessoal ,pois recebi uma advertencia:( e com razão...

Agora eu comprei um windows 8 e fui baixar o proteus e ccs c compiler ,

mais quando fiz o codigo e compilei tudo certinho para o desktop sem erros e não vi o aquivo .hex , e ai apareceu 2 arquivos somente com a letra C Object files escolhi um dos dois e encontrei e vi o nome no proteus .hex... mais no desktop tava com o nome C Object file não entendi ?

e não funcionou direito no proteus mesmo assim o 16f84 ficou piscando, mais não era como eu queria, sera que o windows 8 não é bom!!

o que esta errado onde devo baixar sem ser o atual pois me acostumei com o anterior....:confused:

olha o codigo que coloquei no 16f84 alguem compila ai e me diz o que esta errado ,por que não funcionou do jeito que programei

era para acender e apagar tipo estou funcionando e depois ,se o botão b4 naõ estiver pressionado pisca em meio segundo,se aperto b4 o led pisca mais rápido

mais estou usando windows 8 e não sei o que esta errado

#include <16f84a.h>

#use delay(clock=4000000)
#fuses XT,NOWDT,WDT,PUT,PROTECT
unsigned int16 parametro, p1, p2, contador;

#INT_TIMER0
void trata_timer0(void)
{
//consegui!!!
}

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!