\ Stroboskop \ based on: \ PWM mk18082012 \ PWM DB 2012-0704 1:30AM \ adapted to 2kHz DB 2012-0722 \ Thanks to Dirk for figuring out how PWM works at pin P2.2 \ MSP430G2553 LaunchPad. \ some labels BIN ( FEDCBA9876543210 ruler ) 100000 CONSTANT BIT5 110000 CONSTANT MC_3 \ Timer A mode control: 3 - Up/Down 11000000 CONSTANT OUTMOD_6 \ toggle-set 110 CONSTANT TACLR \ TA an, IE an. 1000000000 CONSTANT SMCLK \ clock source 11000000 CONSTANT ID/8 \ clock input divider HEX 192 CONSTANT TA1CCR0 196 CONSTANT TA1CCR2 186 CONSTANT TA1CCTL2 180 CONSTANT TA1CTL 2A CONSTANT P2DIR 2E CONSTANT P2SEL \ handle timer A1, ID/8 --> long periods : TA1HALT 0 TA1CTL ! ; : TA1SET ( n1 n2 -- ) \ puls width, period ta1halt TA1CCR2 ! TA1CCR0 ! OUTMOD_6 TA1CCTL2 ! SMCLK MC_3 + TACLR + ID/8 + TA1CTL ! ; \ PWM at P2.5 : AN bit5 p2dir cset bit5 p2sel cset ; : AUS bit5 p2dir cclr ; : +PWM ( n1 n2 -- ) an ta1set ; : -PWM ta1halt aus ; DECIMAL 4750 dup 1 rshift 2CONSTANT 100HZ 47500 dup 1 rshift 2CONSTANT 10HZ : hoeher TA1CCR0 @ 100 - dup 0= IF DROP 10hz +pwm exit THEN dup 1 rshift TA1CCR2 ! TA1CCR0 ! ; : sweep 10hz +pwm begin 50 ms hoeher key? until ; ( finis )
Hinweis: 4e4th basiert auf CamelForth und hat eine 16Bit zweier Komplement Rechnung. Daher klappt 2/ bei Zahlen ab $8000 nicht mehr. Aber mit einem Rechtsshift kann man ja auch durch 2 teilen.