TSL237 light to frequency detector
ratronic
Posts: 1,451
I decided to check out Parallax's light sensor and wrote a simple program to display the output frequency to the serial terminal. Sitting indoors @ ~5:00 with the TV's on lights off I get around 3 - 4 kHz.
With the room light turned on I get ~ 53 khz. Since this is so sensitive I am averaging 512 samples to smooth it out. I seem to remember reading another thread were I think people were saying
that they usually don't reset the phsa in their program. I'm doing it here and it seems to work ok.
With the room light turned on I get ~ 53 khz. Since this is so sensitive I am averaging 512 samples to smooth it out. I seem to remember reading another thread were I think people were saying
that they usually don't reset the phsa in their program. I'm doing it here and it seems to work ok.
Con 'capture frequency output from tsl237 to serial terminal (run tsl237 from 3.3v) 'assembly routine sets counter to capture clk cycles while APIN is low and return full clock freq averaged 512 times _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 APIN = 2 'propeller port connected to tsl237 output pin Var long freq Obj pst : "parallax serial terminal" Pub Main pst.start(9600) cognew(@entry, @freq) repeat pst.char(1) pst.str(string("Frequency = ")) pst.dec(clkfreq / freq) pst.chars(32, 10) Dat org 0 Entry mov t1, cntr 'set t1 loop counter movs ctra, #APIN 'set counter Apin movi ctra, #101_000 'set counter to accumulate when counter Apin is low waitpne pin, pin 'wait for counter Apin to be low waitpeq pin, pin 'wait for counter Apin to be high mov frqa, #1 'start accumulating in phsa when counter Apin/condition is met :loop waitpne pin, pin 'wait for counter Apin to go low waitpeq pin, pin 'wait for counter Apin to go high add t2, phsa 'add # clk cycles Apin was low in t2 mov phsa, #0 'reset accumulator to 0 djnz t1, #:loop 'repeat this loop t1(cntr) times sar t2, #9 'divide t2 by 512 to get average of A pin low lengths shl t2, #1 'multiply t2 by 2 to represent a full clock length (high & low) wrlong t2, par 'write t2 to hub variable freq mov t1, cntr 'set t1 loop counter jmp #:loop 'start loop again pin long 1 << APIN 'pinmask for counter Apin cntr long 512 '# of times to average output t1 res 1 'temp var used for averaging loop counter t2 res 1 'temp var used for processing and writing to hub clk length freq
zip
10K