We will be closed on November 25, 2021 and November 26, 2021 in observance of the Thanksgiving holiday. We will resume normal operations on November 29, 2021. Wishing you a safe and happy holiday from all your friends at SparkFun!


Receive a free SparkFun USB Thumb Drive with every order this weekend. Details.


Member Since: March 5, 2009

Country: United States

  • Sweet work with the cluster computation. Have you built it and found it to work?

    I would only caution against the smaller values due to current, per above (i.e., at some point is that 51 Ohm or the 39 Ohm above it the only resistor in the circuit? If so, then high current!). But if it works it works.

  • I see that at least one other user wants to do what I want to do: use two of these on the same I2C bus. Technically, I want to use 4 of them on 2 I2C buses.

    Both the Accel and the Gyro are already using the 'optional' address by grounding a pin. I have busted a couple of boards :-( by trying to enable the "normal" address with the old cut-and-jumper tricks. Too small.

    It would be AWESOME if the next revision had a solder-pad option to select a few things: 1) ADXL: Alt Address pin held High or held Low 2) ITG: Alt Address Pin held High or held Low 3) HMC: Connect or Disconnect Power (because it does Not have an alternate address)

    It may even be possible to put all this on the back of the board and not take up space?

    I'd make the same request for the other (no Compass) version: IMU Digital Combo Board - 6 Degrees of Freedom ITG3200/ADXL345 (SEN-10121).

    I would buy several more if either item had this option!

  • Your understanding of the board is correct, you just forgot that with pin 1 shorted to pin 7, the readings from pins between 1 and 7 will all be the same, not ambiguous.

    That is, with V1 == V7, you get no current through the resistor ladder between them, so the implication is that V1==V2==V3==V4==V5==V6==V7.

    So tapping at e.g. Pin 4 and pressing Button 5 (short pin1 and pin7), V1 through V7 all have a voltage reading coming from a simple voltage divider of the first (left of pin1) and last (right of pin7) resistors in the ladder.

    As for the equal values problem on e.g. R1 and R2, you're right. But that's the very problem that motivates the combinatorics - finding the combination that optimally spaces the output voltages.

    Give it a shot, the way I'm using it has been working well and reliably, and the noise is not a problem because the readings are so far apart!

  • There are a couple of improvements to be made to this resistor ladder technique.

    • The resistor ladders discussed so far are tapped at "Pin 7", where there is relatively little possible variation in voltage. It should be tapped somewhere in the middle, so that the voltage can swing nearly rail-to-rail with different button pushes.

    • The combinatorics haven't been done quite right by either example. The 24-choose-7 = ~350,000 combinations assumes every value can be used only once, whereas in fact repeats are allowed. This pushes the number of combinations into the billions, where an exhaustive search is impractical.

    Nevertheless, much better separation can be achieved. Using a random-sampling approach on 500,000 combinations from the set of resistor values [220 470 560 3300 3900 4300 4700 5600 6800 8200] (based on a sample-pack of surface mount resistors I had, limited to values large enough to keep the current reasonably low), the following set of resistors works much better (P==Pin, R==Resistor):

    ** +Vs--P0--R470--P1--R5600--P2--R8200--P3/TAP--R3300--P4--R5600--P5--R8200--P6--R3900--P7--R220--P8--GND**

    Tap it to the A/D at "Pin 3".

    The minimum voltage difference between button pushes is 3.4% of Vsupply. That's 35 digital levels of a 10-bit (1024 level) A/D converter. That should be more robust to variations in contact resistance of the buttons.

    Here are a couple other good combinations with similar results:

    [560, 5600, 8200, 3300, 3300, 6800, 3300, 4700], tapped at "Pin 4". Minimum of 3.2% of Vsupply (33 digital levels of 10-bit A/D).

    [3300, 6800, 8200, 4300, 3300, 4700, 3300, 4700], tapped at "Pin 4". Minimum of 2.3% of Vsupply (24 digital levels of 10-bit A/D). Note the higher values here - good for lower current.

    [220, 3300, 8200, 4700, 3900, 8200, 4300, 560], tapped at "Pin 4". Minimum of 2.7% of Vsupply (28 digital levels of 10-bit A/D).

    I've been using that last one, and the data returned are pretty reliable. The lowest difference I've observed in practice was 18 digital levels, lower than spec because my VSupply is just a GPIO, and it's still drawing too much current when you push button "5" (shorts pins 1-7; resulting resistance 780 ohm; current ~4.2mA). You might want to multiply them all by 10 to prevent that problem, or use one of the other options above.

    Hope that helps.

  • These are really useful loggers. However, the LPC2148 has more capabilities than the datalogger, and I'm not sure why. Most notably, the LPC2148 has 14 analog ins, but only 8 are made available.
    Why not use single-use pins for dedicated jobs, and make the rest of the analogs available for input? For example, the uSD socket uses SPI port 0 (CS0, MOSI0, MISO0, SCK0), but these pins could double as analog ins (0.6, 0.7, 1.0), timer functions, interrupts or PWMs if they were free. Meanwhile SPI port 1, which has only timer and interrupt alternate functions, is left available to the user. I suggest that this should be reversed.
    Also, the USB port uses simple GPIO functionality, but is taking up useful analog input pins (0.0, 0.5). Why not use some of the free GPIO pins for USB instead?
    Perhaps even the BATTLVL can be freed up (maybe optionally, using a DIP switch or jumper?)
    Finally, why not expose the rest of the GPIO pins along the other edge, near the programming header?
    These simple changes could make Logomatic into a really exceptional microcontroller, rather than a simple data logger. Perhaps a Version 3 can make more complete use of the LPC's resources?

No public wish lists :(