Ziel dieser Demo ist es, ein PWM Signal an einem RC-Glied in Gang zu setzen.
P2.5 -- R --x-- C -- GND
Das Forthwort TEST zeigt wie der Pegel an x im RC_Glied rauf und runter gestellt werden kann.
Interaktiv geht es auch. Das Forthwort GO nimmt zwei Werte vom Stack, Periodendauer und Pulsweite. Ein so gestartetes PWM Signal kann dann manuell in der Pulsweite verändert werden, indem man einen anderen Wert in das Register TA1CCR2 schreibt. Versuche einige:
100 50 GO 80 TA1CCR2 ! 10 TA1CCR2 !
\ PWM an RC-Glied mk10112012 \ based on: \ PWM DB 2012-0704 1:30AM \ Thanks to Dirk for figuring out how PWM works at pin P2.2 or P2.5 \ some labels HEX 20 CONSTANT BIT5 30 CONSTANT MC_3 \ Timer A mode control: 3 - Up/Down C0 CONSTANT OUTMOD_6 \ toggle-set 192 CONSTANT TA1CCR0 196 CONSTANT TA1CCR2 186 CONSTANT TA1CCTL2 180 CONSTANT TA1CTL 6 CONSTANT TACLR 200 CONSTANT TASSEL_2 2A CONSTANT P2DIR 2E CONSTANT P2SEL \ handle timer A1 DECIMAL : TA1HALT 0 TA1CTL ! ; \ timer anhalten : SETTA1 ( n1 n2 -- ) ta1halt TA1CCR2 ! \ set pulsewidth TA1CCR0 ! \ set time of period OUTMOD_6 TA1CCTL2 ! \ CCR2 reset/set TASSEL_2 MC_3 + TACLR + TA1CTL ! \ SMCLK, up mode, clear TAR ; \ init portpin P2.5 as PWM output : PWMOUT BIT5 P2DIR CSET BIT5 P2SEL CSET ; : go ( n1 n2 -- ) pwmout setta1 ; \ Tastverhältnis angeben. : stop ta1halt BIT5 P2DIR CCLR ; : runter ( von bis -- ) swap DO i ta1ccr2 ! 10 ms LOOP ; : rauf ( von bis -- ) DO i ta1ccr2 ! 10 ms -1 +LOOP ; : test 200 100 go begin 10 180 runter 10 180 rauf key? until stop ; ( finis )