sine tabela com 16 bits valor ...

K

kvrajasekar

Guest
Oi,

Eu quero gerar onda senoidal utilizando código em asm 16f877.it tem 10-bit ADC.

dados em ADC é de 16 bits wide.the resultado será armazenado em ADRESH e ADRESL.How Posso usar o sine Lot de 16 bits variável ou existe algum método para implementar.

Se eu guardar os valores usando PCL é 8 bits de largura, mas a minha adc dados é de 16 bits, como posso usar o seno Lot,

Por favor, compartilhe suas idéias.

Atenciosamente,
rajá.

 
Se você
está criando ondas sine quiser um DAC não uma ADC.

 
Oi,

Obrigado pela response.I não estou indo para gerar onda senoidal, estou usando o sinee Lot para comparação interna para gerar PWM senoidal.

 
Não posso pegar o ponto, você precisará de uma forma de gerar a saída do PIC sinewave usando uma Lot ou acha que o seu é diferente?Falais de ADC, mas isto é na entrada, se você gosta de onda de saída que você precisa gerar um CAD ou utilize o PWM modulando o dever
de ciclo accordling ao armazenados sinetable valores e todos os alimentos através de um filtro passa-baixa.

Tchau
Pow

 
Citação:

Estou usando o sinee Lot para comparação interna para gerar PWM senoidal.
 
Obrigado pela resposta ...

Na verdade sine PWM é gerada pelo software comparar com rampa gerada sine Lot.

estamos recebendo entrada através ADC (para example.RA0) .16 f877 tem 10 bits adc (1024 degraus).
Então o sine Lot mesa também tem valor de 16 bits (correst-me se estou errado). 16f877 mas é um processador de 8 bits , alguém pode me ajudar como gerar o sine tabela.

 
;************************************************* ********************
TÍTULO "PWM com base sinusoidal gerador"
LISTA P = 16C620, R = DEC

INCLUDE <P16C620.INC>
__CONFIG _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;
;************************************************* ********************
; Arquivo: SINE.ASM
; Autor: Rob Stein
; Data: 12/20/95
; Assembler: MPASM V01.40
; Xtal: 20 Mhz
; Inst RCL: 5 MHz (200nSec)
;************************************************* ********************
; Descrição:
; Saídas de 60 Hz synthizied sinusoidal (32 etapa), através de um modo geral
; Efeitos I / O pin (RB1) em um filtro passa baixa.Um software PWM
; Rotina é usada para criar 32 separadas sinewave passos.Este
; Software foi prototyped com o PICDEM1 bordo.
;
; Esquema:
;
; 2.7k 2.7k
; RB1 ___ / \ / \ / \ ______/ \ / \ / \ ________ Saída Analógica
; \ / \ / | \ / \ / |
; | |
; 0.1uF ----- ----- 0.1uF
; ----- -----
; | |
; GND GND
;
; ROM Uso: 98 palavras
;
; RAM Usage: 6 bytes
;
;************************* Constant Definição *********************

FXTAL EQU .20000000; Crystal Freqüência
FINST EQU FXTAL / 4; Instrução Cycle Freqüência
FSINE EQU .60; Sine função frequência
PASSO # EQU ,32; Número de passos
FSTEP EQU FSINE * ETAPA #; Passo frequência

Registre ;************************* Definição *********************

TEMPW EQU 0x20; interromper armazenamento temporário para W
DELAYCNT1 EQU 0x21; Atraso rotina contra baixo
DELAYCNT2 EQU 0x22; Atraso rotina contra alta
STEPCOUNT EQU 0x23; Sine passo counter
OUTLOW EQU 0x24; PWM baixo ciclo de carga para TMR0
OUTHIGH EQU 0x25; PWM alta carga ciclo de TMR0

;************************* Bit Definição *********************

PWM EQU 0x01; RB1 PWM utilizado para produção

;************************************************* ********************
; Reset Vector
;************************************************* ********************

org 0x000
goto Start; Início do Programa

;************************************************* ********************
; Interrupt Vector e Serviço de rotina
; Esta interrupção rotina está inscrita através de um transbordamento de TMR0
; 0xFF para 0x00.Um teste de RB1 determina se o estado da próxima vez
; É um alto ou baixo ciclo.A próxima vai interromper o occure baseada
; TMR0 recarregar valor (OUTLOW ou OUTHIGH).
;
; O interromper rotina foi projetada para utilizar um número de minimial
; Instrução ciclos.Isto foi feito para maximizar o ciclo PWM
; Gama (isto
é um 5% a 95% intervalo é alcançável com este ISR).Nota
; Que «swapf« instruções são utilizados para a realização de movimentos sem registo
; A efectivação da Situação bandeiras (este poupa ciclos por instrução
, Eliminando a necessidade de salvar temporariamente o registo STATUS).
;
;************************************************* ********************

