2914_altimeter object in combination with LCD_Ding_Batty gives strange result *SOLVED*
JeroenG
Posts: 5
Hi everyone,
I have a HD44780 lcd where I want to display altitude on.
Using the spin object of Ding-Batty (http://obex.parallax.com/object/337) I'm able to display text, and I've already used it to display gps information.
When I however call the start function of the 2914 Altimeter object (https://www.parallax.com/downloads/altimeter-driver-and-demo-spin-source-code) the display is showing strange things.
Sometimes it displays space characters in between the text (e x a m p l e), and sometimes also strange characters.
I confirmed that both objects work fine separately, but not together.
Unfortunatly I'm still a newbie on spin, and I have no clue on why this happens.
I attached the test project that I used to verify the problem.
Is there anyone who can help?
Thanks
Jeroen
I have a HD44780 lcd where I want to display altitude on.
Using the spin object of Ding-Batty (http://obex.parallax.com/object/337) I'm able to display text, and I've already used it to display gps information.
When I however call the start function of the 2914 Altimeter object (https://www.parallax.com/downloads/altimeter-driver-and-demo-spin-source-code) the display is showing strange things.
Sometimes it displays space characters in between the text (e x a m p l e), and sometimes also strange characters.
I confirmed that both objects work fine separately, but not together.
Unfortunatly I'm still a newbie on spin, and I have no clue on why this happens.
I attached the test project that I used to verify the problem.
Is there anyone who can help?
Thanks
Jeroen
zip
43K

Comments
It looks like there's a bug in the 29124 Altimeter object code. In the start_explicit() function, the code tries to set the resolution to 1024, but it does this before initializing I2C or access to the altimeter, which I think results in collecting samples() using incompletely initialized variables.
I moved the call to set_resolution() in the start_explicit() code that should be sufficient to fix the problem:
PUB start_explicit(sc, sd, bkgnd) | i {{ Start the object using a prescribed pinout for SCL and SDA. '' '' `Parameters: '' '' `sc: Pin number for SCL. Can be bitwise ORed with the constant `MS5611 to use that chip. '' `sd: Pin number for SDA. Can be bitwise ORed with the constant `MS5611 to use that chip. '' `bkgnd: `true to start background acquisitions, `false not to. '' '' `Return: 255 or the cogid + 1 of the background process on success, 0 on failure. '' '' `Example: alt.start_explicit(7, 8 | alt#MS5611, false) '' '' Start the object using P7 for SCL and P8 for SDA, but do not start a background '- process. Use the MS5611 chip, rather than the default MS5607 }} stop sea_press := SEA_PRESS_STA ' set_resolution(RES_1024) ' <<<<--- I removed this line scl := sc & $1f sda := sd & $1f dev5611 := (sc | sd) & $80 ptr~ _i2c_init _i2c_send_cmd(CMD_Reset) waitcnt((clkfreq >> 3 #> 400) + cnt) repeat i from 0 to 5 c1[i] := _read_prom(i + 1) started~~ set_resolution(RES_1024) ' <<<<---- and added the line back here samples if (bkgnd) if (lock := locknew + 1) ifnot (started := cognew(_do_background, @stack) + 1) lockret(lock - 1) return startedBy the way, the LCD display code was some of the first code I wrote for the Propeller -- well actually it is the second version of the code, the first version was terrible
Nowedays the serial displays are more common, but I had this one lying around, so always good to see other people also still use them.
Thank you!
Please share your working project so that more new people can learn from it.