ADC Sampling Breakthrough

14546474850

Comments

  • jmgjmg Posts: 14,094
    edited 2019-10-10 - 02:35:58
    evanh wrote: »
    That's more detail than is suitable for a one-liner.

    The most important part of my list is the classification clarification of what the type of measurement is: count, accumulate or interval.
    I agree Counter / Timer (interval) info helps, but the word accumulate needs care.
    Some modes I read as gated-timers, which may appear to accumulate during multi period readings, but some reset-on-capture, so using accumulate can confuse users.
    Better would be Gated Counter/ Counter / Gated Timer / Timer, to use terminology that users of other MCU are used to.

    Addit: maybe Period Timer and Gated Period timer are needed too, as P2 smart pins can do more than most MCU timer-blocks. A period timer includes edge-sync features.
  • jmg wrote: »
    Addit: maybe Period Timer and Gated Period timer are needed too, as P2 smart pins can do more than most MCU timer-blocks. A period timer includes edge-sync features.

    I don't want to give any of them a timer label because they are primarily for external measuring of inputs. Where as a timer is more associated with simple metronomics for internal use.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • evanh wrote: »
    Lol, I bet Wendy's seen it all before.

    Wendy only takes notice of something if there's a problem compiling it, and even then what it does is meaningless to her.
  • %10000 = Time A-input low states and high states
    %10001 = Time A-input high states
  • cgracey wrote: »
    Wendy only takes notice of something if there's a problem compiling it, and even then what it does is meaningless to her.

    :) I was meaning just the large increase in transistor count, rather than what it's doing.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • evanhevanh Posts: 8,261
    edited 2019-10-10 - 05:15:51
    Ugh! I've failed to comprehend the last three of those modes. You can ignore the description I've got on them.

    EDIT: Ah, I think there's a buffering effect that's got me all in knots.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • jmgjmg Posts: 14,094
    cgracey wrote: »
    %10000 = Time A-input low states and high states
    %10001 = Time A-input high states

    See questions above
    Does this mode pair clear-on-capture ? Merely says "... and a new measurement begins"
    Also vague is if this is 'gapless' ?
    My guess is one period is consumed at each boundary, but it may be smart enough to capture & restart on the same edge, making capture X-Whole_Periods Time sums gapless, and equivalent to real time.
    (with just a phase delay on the very first edge, after smart pin config/arming, after that, no lost time)


  • jmg wrote: »
    cgracey wrote: »
    %10000 = Time A-input low states and high states
    %10001 = Time A-input high states

    See questions above
    Does this mode pair clear-on-capture ? Merely says "... and a new measurement begins"
    Also vague is if this is 'gapless' ?
    My guess is one period is consumed at each boundary, but it may be smart enough to capture & restart on the same edge, making capture X-Whole_Periods Time sums gapless, and equivalent to real time.
    (with just a phase delay on the very first edge, after smart pin config/arming, after that, no lost time)


    It's gapless, of course. When the input transitions high, it signals for you to get the low time, and vice-versa. No measurement mode misses anything. Everything is gapless.
  • jmgjmg Posts: 14,094
    cgracey wrote: »
    It's gapless, of course. When the input transitions high, it signals for you to get the low time, and vice-versa. No measurement mode misses anything. Everything is gapless.

    That's good, does that include these modes ?
    %10011 Time captured over X whole A-B periods. (Time to read is X periods)
    %10100 is a gated version of that, A=H=Enable, so it gives a % of H time.

    Gapless here needs the X edge that captures, to also be the edge that starts the next time-whole-X ?

    The Smart Pin DOCs should include this important detailing.

  • Yes, gapless means whatever completes the prior reading is also the start of the following reading. Yes, all modes are gapless where relevant.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • TonyB_TonyB_ Posts: 1,346
    edited 2019-10-10 - 11:08:07
    evanh wrote: »
    Here's my most recent summary of the smartpin counter modes: <snip>
    Suggest removing leading tab and one of the two before ' and space after ' to avoid/reduce sideways scrolling on smaller displays:
    SPM_CNT_QUAD	= %01011_0	'count: A-B quadrature encoder
    SPM_CNT_UP_ENA	= %01100_0	'count: A clock up, B enable
    SPM_CNT_DIR	= %01101_0	'count: A clock, B direction
    SPM_CNT_UP	= %01110_0	'count: A clock up
    SPM_CNT_UP_DN	= %01110_0	'count: A clock up, B clock down
    SPM_ACC_UP	= %01111_0	'accumulate: A up
    SPM_ACC_UP_DN	= %01111_0	'accumulate: A up, B down
    SPM_TIM_STEP	= %10000_0	'interval: of most recent step duration
    SPM_TIM_PULSE	= %10001_0	'interval: of most recent pulse duration
    SPM_TIM_A	= %10010_0	'interval: of X number of A accum/pulses/steps
    SPM_TIMEOUT	= %10010_0	'interval: since high/step
    SPM_TIM_PULS	= %10011_0	'interval: of X number of A-B pulses/steps
    SPM_ACC_PULS	= %10100_0	'accumulate: A up, of X number of A-B pulses/steps
    
    SPM_TIM_OVER	= %10101_0	'interval: until X time + A-B step
    SPM_ACC_OVER	= %10110_0	'accumulate: A up, until X time + A-B step
    SPM_CNT_OVER	= %10111_0	'count: pulses/steps, until X time + A-B step
    
    Formerly known as TonyB
  • Cripes, you must have a very small display there Tony. My browser is only 1280 wide with no scrolling needed ... and I've even got bulky fonts because it's all on a 4k monitor with those extra small pixels.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • evanh wrote: »
    Cripes, you must have a very small display there Tony. My browser is only 1280 wide with no scrolling needed ... and I've even got bulky fonts because it's all on a 4k monitor with those extra small pixels.

    1024x768 and your table fits perfectly with whitespace trimmed.
    Formerly known as TonyB
  • I recommend a 43" for your next monitor. :) I wish I'd waited a little longer until they were on the market. I guess I could have gone for a TV back then but I didn't really trust them, finding info like IPS construction is not generally available for TVs.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • evanh wrote: »
    I recommend a 43" for your next monitor. :) I wish I'd waited a little longer until they were on the market. I guess I could have gone for a TV back then but I didn't really trust them, finding info like IPS construction is not generally available for TVs.

    +1

    Note that the "screen door" effect on TVs can be bad if used as a monitor, so definitely go for 4k. ;)
    James https://github.com/SaucySoliton/

    Invention is the Science of Laziness
  • evanhevanh Posts: 8,261
    edited 2019-10-11 - 15:14:43
    Tony,
    It won't fit now. I've started using the extra space. :D

    EDIT: I think I've got things tidy and correct now - https://forums.parallax.com/discussion/comment/1479535/#Comment_1479535

    EDIT2: Getting a handle on these modes means I'm reasonably sure that SPM_ACC_OVER can provide a synchronised pulse density measurement without any external clock. The tricky part will be in processing it, since the timebase becomes uncertain due to complete pulses determining each sample period.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • jmgjmg Posts: 14,094
    evanh wrote: »
    EDIT: I think I've got things tidy and correct now - https://forums.parallax.com/discussion/comment/1479535/#Comment_1479535
    I think introduction of new words here (step, pulse then step/pulse ?), that are not used in Chip's docs, will only confuse users.

    Chip uses period in the DOCs, why not keep using that ?

    Chip uses 'state' which is also confusing, when I think he really means gated, or 'enabled when hi' (working back from context)
    Other MCUs talk about Timer/Counters/Capture and Gated (Timers or Counters), so those terms are already in common use, & best to use words that cross language barriers already.

    The change to 'for at least X duration' is good here, as that shows the very important detail of whole periods.

    SPM_TIM_OVER = %10101_0 ' interval: of A-B pulses/steps, for at least X duration
    SPM_ACC_OVER = %10110_0 ' accumulate: A-B pulses/steps, for at least X duration
    SPM_CNT_OVER = %10111_0 ' count: A-B pulses/steps, for at least X duration

    but OVER means over what ? Better may be SPM_CNT_GEX for Greater than or equal to X aka for at least X duration.

    FWIR Chip has designed most (all?) smartpin modes to clear-on-capture, and in a smart way. (if an edge was going to increment, on capture clock instant, clear is to 1 instead of 0, to not lose an edge)
    That feature not showing yet in all pinmode sections docs, but is hinted at by ".. then the result will be placed in Z, while the accumulator will be set to the 0/1/-1 value that would have otherwise been added into it, beginning a new measurement"

    That means 'accumulate' is going to rather confuse users, as nothing actually accumulates across readings. A better top level word than accumulate, is gated, which is what the HW actually does.
    Gated modes will always have some duty related percentage of 100% of possible count, but otherwise acts the same as whole-period modes.

    A merge of Chip's docs
    %10101 = For periods in X+ clock cycles, count time
    %10110 = For periods in X+ clock cycles, count states
    %10111 = For periods in X+ clock cycles, count periods

    and merge of the above, for clarity (removing words pulse/step/state) would give something like this

    SPM_TIM_GEX = %10101_0 ' Time interval of N whole periods, for at least X duration (capture dT)
    SPM_GAT_GEX = %10110_0 ' Gated time interval of N whole periods, for at least X (capture %dT)
    SPM_CNT_GEX = %10111_0 ' Count of N whole periods, for at least X duration (capture dN)


    Some examples:
    Reciprocal Counting:
    Two smart pins, in complementary modes of
    SPM_TIM_GEX = %10101_0 ' Time interval of N whole periods, for at least X duration (capture dT)
    SPM_CNT_GEX = %10111_0 ' Count of N whole periods, for at least X duration (capture dN)
    started in sync, with a nominal/min capture timebase of X, will give precise, no lost edges, continual readouts of Cycles and Time, for a reciprocal calculation of Freq = dN/dT, and a background rolling total of sum(dN)/sum(dT) will give very high precision frequency calculations.

    Precision Duty:
    Two smart pins, in complementary modes of
    SPM_TIM_GEX = %10101_0 ' Time interval of N whole periods, for at least X duration (capture dT)
    SPM_GAT_GEX = %10110_0 ' Gated time interval of N whole periods, for at least X (capture %dT)
    started in sync, with a nominal/min capture timebase of X, will give precise, no lost edges, continual readouts of %dT and dT, for a Duty calculation of Duty= %dT/dT, and a background rolling total of sum(%dT)/sum(dT) will give very high precision Duty.

    Simpler Duty:
    With a good stability Duty source, one smart pin can alternate
    SPM_TIM_GEX = %10101_0 ' Time interval of N whole periods, for at least X duration (capture dT)
    with
    SPM_GAT_GEX = %10110_0 ' Gated time interval of N whole periods, for at least X (capture %dT)
    Alternating readouts of %dT and dT, for an estimated Duty calculation of Duty= %dT/dT
    Poor stability sources, will jitter/wander between these two captures, but they should track slow thermal drifting of RC oscillators in sensors.

  • jmgjmg Posts: 14,094
    edited 2019-10-11 - 20:17:08
    cgracey wrote: »
    It's gapless, of course. .... No measurement mode misses anything. Everything is gapless.
    Expanding the gapless question a little, in my post above of simple duty, using alternate smart pin modes, what happens ?
    I presume the change of mode resets everything, and it will need to pause (typically) one iDuty period to resync, but the captured changes will be valid ?
    For higher rate sensors, that's not going to matter much, but for lower rate ones (capture a single pulse) it may lower user reading rate a little - becomes Fi/4 ?
    Precision Duty avoids this, giving reading rate of Fi, but costs 2 smart pins.
  • Some mode combinations can be alternated but others just die. Many smartpin modes need a DIRL/DIRH surrounding sequence. As for gaplessness, I think all bets are off when changing modes. You might get lucky in special cases of close modes.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • @evanh
    Hello evan,
    I have been fiddling with your lutson.spin2 attempting strip out the portion that
    transmits to the serial terminal.
    My goal is to learn how to print from P2asm.
    I can get it to print but after a lot of noise, then the print works, then more noise as if the baud rates don't match.
    Noted that there are a variety of ways to perform this feature.

    Would you look at my code please. What am I missing.
    Thanks for posting the other code. Learning a lot.
    Martin
    “Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it.”
    “You only live twice:
    Once when you are born
    And once when you look death in the face”
  • evanhevanh Posts: 8,261
    edited 2019-11-18 - 00:16:10
    You've distilled it down pretty good there Pilot Martin. The catch is RCFAST isn't a fixed frequency. Die temperature affects it a lot, and die temperature is affected by the prop2 power consumption as well as room temperature.

    So, unless you're planning on adding regular recalibrations into your code, then you'll be wanting to turn on the crystal clocking of the propeller.

    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • How do I do that. The crystal clocking setting??
    Thanks for looking at it.
    “Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it.”
    “You only live twice:
    Once when you are born
    And once when you look death in the face”
  • evanhevanh Posts: 8,261
    edited 2019-11-19 - 03:02:06
    I could have done it as a single cryptic HUBSET value but it's nice to be able to quickly adjust the PLL parameters without having to think about re-encoding it. Cluso did a clearly laid out full set of constants a year ago that I've been referencing ever since - https://forums.parallax.com/discussion/comment/1452025/#Comment_1452025

    Attached is slightly limited more compact version for your use. Also has a few bug fixes - which turns out to be the no-serial-gaps is the real reason for your original problem.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • @evanh

    Thanks
    “Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it.”
    “You only live twice:
    Once when you are born
    And once when you look death in the face”
  • @evanh

    So far works great. I will study the link you sent. I will probably have a bunch of questions.
    Thanks for the leg up. Now I can go play as I learn more.
    “Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it.”
    “You only live twice:
    Once when you are born
    And once when you look death in the face”
  • @evanh

    Can do characters. Next I will work on math.
    Thanks again
    “Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it.”
    “You only live twice:
    Once when you are born
    And once when you look death in the face”
  • @evanh

    Now getting a better understanding. Looked again at your loc_bug.spin2 and am better understanding.
    Porting over you code slowly. Cool! Again thanks.
    “Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it.”
    “You only live twice:
    Once when you are born
    And once when you look death in the face”
  • :)
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
  • @evanh

    Next issue. Have been trying to, say, do plain addition. 2+2. not being able to print result. Looked in several areas. Looked at your code and have this question.
    Like in your bcd section, how do you get the print routine to print the number? I don't see it.

    Thanks
    “Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it.”
    “You only live twice:
    Once when you are born
    And once when you look death in the face”
  • evanhevanh Posts: 8,261
    edited 2019-11-27 - 02:34:30
    The BCD store space is basically a string, but with 4-bit characters instead of 8-bit.

    Cordic result from QDIV operation produces the quotient, in QX, and the fractional part as a remainder, in QY. Conveniently, when dividing by ten (Effectively a right shift in decimal) the least most digit becomes the remainder. No adjustment needed.

    The routine iterates a divide by ten, extracting the decimal digits one by one, least significant first. Then, once the input integer equals zero, the BCD string is printed, most significant first.

    PS: I assumed you are asking about how the "itod" function works.
    We have the vastness of the internet and yet billions of people decided to spend most of their time within a horribly designed, fake-news emporium of a website that sucks every possible piece of personal information out of you so it can sell it to others. And they see nothing wrong with that.
Sign In or Register to comment.