Página 1 de 1

Calculando Taxas em KHZ

MensagemEnviado: 09 Nov 2010 08:20
por Kim Robert
Caros Colegas estou com um problema tenho que achar o calculo de
BPM ou Seja Bits por Minuto, estou fazendo o calculo da seguinte forma:

O Valor de Temp4 ajustei para 166 pulso com Clock de 8 MHZ o valor de Temp4 e 90 que é 256 - 166 ou seja inicia com 90 resta 166 pulsos
Ajusto o meu Time0 para Recarga em 90 o que tenho 48.192 KHZ
Temp4 = r20 que não uso pra nada ele é especifico p/ recarga de Time0
Código: Selecionar todos
Time0:
  Out       TCNT0,Temp4
  Clr        Bps                               ;Zera Byte a cada 48.192 por Segundo
Reti
;************************
;Checa a Contagem de Tempo
;************************
Checa_Tempo:
  Sbrc       Bps,0                           ;Contador de 48 Khz
     Ret                                      ;Aguarda o Time0 Zerar o Bit
  Mov        Temp,Bps
  Sbr        Temp,1                         ;Desliga Contador aguarda Zeramento
  Mov        Bps,Temp
;************************
;Decrementa até o Zeramento
;************************
  Dec           Tp1
  Brne     Tempo_sai           ;Se for <> de 0 Volta
    Clr          Vetor2
    Dec         Tp2
    Brne        Tempo_sai                ;Se for <> de 0 Volta
       Ldi        Temp,Low(48192/60)   ;Valor de Bits Por Minutos
       Ldi        Temp,HIGH(48192/60) ;Valor de Bits Por Minutos
       Mov      Tp1,Temp1
       Mov      Tp2,Temp
       Rcall     Executa
       Rcall     Pulsa_Led
  Tempo_sai:
Ret

Conseguí achar 60 Pulsos por Minutos como Valor Fixo
Gostaria de Fazer o Calculo da Forma abaixo pois e só mudar o valor
de BPM que eu tenho a quantidade certa de Bits por Minuto
Código: Selecionar todos
    Ldi     Temp,HIGH(48192/Bpm)     ;Valor de Bits Por Minutos
    Ldi     Temp1,LOW(48192/Bpm)    ;Valor de Bits Por Minutos

Mas o problema e que não da certo pois o valor de Temp e Temp1 e o
Valor carregado como o Endereço de memoria do BPM eu gostaria
de Carregar o valor do BPM e não o Valor do Endereço de Memória
como faço isto? já tentei vairias formas mas o compilador não aceita.

MensagemEnviado: 09 Nov 2010 21:03
por zazulak
Olá Kim,

daria pra fazer assim:
Código: Selecionar todos
    Ldi     Temp,(48192/Bpm)>>8     ;Valor de Bits Por Minutos
    Ldi     Temp1,(48192/Bpm)%256    ;Valor de Bits Por Minutos



Mas, se é para gerar uma temporização baseada num valor pré determinado de contagens no timer0, porque você não usa o modo CTC (clear timer on compare), onde não precisa inserir manualmente um valor no TCNT0, e não tem a imprecisão causada pelo tempo entre a chamada da interrupção e o inicio da contagem?

ps. Qual AVR você está usando?

MensagemEnviado: 10 Nov 2010 00:15
por Jozias del Rios
Afinal, "Bpm" é uma constante ou uma variável na memória RAM?

Se for uma variável na memória RAM, vc teria que implementar a divisão que deseja... mas há soluções melhores.

Re: Calculando Taxas em KHZ

MensagemEnviado: 10 Nov 2010 07:19
por RobL
Kim Robert escreveu:Caros Colegas estou com um problema tenho que achar o calculo de
BPM ou Seja Bits por Minuto, estou fazendo o calculo da seguinte forma:

Conseguí achar 60 Pulsos por Minutos como Valor Fixo
Gostaria de Fazer o Calculo da Forma abaixo pois e só mudar o valor
de BPM que eu tenho a quantidade certa de Bits por Minuto
Código: Selecionar todos
    Ldi     Temp,HIGH(48192/Bpm)     ;Valor de Bits Por Minutos
    Ldi     Temp1,LOW(48192/Bpm)    ;Valor de Bits Por Minutos

Mas o problema e que não da certo pois o valor de Temp e Temp1 e o
Valor carregado como o Endereço de memoria do BPM eu gostaria
de Carregar o valor do BPM e não o Valor do Endereço de Memória
como faço isto? já tentei vairias formas mas o compilador não aceita.


Veja o High / Low( qualquer coisa) como uma diretiva, a qual o compilador só vai entender como um endereço da memo de programa, o resultado de uma operação que está dentro dos parêntesis.
Nunca será um resultado de uma literal que não seja um endereço da memo de programa. O resultado, para ser aceito deverá estar dentro de zero até o tamanho da memo de programa do micro usado.

Então é como o Jozias colocou.