sine lookup tabel de 16 biţi cu o valoare ...

K

kvrajasekar

Guest
Salut,

Vreau să genereze sine a valurilor, folosind codul de asm 16f877.it în a 10-bit ADC.

date în ADC este de 16 de biţi wide.the rezultatul va fi stocat în ADRESH şi ADRESL.How Pot folosi sine LUT pentru 16 de biţi variabilă sau există nici o metodă de a pune în aplicare.

Dacă i se păstra valorile folosind PCL este de 8 biţi largă, dar mi ADC de date este de 16 de biţi, cum îl pot utiliza în sine LUT,

Vă rugăm să vă împărtăşesc idei.

Cu respect,
Raja.

 
Dacă
sunteţi crearea sine valuri doriţi un DAC nu o ADC.

 
Salut,

Multumesc pentru response.I nu am lucrat pentru a genera sine val, eu sunt, folosind sinee LUT pentru comparaţie interne pentru a genera sine PWM.

 
Nu pot prinde punct, ai nevoie de un mod de a genera sinewave de iesire de la PIC prin utilizarea unui LUT sau dumneavoastră credeţi că este diferit?Tu vorbesti despre ADC, dar acest lucru este de la intrare, dacă doriţi, pentru a genera ieşire ai nevoie de un val de DAC sau utiliza PWM de modularea duty-ciclu accordling la stocate sinetable valorilor şi a hranei pentru animale toate prin intermediul unui filtru low-pass.

Pa
Pow

 
Citat:

Sunt folosind sinee LUT pentru comparaţie interne pentru a genera sine PWM.
 
Mulţumesc pentru răspuns ...

De fapt sine PWM este generat de software-ul generat la sol compara cu sine LUT.

am primit de intrare prin intermediul ADC (pentru example.RA0) .16 f877-a 10-bit ADC (1024 paşi). astfel de sine LUT tabel are, de asemenea, valoarea de 16 biţi (correst-mi dacă mă înşel). 16f877, dar este un procesor de 8 biţi , poate cineva să mă ajute cum să genereze sine lookup tabel.

 
;************************************************* ********************
TITLUL "PWM pe bază de sine val generator"
LISTA P = 16C620, R = DEC

INCLUDE <P16C620.INC>
__CONFIG _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;
;************************************************* ********************
; File: SINE.ASM; Author: Rob Stein ; Data: 12.20.95
; Assembler: MPASM V01.40
; Xtal: 20 Mhz
; Inst Clk: 5 Mhz (200nSec)
;************************************************* ********************
; Descriere:
; Rezultate de 60 Hz synthizied sine val (32 pas), prin intermediul unei general
; Scop I / O PIN (RB1) într-o mică treci filtru.Un software PWM
; Rutină este folosit pentru a crea 32 separate sinewave paşi.Acesta
; Software-ul a fost prototyped cu PICDEM1 bord.
;
; Circuit diagrama:
;
; 2.7k 2.7k
; RB1 ___ / \ / \ / \ ______/ \ / \ / \ ________ ieşire analogică
; \ / \ / | \ / \ / |
; | |
; 0.1uF ----- ----- 0.1uF
; ----- -----
; | |
; GND GND
;
; ROM Usage: 98 cuvinte
;
; RAM Usage: 6 octeţi
;
;************************* Constant Definitie *********************

FXTAL EQU .20000000; Crystal Frecventa
FINST EQU FXTAL / 4; Instruction Cycle Frecventa
FSINE EQU .60; Sine funcţie de frecvenţă
PASUL # EQU .32; Numărul de paşi
FSTEP EQU FSINE * STEP #; Pasul frecvenţă

Inregistrare ;************************* Definitie *********************

TEMPW EQU 0x20; întrerupere temporară de stocare pentru W
DELAYCNT1 EQU 0x21; Întârzierea rutină contra scăzut
DELAYCNT2 EQU 0x22; Întârzierea rutină contra ridicat
STEPCOUNT EQU 0x23; Sine pas counter
OUTLOW EQU 0x24; PWM scăzut ciclu de încărcare pentru TMR0
OUTHIGH EQU 0x25; PWM mare ciclu de încărcare pentru TMR0

;************************* Bit Definitie *********************

PWM EQU 0x01; RB1 utilizate pentru ieşire PWM

;************************************************* ********************
; Resetare Vector
;************************************************* ********************

org 0x000
Mergi la Start; Început de program

;************************************************* ********************
; Interrupt Vector şi servicii de rutină
; Această întrerupere de rutină este introdus printr-o ţeavă de a TMR0 de la
; 0xFF la 0x00.Un test de RB1 determină în cazul în care data viitoare de stat
; Este un ciclu de mare sau mică.Următoarea va întrerupe occure pe bază de
; TMR0 reload valoare (OUTLOW sau OUTHIGH).
;
; De întrerupere de rutină, a fost conceput pentru a utiliza un număr de minimial
; Instruire cicluri.Acest lucru a fost făcut pentru a maximiza PWM datoria ciclu
; Gama (ex de 5% la 95% Gama este realizabil cu acest ISR).Notă
; Că "swapf" instrucţiuni sunt utilizate pentru a efectua registru, fără a muta
; Efectuarea STARE steaguri (Aceasta salvează de cicluri de instruire
; Eliminând necesitatea de a salva temporar STARE registru).
;
;************************************************* ********************

