Calculando Taxas em KHZ

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Calculando Taxas em KHZ

Mensagempor Kim Robert » 09 Nov 2010 08:20

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.
Kim Robert
Bit
 
Mensagens: 30
Registrado em: 20 Set 2007 17:56

Mensagempor zazulak » 09 Nov 2010 21:03

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?
zazulak
Nibble
 
Mensagens: 97
Registrado em: 06 Out 2007 16:40

Mensagempor Jozias del Rios » 10 Nov 2010 00:15

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.
Os vencedores são aqueles que sabem o que fazer se perderem.
Os perdedores são aqueles que não sabem o que fazer se ganharem.
Avatar do usuário
Jozias del Rios
Byte
 
Mensagens: 279
Registrado em: 31 Out 2009 03:36
Localização: SJCampos-SP

Re: Calculando Taxas em KHZ

Mensagempor RobL » 10 Nov 2010 07:19

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.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56


Voltar para AVR

Quem está online

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

x