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
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
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
"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.
"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.
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
"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.
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.