PWM inkrementieren

Hallo,

bei 16F628 ist PWM 10 Bit lang. Es ist in 2 Bytes ( 8 + 2 ) geschpeichert. Wenn ich im Program PWM inkrementieren will muss ich extra beide Bytes inkrementieren oder wie soll ich es tun ?

Danke.

Franz

Reply to
Franz3
Loading thread data ...

Hallo,

bei 16F628 ist PWM 10 Bit lang. Es ist in 2 Bytes ( 8 + 2 ) geschpeichert. Wenn ich im Program PWM inkrementieren will muss ich extra beide Bytes inkrementieren oder wie soll ich es tun ?

Danke.

Franz

Reply to
Franz3

"Franz3" schrieb im Newsbeitrag news: snipped-for-privacy@posting.google.com...

Wenn ich das richtig verstanden habe, entsprechen die 10 Bit einem Verzögerungswert. Damit müsste 1024 - den 2 Bytes funktionieren.

Reply to
Jonas Walter

"Franz3" schrieb im Newsbeitrag news: snipped-for-privacy@posting.google.com...

Inkrementieren ? Was ? Wozu ? PWM macht die Hardware automatisch, und inkrementiert dabei einen internen Zaehler automatisch. Die Zahl gibt nur das Impuls/Pausenverhaeltnis an. Wenn du das aenden willst, einfach einen neuen Wert reinschreiben. Ja, die Bits verteilt auf beide Bytes.

--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

Hallo , danke fuer die Antwort. Ich habe ein einfaches Programm erstellt, der PWM inkrementieren soll. Am Ausgang PWM ist integrator, der Gleichspannung erzeugen soll. Ich meinte, dass sich diese Spannung in

5mV Stuffen ( 5V / 1024 ) erhoehen wird. Leider es funktioniert nicht so. Spannung erhoeht sich in 0,24V-Stuffen. Also diese Inkrementierung ist nicht korrekt. Weisst jemmand wo der Fehler liegen soll ?

Danke

Franz

list P=16F628 #include "P16F628.inc"

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _XT_OSC

cblock 0X20 TMP var1 ddd1 ddd2 ddd3 endc

org 0X0 goto main org 0x5

main bsf STATUS,RP0 ;bank 1 bcf TRISB,3 ; movlw .19 ; PWM period=(PR2+1)*4*Tosc movwf PR2 ;== (19+1)*4* 0.25uS==20uS==50kHz bcf STATUS,RP0 ;bank0 movlw .0 movwf var1

label incf var1 call Delay

movfw var1 ; movlw b'1010' ;PWM duty c=(CCPR1L LSB)*TMR2 movwf CCPR1L ; movlw b'00000100' ; TIMER2 bit2 (Vorteiler 1:1) bit 0:1 movwf T2CON movlw b'00001100' movwf CCP1CON ;3:2 register CCP1CON bit 5:4 sta LSB

;(oscilator 4Mhz) ;(19+1)*4*0.25uS==20uS==50000Hz ;Frekq 50kHz (20uS) ;duty cycle =b'101000'==40*0.24uS*1=10uS

nop goto label

Delay ; delay ... return

END

Reply to
Franz3

"Franz3" schrieb im Newsbeitrag news: snipped-for-privacy@posting.google.com...

a) Ein Integrator ist jedenfalls schon mal falsch. Ein Tiefpass passt.

b) Wenn den PWM nur bis 20 zaehlt, und dein Teiler von 0..20 erhoeht wird, und der uC mit 5V laeuft, steigt die gefilterte Ausgangsspannung in 5/20 = 0.25V-Schritten. Passt also. Zaehlt var1 ueber 20 hinaus, knirscht es.

c) Diringend noch mal lesen was PWM ist.

--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Reply to
MaWin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.