Announcement

Collapse
No announcement yet.

IDX-PRO+VDI

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • hello paku
    which vdi (normal geotech vdi?) or arduino

    for normal geotech vdi i have a double sided layout which fits direct under the 1602lcd, no cable Needed direct stick on

    Comment


    • Originally posted by scrungy_doolittle View Post
      dfbowers:
      There is a bug in the code above, in the display bars....

      if (b3 > 7)
      {
      b3 = 7;
      }
      lcd.write(b3);
      if (b4 > 7)
      {
      b4 = 7;
      lcd.write(b4);
      }
      if (b5 > 7)
      {
      b5 = 7;
      lcd.write(b5);
      }
      lcd.write(b5);
      if (b6 > 7)
      {
      b6 = 7;
      }
      lcd.write(b6);
      if (b7 > 7)
      {
      b7 = 7;
      }
      lcd.write(b7);


      In this section of code consider b3 is > 7 it gets set to 0 and then printed outside of the if statement. That is good
      if b4 > 7 then you set it to 7 and write it INSIDE of the if. so the only time that B4 will be written is if it is >7.
      The same error exists in the b5 >7

      Second comment: Goto's are really a no no in C. I have rewritten the code to eliminate them, have not tested it, but while i
      was doing so I discovered this bug.

      There are a couple of things missing from this code in my opinion.
      There should be in addition to the phase, an indication of what you see. is it in the Dime range? howabout a pull tab?
      The second feature that would be nice, is a timer running showing how long you have had the unit on and running.
      The third feature that would be nice, is a reject range array. If the vdi number is between certain ranges, you just don't show it.
      And the user can set those.
      make two display screens, one default, the other slectable by holding a button down.

      The little 8 character bar graph is pretty cool. On a 16 character display, there is also enough room to display the signal intensity as well, so why not display the average of the
      X and r channels.
      Screen 1 where VIDKIND is a 7 character place for displaying the "guess", and XX:XX is the time since you turned it on, with a user option to be able to set the time and have it downcount
      so you can go hunt for say 45 min and get an indication that it is time to pack up and go back to work
      P= phase, and bb is the bar graph

      VIDKIND XX:XX
      P=xxxx bbbbbbbb

      Screen 2 the pinpoint screen when you hold the pinpoint button down (call it a depth screen or whatever.)
      Where mm is the depth in inches computed from the intensity averages. and bbbbbbbb is your graph, and X and R are the intensity averages that you computed the slope off of.
      X=XXXX R=XXXX mm
      P=XXXX bbbbbbbb
      Yes, thanks for catching the errors. I get sloppy sometimes : / I did not keep it from running though.
      Lot's of options available with the Arduino! I have written at least a dozen variations of this program but all contain the basic logic on sampling.
      You will have to elaborate on the "goto" issue. It seems to work just fine though.
      I grew up learning Basic and Fortran in school, 30-some years ago and just picked it up programming again from the Arduino website.

      Also, thanks for the suggestions on enhancements. In reality, I'm still on a steep learning curve.
      Don

      Comment


      • Originally posted by dfbowers View Post
        Yes, thanks for catching the errors. I get sloppy sometimes : / I did not keep it from running though.
        Lot's of options available with the Arduino! I have written at least a dozen variations of this program but all contain the basic logic on sampling.
        You will have to elaborate on the "goto" issue. It seems to work just fine though.
        I grew up learning Basic and Fortran in school, 30-some years ago and just picked it up programming again from the Arduino website.

        Also, thanks for the suggestions on enhancements. In reality, I'm still on a steep learning curve.
        Don
        Well your code may run, but there is a difference between running and running correctly.... In the case that I pointed out, two of the bars will be wrong.

        I started in 1976 with APL,basic and fortran, then moved to assembly. Moved on to C in 1985 from assembly. I've been programming for many years.
        In general, you do not need goto's. In c, they are restricted to being within a function. You can write any program you want by using structured code.
        for loops in C with breaks and continues. some might argue that breaks and continues are a form of goto. perhaps so. but they are managed by the compiler, and are always forward branches. Do while loops are also structured.
        Look up principle of structured code.

        So lets take a simple example:
        c=0;
        start:
        c=c+1; // just some example code
        if (c==5) goto end
        // code
        goto start
        end:

        c=0;
        do
        {
        c=c+1;
        // code
        }
        while (c !=5);

        A do while loop always executes at least once, and the test is done at the bottom of the loop

        for (c=0; c!= 5;c++)
        {
        // code
        };

        is the same thing, except the test is at the top of the loop, and if it fails the code is not executed.. C starts out at 0, and increments until it hits 5.


        do
        {
        //
        // loops for ever unless you do the following
        break; // exits the loop because it exits the current scope
        }
        while(1);

        for(i=0;i<10;i++)
        {
        if (condition == true) // we need to bail from the loop when this is true
        {
        break; // this will exit the loop
        }
        if(i==4) // we need to skip iteration 5
        {
        i=6; // sets i = 6 overriding the loop control
        continue; // this will branch to the top of the loop resulting in iteration 5 being skipped.
        }
        }

        // next block of code
        in this case break will take you out of the loop to the next block of code, while continue will do an early branch to the test.
        your code uses goto, for example, to transfer control to the top of the loop. But it can be re-written to avoid goto's all to gether.
        Right now it is 10:30 p.m. and I needed to be in bed long ago.
        I will tweak your code and repost it, but right now I am at company headquarters doing a hump week...

        Comment


        • hi
          who can explain me simple discrimination in schematic on IDX?(just know which parts work to this and how?)
          regards

          Comment


          • You have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
            GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.

            How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.

            If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.

            Comment


            • Originally posted by Davor View Post
              You have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
              GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.

              How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.

              If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.
              That is one of the most succinct and to the point explanations of how this works, that I have ever heard. Very nice. And it helps me as well..... Never could suse out the and function.
              So in code, if you have the signal digitized, and the transmit digitized so you can sync, then your discrimination is simply looking for indexes corresponding to in the above example, 100 and 180, assuming that your sample buffer digitizes one sine wave in one degree increments.
              Lets see at 6.59 khz a sine wave cycle takes: 1.5 e-4 seconds or 150 usec. 416 ns sample time would give you 360 samples across one cycle. 2.2msamples per second would be 450 ns per. In actuality 180 samples would give you 2 degree increments, or 180. The nyquist criteria would be to sample at least 13 khz. 2.4 msamples per second would give you 416 ns sample time.
              Can you do that? With the STM32F411 you can get 2.2 with the pic24FJ128CG010 you can sample 10 msamples. Of course there are other ways to skin this cat so to speak. Apparently there are IQ formulas that would allow this.

              Normal VLF detectors actually gate the signal into the analog processing at a phase angle set by a comparator, which essentially amounts to setting a voltage threshold such that at a point in the sinewave, the compartor will output a high, on the rising side of the sinewave. and then turn off on the falling side at the same point. Since the angle is related to time, if you set the trigger point such that it occurs at the dead center of the first hump, you are looking at the angle of 90 degrees relative to the entire sinewave being 360, and starting at 0.

              If you consider the frequency to be x then x/4 = 90 degrees into the wave. X/8 would be 45 degrees into the sinewave. This is what Mr. Crockers arduino code does, he samples 8 times.The frequency is based on the adc sample time and a counter.
              Davor tells me that you can examine any phase point that way, though I don't really understand that part of the math.

              Comment


              • Originally posted by Davor View Post
                You have 3 channels in IDX: All metal, motion GB, and motion discrimination channels. Of these the All metal is used for pinpointing in a quasi non-motion way.
                GB and discrimination channels provide actual discrimination. To grasp it you have to picture a diagram with metal targets responding to a sinus signal stimulus. All metals will have a response somewhere in between 0 and 180° from Tx phase, but ferrous will have it in 0 to 90°, and non-ferrous will have it in 90 to 180°. Both motion channels are used for discrimination which happens in comparators that perform AND logical operation. There is a beep when both GB channel and disc channel provide positive signal at the inputs of comparators.

                How it goes? Say you adjust discrimination channel phase at 90° sharp. GB channel is aligned with the soil response which is in vicinity of 0° and it goes positive if response is in 0 to 180° range, and discrimination channel goes positive when response is in 90 to 270° range. It means that both channels will give positive responses only if a target response is in a range between 90 and 180°.

                If you want to exclude aluminium foil from detection, you simply adjust discrimination a little over 90° (say 100°) and your discrimination range becomes 100 to 180°.
                many thanks .i am amateur.but very well.it is very complete man .i understand every think you say.but have another question , if need i open new topic?
                1-i see axis R and X in IGSl project(by dfbowers) but really hard to understand the axis diagram.(so sorry).
                2- why in this frequency should we work, cant use higher frequency?
                3-preamp (5534) how work in vlf, like PI or no?
                regards

                Comment


                • Originally posted by mohandes View Post
                  many thanks .i am amateur.but very well.it is very complete man .i understand every think you say.but have another question , if need i open new topic?
                  1-i see axis R and X in IGSl project(by dfbowers) but really hard to understand the axis diagram.(so sorry).
                  2- why in this frequency should we work, cant use higher frequency?
                  3-preamp (5534) how work in vlf, like PI or no?
                  regards
                  Hi my friend, trust me, it is not complicated.
                  1-the R axis corresponds to GB channel. It has a zero response only for ground response, and ideally for objects underneath a coil it has positive response for all metal objects imaginable. X axis is equal to Disc channel, and it has positive response for non-ferrous, but negative for ferrous objects.
                  2-you can use any frequency you wish, and the same principle works, but the coils are well balanced for a range of frequencies, and some Tx oscillators are not working if coil Q-factor is below optimum for a given frequency. Many devices have audio synthesized from Tx frequency. So everything considered it is much easier making a device for a single frequency. Square wave Tx and somewhat different front end makes it possible to extend frequency range, but that is not IDX. IDX is a device optimal for relic hunting, and frequency is chosen accordingly. Changing a frequency within one octave will not make significant difference anyway.
                  3-preamps in VLF have a much easier, but completely equal role as in PI detectors. They are never turned into saturation as in PI, but everything else is equal - they have to improve input S/N

                  Comment


                  • Originally posted by scrungy_doolittle View Post
                    Well your code may run, but there is a difference between running and running correctly.... In the case that I pointed out, two of the bars will be wrong.

                    I started in 1976 with APL,basic and fortran, then moved to assembly. Moved on to C in 1985 from assembly. I've been programming for many years.
                    In general, you do not need goto's. In c, they are restricted to being within a function. You can write any program you want by using structured code.
                    for loops in C with breaks and continues. some might argue that breaks and continues are a form of goto. perhaps so. but they are managed by the compiler, and are always forward branches. Do while loops are also structured.
                    Look up principle of structured code.

                    So lets take a simple example:
                    c=0;
                    start:
                    c=c+1; // just some example code
                    if (c==5) goto end
                    // code
                    goto start
                    end:

                    c=0;
                    do
                    {
                    c=c+1;
                    // code
                    }
                    while (c !=5);

                    A do while loop always executes at least once, and the test is done at the bottom of the loop

                    for (c=0; c!= 5;c++)
                    {
                    // code
                    };

                    is the same thing, except the test is at the top of the loop, and if it fails the code is not executed.. C starts out at 0, and increments until it hits 5.


                    do
                    {
                    //
                    // loops for ever unless you do the following
                    break; // exits the loop because it exits the current scope
                    }
                    while(1);

                    for(i=0;i<10;i++)
                    {
                    if (condition == true) // we need to bail from the loop when this is true
                    {
                    break; // this will exit the loop
                    }
                    if(i==4) // we need to skip iteration 5
                    {
                    i=6; // sets i = 6 overriding the loop control
                    continue; // this will branch to the top of the loop resulting in iteration 5 being skipped.
                    }
                    }

                    // next block of code
                    in this case break will take you out of the loop to the next block of code, while continue will do an early branch to the test.
                    your code uses goto, for example, to transfer control to the top of the loop. But it can be re-written to avoid goto's all to gether.
                    Right now it is 10:30 p.m. and I needed to be in bed long ago.
                    I will tweak your code and repost it, but right now I am at company headquarters doing a hump week...
                    Much appreciate your time for the short tutorial. It is said that most things you learn in life are learned while trying to accomplish something else.. and programming Arduinos is apparently one of those.

                    Comment


                    • @scrungy_doolittle, you are extremely lucky not to be my geometry pupil, as I'd flank you with most graceful ease. IDX is a traditional VLF motion metal detector. I explained how such a detector sorts out what targets need to produce a sound, and a mechanism of exclusion. a target between the boundaries will produce a simple sound - nothing more, and nothing less.

                      However it is quite possible to do exactly the same in a micro, there are constraints that say - don't do it.

                      With a micro and a display, and perhaps a DAC to make sound indication, the last thing you may wish to do is to revert to a compulsory simplicity of analogue VLF. Because of time-discrete operation, you simply can't produce a stimulus at any desired phase. You just can't. What you can do instead is play with I and Q values, and reach to any degree imaginable by math. That's the detail you flanked.
                      In analogue you can get to any phase imaginable, but in the very IDX you don't do that. Instead you apply addition to reach a desired discrimination angle, just as you'd do with a micro.

                      Because you can distinguish an exact angle of any target response by observing I and Q ratio, you do not have to pay any attention to a classical detector mode of discrimination. You simply map phase to a desired sound representation, and display indication, The VDI that is paired with IDX does half of that job.

                      I suggest you to take a piece of paper and draw it. A little trigonometry will help a lot. Once you are able to visualise things that way, you'd be able to convert it into code, but not sooner than that. There are many things you can do to enhance signal detection with a micro, but mimicking a traditional VLF will surely not get you anywhere.

                      Hope I did not burst any bubbles with this post.

                      Comment


                      • mohandes Have you got a problem with ground balance or discrimination. If so the problem maybe with you coil. If the RX phase is too far out your detector will not ground balance or discrimination correctly.


                        By the way there is a performance advantage using LF347 instead of LM324

                        Comment


                        • Originally posted by Koala View Post
                          mohandes Have you got a problem with ground balance or discrimination. If so the problem maybe with you coil. If the RX phase is too far out your detector will not ground balance or discrimination correctly.


                          By the way there is a performance advantage using LF347 instead of LM324
                          hi my friend.i have not scope to set my dd coils.
                          but i really decide to do this and solve my problem.

                          if not problem ask another question here( just for improve my knowledge )
                          first analysis TX :
                          i see 2 bc237, what do these?(say better for why?)
                          and then lm393 do disc and GB.then 4066 (is switch) how work? Rx when amplifier by ne5534 go to 4066.how 4066 switch?(what parameter is important to switch)
                          excuse for my English

                          Comment


                          • hi
                            my friend another question
                            tx an rx have more than 5khz frequency. so how it is covert to 400hz.

                            Comment


                            • In VLF we use synchronous demodulators to extract information that is amplitude and phase modulated into the carrier signal (at above 5kHz). This information is directly linked to the speed of targets passing against the coil. So imagine 100 coins in a row, and you pass above them with a coil in 1/4 of a second, you'll notice all 100 of them as 400Hz signal.
                              For practical purposes we limit the response to ~30Hz because it has better S/N. In case you need sharper response, and you don't need superior S/N, you can filter at 100Hz, or even more.

                              Comment


                              • Newbie question .

                                this is my analysis fo this pics:
                                Click image for larger version

Name:	Untitled.png
Views:	1
Size:	41.4 KB
ID:	343022
                                when TX coil send waves to targets and find any metal , so this part protect the TX or i am mistake ?so better say if we delete this part how tx work

                                Comment

                                Working...
                                X