Memsic 2125 object
SSteve
Posts: 808
I have a question about the Memsic 2125 accelerometer object from the Propeller Object Library. This is the beginning of the assembly routine:
What if the X-axis and Y-axis pins are already high the first time through the loop? Won't "levelx" and "levely" be initialized with values that are too small? It seems like there should be a "waitpeq zero,mask_value" before the ":loop" label. Or maybe even as the first line of the loop in case the pins go high again before the loop can complete.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
OS-X: because making Unix user-friendly was easier than debugging Windows
links:
My band's website
Our album on the iTunes Music Store
entry mov ctra,ctra_value 'Setup both counters to simultaniously mov ctrb,ctrb_value 'read the X-axis and Y-axis from the accelerometer mov frqa,#1 mov frqb,#1 :loop mov phsa,#0 'Reset phase A and phase B on each counter mov phsb,#0 waitpeq mask_value,mask_value 'Wait until both the X-axis and Y-axis pins go HIGH waitpeq zero,mask_value 'Wait until both the X-axis and Y-axis pins go LOW mov rawx,phsa 'move raw phase A and raw phase B values into their mov rawy,phsb 'coresponding variables rdlong t1,par wz 'check calibration flag if_nz mov levelx,rawx 'If the calibration flag is set, initialize if_nz mov levely,rawy 'offset variables to compensate level tilt error. if_nz wrlong zero,par 'reset calibration flag to zero
What if the X-axis and Y-axis pins are already high the first time through the loop? Won't "levelx" and "levely" be initialized with values that are too small? It seems like there should be a "waitpeq zero,mask_value" before the ":loop" label. Or maybe even as the first line of the loop in case the pins go high again before the loop can complete.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
OS-X: because making Unix user-friendly was easier than debugging Windows
links:
My band's website
Our album on the iTunes Music Store
Comments
The calibration is just a "Zero-ing" routine based on what you are calling level. (Note: It may not actually be level to the Memsic sensor)
From the Spin code you could/can always re-issue a calibrate or leveling command at any time that you wish.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Beau Schwabe
IC Layout Engineer
Parallax, Inc.
I thought about this some more, and I don't think it·is a problem if you are using that object from Spin the way it was presented.
When you 'start' the Memsic object from Spin, the object has already gone through several iterations before you initiate the 'calibrate'
command. Because of this the object is already in sync with the Memsic accelerometer and there is no need to use a "waitpeq zero,mask_value".
You could I guess, but I think it would be redundant.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Beau Schwabe
IC Layout Engineer
Parallax, Inc.
Post Edited (Beau Schwabe (Parallax)) : 12/27/2006 7:23:44 AM GMT
Please tell me if my understanding of cog usage is correct. The spin code in 'memsic_demo.spin' and 'memsic2125.spin' is all running in the same cog. The assembly code in 'memsic2125.spin' is running in its own cog. Right?
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
OS-X: because making Unix user-friendly was easier than debugging Windows
links:
My band's website
Our album on the iTunes Music Store