org 0x004; Interrupt vector locaţie
IntVector
movwf TEMPW; temporar salva W
btfsc PORTB, PWM; Was this Min un ciclu?
Mergi la PWMLow; nr ...
PWMHigh
swapf OUTHIGH, W; Da ...Încărcaţi de mare de timp, fără a afecta STARE steaguri
bsf PORTB, PWM
nop; Întârzierea de a egaliza ridicat / scăzut TMR0 sarcină cicluri
movwf TMR0; Încărcaţi de lângă marginea întrerupe timp
bcf INTCON, T0IF; senin TMR0 ţeavă de pavilion
swapf TEMPW, F; Swap salvate W
swapf TEMPW, W; Restabilire W
IntEndHi
retfie; Revenire la Interrupt
PWMLow
bcf PORTB, PWM
swapf OUTLOW, W; redus timpul de încărcare
movwf TMR0; Încărcaţi de lângă marginea întrerupe timp
bcf INTCON, T0IF; senin TMR0 ţeavă de pavilion
swapf TEMPW, F; Swap salvate W
swapf TEMPW, W; Restabilire W
IntEndLo
retfie; Revenire la Interrupt

;************************************************* ********************
; Principal de rutină
;************************************************* ********************
Porni
clrf STARE; Intitialize STARE & selectaţi banca 0
bsf STATUS, RP0; Selectaţi registru banca 1
movlw 0x88
movwf OPTION_REG; 1:1 TMR0 prescaler, PORTB pull-up-uri cu handicap
movlw 0xFF
movwf TRISA; Setare Port_A ca intrări
clrf TRISB; Setare Port_B ca rezultate
bcf STATUS, RP0; Selectaţi registru banca 0
movwf PORTB; PORT_B PINS mare
clrf TMR0; iniţializa TMR0
movlw 0xA0
movwf INTCON; Activaţi TMRO globale şi întrerupă
ResetStep
movlw PASUL #
movwf STEPCOUNT; Load counter pentru 32 paşi
StepLoop
apel întârziere; Software întârziere
movf STEPCOUNT, W; Pass tabel compensate prin W
apel SineTable; Get tabel valoarea
apel SetPWM; set-up mici & mari valori PWM
decfsz STEPCOUNT, F; Următorul pas
Mergi la StepLoop
Mergi la ResetStep

;************************************************* ********************
; Setare PWM Subroutine
; Următoarele calculează în următorii mici şi mari PWM timp de valori.
; Timp de două valori, OUTLOW şi OUTHIGH, va fi trecută la
; Întrerupe serviciul de rutină.
;************************************************* ********************
SetPWM
bcf INTCON, GIE; Dezactivaţi interupts pentru a proteja ISR de la ...
; Otrăvitor OUTLOW & OUTHIGH valori
movwf OUTLOW; Setare PWM Duty Cycle
comf OUTLOW, W

addlw IntEndHi-IntVector; Reglaţi pentru Int Serviciul de timp
movwf OUTHIGH
movf OUTLOW, W
addlw IntEndHi-IntVector; Reglaţi pentru Int Serviciul de timp
movwf OUTLOW

swapf OUTLOW, F; Swap nibbles astfel încât să întrerupă serviciul ...
swapf OUTHIGH, F; nu va corupt STARE
bsf INTCON, GIE; reactiva interupts
reveni

;************************************************* ********************
; Uite-up Tabelul pentru Sine Wave
; 32 Acest tabel a fost generată de intrare pentru a produce un 0.1 * Vdd la
; 0.9 * Vdd (typicaly 0.5 - 4.5 volţi) sine funcţie.
;************************************************* ********************
SineTable
addwf PCL, F; Increment în masă
retlw .0; Dummy tabelul de valoare
retlw .128; 0 grade, 2.5 volt
retlw .148
retlw .167
retlw .185
retlw .200
retlw .213
retlw .222
retlw .228
retlw .230; 90 de grade, 4.5 volt
retlw .228
retlw .222
retlw .213
retlw .200
retlw .185
retlw .167
retlw .148
retlw .128; 180 grade, 2.5 volt
retlw .108
retlw .89
retlw .71
retlw .56
retlw .43
retlw .34
retlw .28
retlw .26; 270 grade, 0,5 volt
retlw .28
retlw .34
retlw .43
retlw .56
retlw .71
retlw .89
retlw .108

;************************************************* ********************
; Întârziere Sub-rutina
; Timp de întârziere este folosit pentru a crea precizie de 32 de paşi.De
; 32 pas ori totaled împreună adăuga până la o rată de 60 Hz.Reţineţi că,
; Constantele DELAYCNT # sunt utilizate, astfel încât alte frecvenţe cu uşurinţă
; Generat (de exemplu: FSINE EQU .50 de 50 Hz sinewave).
;************************************************* ********************
TDELAY EQU FINST / FSTEP; # de întârziere conta cicluri
ADJTDELAY EQU TDELAY / 3 - 55; Reglaţi pentru principalele rutină cicluri
TDELAYHI EQU mare ADJTDELAY; cele mai semnificative Byte de TDELAY
TDELAYLO EQU scăzut ADJTDELAY; cel mai puţin Sig.Byte de TDELAY

Întârzia
movlw TDELAYHI
movwf DELAYCNT2; Load mare byte întârziere counter
clrf DELAYCNT1
LoopD1
decfsz DELAYCNT1, F; terminate cu 256 buclele?
Mergi la LoopD1; nr ...Mergi mai departe
decfsz DELAYCNT2, F; Da ...Adoptată cu TDELAYHI buclele?
Mergi la LoopD1; nr ...

movlw TDELAYLO; Da ...Încărcaţi scăzut cu regla octet pentru ...
movwf DELAYCNT1; principal de rutină cicluri.
LoopD2
decfsz DELAYCNT1, F; terminate cu TDELAYLO buclele?
Mergi la LoopD2; nr ...Mergi mai departe
întoarcere; Da ...Terminate

END; Asta
e tot Oameni buni!
 

Welcome to EDABoard.com

Sponsor

Back
Top