Ir ao conteúdo
  • Cadastre-se

Timers do PIC16F628A


Matheus Ryndack

Posts recomendados

Fala Pessoal!!

Preciso usar um timer em um projeto aqui.

Trata-se de um decodificador do HT6P20B.

Pois então.

Eu não tenho a minima ideia de como começar.

Sei a teoria dele, tudo do prescaler etc, mas pra outro pic, o 18f1220

Mas pro 16f628a, não encontrei nada. Li o datasheet e não entendi nada.

Será que alguém consegue me dar uma luz?

Link para o comentário
Compartilhar em outros sites

Se Você está falando do módulo dos timers, eles são a mesma coisa,

um deles é de 16 bits (timer1) e dois de 8 bits (timer0)

eles possuem um preescaler que vai determinar quantas instruções que o PIC tem de executar para incrementar o registrador tmr em 1 unidade.

aqui vai um exemplo em assembly para gerar um delay de 1mS ok, veja:


BANKSEL OPTION_REG
MOVLW B'00001000 ;PREESCALER 1/32 A CADA 32 CICLOS O TIMERINCREMENTA
MOVWF OPTION_REG
BANKSEL INTCON
BSF INTCON,T0IE ; HABILITA A INTERRUPÇÃO DO TIMER0
BCF STATUS,RP0 ; DEIXA NO BANK0
GOTO MAIN


MAIN:
GOTO $; FICA AQUI AGUARDANDO A INTERRUPÇÃO

ORG 0X04
BTFSC INTCON,T0IF ; INTERRUPÇAO POR TIMER0?
GOTO ISR T0
GOTO END ISR

ISR T0
.
.
.
SUA ROPTINA DE INTERRUPÇÃO
.
.
ENDISR
BCF INTCON,T0IF ;LIMPA FLAG DE INTERRUPÇÃO
.
.
ROTINA DE RECUPERAÇÃO DE CONTEXTO
.
.
RETFIE ; SAI DA INT

espero que ajude, mas qualquer dúvida é so perguntar!

abs.

Link para o comentário
Compartilhar em outros sites

Se Você está falando do módulo dos timers, eles são a mesma coisa,

um deles é de 16 bits (timer1) e dois de 8 bits (timer0)

eles possuem um preescaler que vai determinar quantas instruções que o PIC tem de executar para incrementar o registrador tmr em 1 unidade.

aqui vai um exemplo em assembly para gerar um delay de 1mS ok, veja:


BANKSEL OPTION_REG
MOVLW B'00001000 ;PREESCALER 1/32 A CADA 32 CICLOS O TIMERINCREMENTA
MOVWF OPTION_REG
BANKSEL INTCON
BSF INTCON,T0IE ; HABILITA A INTERRUPÇÃO DO TIMER0
BCF STATUS,RP0 ; DEIXA NO BANK0
GOTO MAIN


MAIN:
GOTO $; FICA AQUI AGUARDANDO A INTERRUPÇÃO

ORG 0X04
BTFSC INTCON,T0IF ; INTERRUPÇAO POR TIMER0?
GOTO ISR T0
GOTO END ISR

ISR T0
.
.
.
SUA ROPTINA DE INTERRUPÇÃO
.
.
ENDISR
BCF INTCON,T0IF ;LIMPA FLAG DE INTERRUPÇÃO
.
.
ROTINA DE RECUPERAÇÃO DE CONTEXTO
.
.
RETFIE ; SAI DA INT

espero que ajude, mas qualquer dúvida é so perguntar!

abs.

Obrigado!