org 0x004; Interrupt vector localização
IntVector
movwf TEMPW; guardar temporariamente W
btfsc PORTB, PWM; Achou esta Mínimo um ciclo?
goto PWMLow; n º ...
PWMHigh
swapf OUTHIGH, W; Sim ...Elevado tempo de carga sem afetar Situação bandeiras
BSF PORTB, PWM
nop; Prazo para equalizar alto / baixo TMR0 ciclos de carga
movwf TMR0; Carga próxima borda interromper tempo
BCF INTCON, T0IF; Limpar TMR0 overflow bandeira
swapf TEMPW, F; Swap guardado W
swapf TEMPW, W; Restauração W
IntEndHi
retfie; Retorno de interrupção
PWMLow
BCF PORTB, PWM
swapf OUTLOW, W; Carga baixa tempo
movwf TMR0; Carga próxima borda interromper tempo
BCF INTCON, T0IF; Limpar TMR0 overflow bandeira
swapf TEMPW, F; Swap guardado W
swapf TEMPW, W; Restauração W
IntEndLo
retfie; Retorno de interrupção

;************************************************* ********************
; Rotina principal
;************************************************* ********************
Iniciar
clrf ESTADO; Intitialize Situação & selecionar banco 0
BSF STATUS, RP0; Seleccionar registo banco 1
movlw 0x88
movwf OPTION_REG; 1:1 TMR0 prescaler, PORTB pull-ups com deficiência
movlw 0xFF
movwf TRISA; Port_A Definir como insumos
clrf TRISB; Port_B Definir como saídas
BCF STATUS, RP0; Seleccionar registo banco 0
movwf PORTB; PORT_B pinos alta
clrf TMR0; Initialize TMR0
movlw 0xA0
movwf INTCON; Enable TMRO global e interromper
ResetStep
movlw PASSO #
movwf STEPCOUNT; Carga contador de 32 passos
StepLoop
call Delay; Software atraso
movf STEPCOUNT, W; Pass tabela compensado através W
chamada SineTable; Obter tabela valor
chamada SetPWM; Set-up & baixos valores elevados PWM
decfsz STEPCOUNT, F; Próxima etapa
goto StepLoop
goto ResetStep

;************************************************* ********************
; Set PWM subrotina
; O seguinte calcula o lado de baixo e alto PWM tempo valores.
; O tempo dois valores, OUTLOW e OUTHIGH, será passado para o
; Interromper serviço de rotina.
;************************************************* ********************
SetPWM
BCF INTCON, GIE; Desactivar interupts para proteger ISR a partir de ...
; Corruptora OUTLOW & OUTHIGH valores
movwf OUTLOW; Set PWM Duty Cycle
comf OUTLOW, W

addlw IntEndHi-IntVector; Ajuste de tempo de serviço Int
movwf OUTHIGH
movf OUTLOW, W
addlw IntEndHi-IntVector; Ajuste de tempo de serviço Int
movwf OUTLOW

swapf OUTLOW, F; Swap nibbles para que interrompam serviço ...
swapf OUTHIGH, F; não irá corromper ESTADO
BSF INTCON, GIE; Re-ativar interupts
regresso

;************************************************* ********************
; Look-up Table para onda senoidal
; Esta entrada tabela 32 foi gerado para produzir um VDD para 0,1 *
; 0,9 * VDD (typicaly 0,5 a 4,5 volts) sine função.
;************************************************* ********************
SineTable
addwf PCL, F; Increment em mesa
retlw ,0; Dummy tabela valor
retlw ,128; 0 grau, 2,5 volts
retlw ,148
retlw ,167
retlw ,185
retlw ,200
retlw ,213
retlw ,222
retlw ,228
retlw ,230; 90 graus, 4,5 volts
retlw ,228
retlw ,222
retlw ,213
retlw ,200
retlw ,185
retlw ,167
retlw ,148
retlw ,128; 180 graus, 2,5 volts
retlw ,108
retlw ,89
retlw ,71
retlw ,56
retlw ,43
retlw ,34
retlw ,28
retlw ,26; 270 graus, 0,5 volts
retlw ,28
retlw ,34
retlw ,43
retlw ,56
retlw ,71
retlw ,89
retlw ,108

;************************************************* ********************
; Time Delay Sub-rotina
; O tempo é usado para criar a precisão 32 passos.O
; 32 vezes passo somaram juntos somam a uma taxa de 60 Hz.Note que
; Constantes DELAYCNT # são utilizadas para que outras frequências podem facilmente
; Gerada (por exemplo: FSINE equ ,50 para um 50 Hz sinewave).
;************************************************* ********************
TDELAY EQU FINST / FSTEP; # count ciclos de atraso
ADJTDELAY EQU TDELAY / 3 - 55; Ajuste de rotina principais ciclos
TDELAYHI EQU alta ADJTDELAY; mais significativos do Byte TDELAY
TDELAYLO EQU baixa ADJTDELAY; Least Sig.Byte de TDELAY

Demora
movlw TDELAYHI
movwf DELAYCNT2; Carga elevada byte demora counter
clrf DELAYCNT1
LoopD1
decfsz DELAYCNT1, F; terminados com 256 loops?
goto LoopD1; n º ...continue
decfsz DELAYCNT2, F; Sim ...Feito com TDELAYHI loops?
goto LoopD1; n º ...

movlw TDELAYLO; Sim ...Carga baixa byte com ajuste de ...
movwf DELAYCNT1; principais rotina ciclos.
LoopD2
decfsz DELAYCNT1, F; terminados com TDELAYLO loops?
goto LoopD2; n º ...continue
retorno; Sim ...Finished

END; That's all Folks!
 

Welcome to EDABoard.com

Sponsor

Back
Top