Mas de asm eu só sei as gotos :(

não teria uma explicação dos bits dos registradores, é só isso que necessito.

Link para o comentário
Compartilhar em outros sites

Certo Vamos la então, para o timer0 por exemplo , ele pode ser configurado pelos seguintes registradores:

TMR0 = armazena o valor da contagem

OPTION_REG = aqui voce configura parametros como preescaler

INTCON = aqui vamos configurar a habilitação da int pelo timer e seu flag

O TMR0 é um registrador de 8bits onde pode ser escrito e lido, aqui voce entra com um valor de 0 a 255 e ele ira incrementar até zerar novamente, esse tempo de incremento dele pode ser determinado pelo preescaler que voce configura em OPTION_REG, esse registrador tem os seguintes bits:

T0CS = aqui define qual clock sera usado para incrementar o timer, se 0 configura para clock interno, se 1 ele vai incrementar por umafonte de clock externa, um 555 por exemplo

T0SE = aqui voce usa se colocar 1 em T0CS, serve pra definir em qual borda do clock externo ele ira incrementar

PSA = aqui voce define se quer que o preescaler seja associado ao Watchdog ou Timer 0, se for 0 fica com o Timer, se 1 fica com o WDT

PS2,PS1 e PS0 são os tres bits menos significativos do OPTION_REG, aqui suas combinaçõs:

000 = preescaler 1 pra 2

001 = preescaler 1 pra 4

010 = preescaler 1 pra 8

011 = preescaler 1 pra 16

100 = preescaler 1 pra 32

101 = preescaler 1 pra 64

110 = preescaler 1 pra 128

111 = preescaler 1 pra 256

os dois bits menos significativos não influem no funcionamento do TMR0

agora vamos ao INTCON, esse registrador pra nos interessa somente tres bits:

T0IE = se 1 habilita a interrupção do t0, se 0 a desabilita

t0IF = flag de interrupção do t0, se 0 nao ocorreu inrerrupção se 1 ocorreu interrupção

GIE = habilita as interrupções em geral, se 0 int desabilitadas, se 1 int habilitadas

bom acho que isso deve ajudar, mas qualqquer duvida é so perguntar, e para os outros timers são o mesmo processo, a diferença é que eles possuem um registrador dedicado para configurar cada um deles

abs.

Link para o comentário
Compartilhar em outros sites

Certo Vamos la então, para o timer0 por exemplo , ele pode ser configurado pelos seguintes registradores:

TMR0 = armazena o valor da contagem

OPTION_REG = aqui voce configura parametros como preescaler

INTCON = aqui vamos configurar a habilitação da int pelo timer e seu flag

O TMR0 é um registrador de 8bits onde pode ser escrito e lido, aqui voce entra com um valor de 0 a 255 e ele ira incrementar até zerar novamente, esse tempo de incremento dele pode ser determinado pelo preescaler que voce configura em OPTION_REG, esse registrador tem os seguintes bits:

T0CS = aqui define qual clock sera usado para incrementar o timer, se 0 configura para clock interno, se 1 ele vai incrementar por umafonte de clock externa, um 555 por exemplo

T0SE = aqui voce usa se colocar 1 em T0CS, serve pra definir em qual borda do clock externo ele ira incrementar

PSA = aqui voce define se quer que o preescaler seja associado ao Watchdog ou Timer 0, se for 0 fica com o Timer, se 1 fica com o WDT

PS2,PS1 e PS0 são os tres bits menos significativos do OPTION_REG, aqui suas combinaçõs:

000 = preescaler 1 pra 2

001 = preescaler 1 pra 4

010 = preescaler 1 pra 8

011 = preescaler 1 pra 16

100 = preescaler 1 pra 32

101 = preescaler 1 pra 64

110 = preescaler 1 pra 128

111 = preescaler 1 pra 256

os dois bits menos significativos não influem no funcionamento do TMR0

agora vamos ao INTCON, esse registrador pra nos interessa somente tres bits:

T0IE = se 1 habilita a interrupção do t0, se 0 a desabilita

t0IF = flag de interrupção do t0, se 0 nao ocorreu inrerrupção se 1 ocorreu interrupção

GIE = habilita as interrupções em geral, se 0 int desabilitadas, se 1 int habilitadas

bom acho que isso deve ajudar, mas qualqquer duvida é so perguntar, e para os outros timers são o mesmo processo, a diferença é que eles possuem um registrador dedicado para configurar cada um deles

abs.

Cara isso mesmo que eu precisava!!

Muitíssimo Obrigado! Pena que aqui não tem sistema de reputação!

Só uma duvida...

quanto as posições dos bits.

Você começou com bit 7 nas explicações??

Para os outros timers é só mudar de T0 pra T1 por exemplo né??

E como T1 é de 16 bits o numero é dividido em parte mais significativa e menos siginificativa, né??

E como eu leio isso? como é essa coisa aí? eu não entendo muito de bits hehe

E ao amigo acima, se quiser postar posta e exemplo!

Muitíssimo obrigado!!

Link para o comentário
Compartilhar em outros sites

Pra entender mesmo, seria bom que você tivesse uma boa base de eletronia digital, e sim comecei as explicações pelo bit 7 mas no datasheet você tem a ordem dos bits é facinho!

O Timer1 possui um registrador dedicado a ele na verdade são 3

TMR1H:TMR1L (parte mais e menos significativa respectivamente)

T1CON registrador de controle do timer1 tem as mesmas funcções do option_reg.

para o Timer2 são apenas 2:

TMR2 = a mesma coisa do TIMER0

T2CON = a mesma coisa do T1CON

detalhe para gerar a interrupção do timer voce precisa estourar o registrador no caso do TMR0 tem que chegar a 255 + 1 e no caso do TMR1 a 65535+1, no Timer2 você pode controlar o valor para esse estouro que sera N + 1 onde N é o valor que voce escreveu no registrador PR2

espero que esclareça!

abs.

Link para o comentário
Compartilhar em outros sites

Pra entender mesmo, seria bom que você tivesse uma boa base de eletronia digital, e sim comecei as explicações pelo bit 7 mas no datasheet você tem a ordem dos bits é facinho!

O Timer1 possui um registrador dedicado a ele na verdade são 3

TMR1H:TMR1L (parte mais e menos significativa respectivamente)

T1CON registrador de controle do timer1 tem as mesmas funcções do option_reg.

para o Timer2 são apenas 2:

TMR2 = a mesma coisa do TIMER0

T2CON = a mesma coisa do T1CON

detalhe para gerar a interrupção do timer voce precisa estourar o registrador no caso do TMR0 tem que chegar a 255 + 1 e no caso do TMR1 a 65535+1, no Timer2 você pode controlar o valor para esse estouro que sera N + 1 onde N é o valor que voce escreveu no registrador PR2

espero que esclareça!

abs.

Obrigado!!

Na verdade eu estou aprendo eletronica digital e pic junto.

eu sei escrever nos bits tal, o problema era o que e aonde escrever.

eu tenho um livro que explica sobre timers, mas pro 18f1220, então já tenho uma base.

e no datasheet, em timer 0 molule não achei nada que conseguise enteder mesmo com google tradutor.

Muitíssimo obrigado!

Matheus Ryndack

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