There is only one ADC in the sitara processor.
There is a 8 to 1 mux to provide you with 8 inputs.
If you want really fast multi channel ADC conversions you may want 8
separate ADC Chips external
to the processor.




On 9/30/2015 12:26 PM, Rathin Dholakia wrote:
> Dear Thomas,
>
> First of all, Thanks a lot for coming by and answering, I respect your
> efforts in developing in libpruio!! I cant imaging how much work you
> must have put in..! :-)
>
> Well, second things is you mean to say if I use 8 ADCs I cant achieve
> 1.25Khz+ sample rate, Than should I use external ADC? would it be easier?
>
> and to be frank I have plenty of doubts in the pruio construct and
> pruio_config, I which are as follows:
>
>   * You said I have 183 cycle open delay - but where is it? I have
>     made everything 0 ( zero!!) you can have a look at option setting
>     in line bellow!!
>      o
>         |
>         pruio_new(PRUIO_DEF_ACTIVE,0,0,0)
>         |
>
>   * And in my pruio_config, I have made averaging to 0 (you can see
>     that as well). delay 0,
>      o
>         |
>         pruio_config(io,1,PRUIO_DEF_STPMSK ,0,4)
>         |
>
> So, is my configuration is wrong or the approach?
>
>
> few queries with respect to your new example
>
>   * This is also for only 3 ADC channels, so if I extend it for 8,
>     will this one also become slow?
>   * I am going to "monitor" the inputs continuously, so I require
>     continuous stream of input, will this approach work?
>   * Its later part of my project but I saw u using system timer so
>     asking that I also want to time stamp the data with system time,
>     so can it be done here or should I do it later?
>
> Sorry if my queries sound novice but I am new to this & I am felling
> overwhelmed by the whole thing..!! :-)
>
>
> I have been reading the processor TRM and PRU reference manual and I
> petrified, its kind of ocean of information. ( it remind me of "The
> old man & the sea"!! )
>
>
> Sincerely,
>
> Rathin
>
>
> PS:
>
>
>
> On Wednesday, September 30, 2015 at 11:35:25 PM UTC+5:30, TJF wrote:
>
>     Hi Rathin!
>
>     I didn't read all the stuff in the posts of this thread. But most
>     of it seams irrelevant. Forget it.
>
>     You're using libpruio. That's the only way to reach your target
>     --> That's OK.
>
>     You cannot reach 20 kHz sampling rate due to two reasons:
>
>       * you're using default step configuration. This is 183 cycles
>         open delay and avaraging 4. That means 183 + 1 + 4 x 14 cycles
>         for each sample (@ 24 MHz) = 10 kHz per channel. Therefor
>         maximum sampling rate for 8 channels is 1.25 kHz.
>       * you're using IO mode. The ARM CPU determines the sampling
>         speed and your printf statement slows down the program
>         execution, so you don't get the previous mentioned 1.25 kHz.
>
>     In order to reach 20 kHz sampling rate you have to do
>
>      1. configure customized steps for fast sampling (ie. no open
>         delay and no avaraging)
>      2. use either MM or RB mode to get accurate timing
>
>     Either have a look at the triggers
>     
> <http://users.freebasic-portal.de/tjf/Projekte/libpruio/doc/html/_cha_examples.html#SubSecExaTriggers>
>     example (to use MM mode) or check out the following code (comming
>     from an example named rb_file for next libpruio versions)
>
>
>     |
>     /** \file rb_file.c
>     \brief Example: fetch ADC samples in a ring buffer and save to file.
>      
>     This file contains an example on how to use the ring buffer mode of
>     libpruio. A fixed step mask of AIN-0, AIN-1 and AIN-2 get configured
>     for maximum speed, sampled in to the ring buffer and from there saved
>     as raw data to some files.
>      
>     Licence: GPLv3
>      
>     Copyright 2014-2015 by Thomas{ dOt ]Freiherr[ At ]gmx[ DoT }net
>      
>     Thanks for C code translation: Nils Kohrs <nils[ dot ]kohrs{ AT
>     }gmail[ dOt ]com>
>      
>     Compile by: `gcc -Wall -o rb_file rb_file.c -lpruio -lprussdrv`
>      
>     \since 0.2.0.2
>     */
>      
>     #include"unistd.h"
>     #include"time.h"
>     #include"stdio.h"
>     #include"../c_include/pruio.h"
>      
>     //! The main function.
>     intmain(intargc,char**argv)
>     {
>       constuint32 tSamp =123401; //!< The number of samples in the
>     files (per step).
>       constuint32 tmr =5000;     //!< The sampling rate in ns (5000 ->
>     200 kHz).
>       constuint32 NoStep=3;     //!< The number of active steps (must
>     match setStep calls and mask).
>       constuint32 NoFile=2;     //!< The number of files to write.
>       constchar*NamFil="output.%u";//!< The output file names.
>       structtimespec mSec;
>       mSec.tv_nsec=1000000;
>       pruIo *io =pruio_new(PRUIO_DEF_ACTIVE,0x98,0,1);//! create new
>     driver
>       if(io->Errr){
>                    printf("constructor failed (%s)\n",io->Errr);return1;}
>      
>       do{
>         if(pruio_adc_setStep(io,9,0,0,0,0)){//          step 9, AIN-0
>             printf("step 9 configuration failed: (%s)\n",io->Errr);break;}
>         if(pruio_adc_setStep(io,10,1,0,0,0)){//         step 10, AIN-1
>            printf("step 10 configuration failed: (%s)\n",io->Errr);break;}
>         if(pruio_adc_setStep(io,11,2,0,0,0)){//         step 11, AIN-2
>            printf("step 11 configuration failed: (%s)\n",io->Errr);break;}
>      
>         uint32 mask =7<<9;        //!< The active steps (9 to 11).
>         uint32 tInd =tSamp *NoStep;//!< The maximum total index.
>         uint32 half =((io->ESize>>2)/NoStep)*NoStep;//!< The maximum
>     index of the half ring buffer.
>      
>         if(half >tInd){half =tInd;} //       adapt size for small files
>         uint32 samp =(half <<1)/NoStep;//!< The number of samples (per
>     step).
>      
>         if(pruio_config(io,samp,mask,tmr,0)){//       configure driver
>                            printf("config failed (%s)\n",io->Errr);break;}
>      
>         if(pruio_rb_start(io)){
>                          printf("rb_start failed (%s)\n",io->Errr);break;}
>      
>         uint16 *p0 =io->Adc->Value; //!< A pointer to the start of the
>     ring buffer.
>         uint16 *p1 =p0 +half;      //!< A pointer to the middle of the
>     ring buffer.
>         uint32 n; //!< File counter.
>         charfName[20];
>         for(n =0;n <NoFile;n++){
>           sprintf(fName,NamFil,n);
>           printf("Creating file %s\n",fName);
>           FILE *oFile =fopen(fName,"wb");
>           uint32 i =0;              //!< Start index.
>           while(i <tInd){
>             i +=half;
>             if(i >tInd){            // fetch the rest(no complete chunk)
>               uint32 rest =tInd +half -i;
>               uint32 iEnd =p1 >=p0 ?rest :rest +half;
>               while(io->DRam[0]<iEnd)nanosleep(&mSec,NULL);
>               printf("  writing samples %u-%u\n",tInd -rest,tInd-1);
>               fwrite(p0,sizeof(uint16),rest,oFile);
>               uint16 *swap =p0;
>               p0 =p1;
>               p1 =swap;
>             }
>             if(p1 >p0)while(io->DRam[0]<half)nanosleep(&mSec,NULL);
>             else       while(io->DRam[0]>half)nanosleep(&mSec,NULL);
>             printf("  writing samples %u-%u\n",i-half,i-1);
>             fwrite(p0,sizeof(uint16),half,oFile);
>             uint16 *swap =p0;
>             p0 =p1;
>             p1 =swap;
>           }
>           fclose(oFile);
>           printf("Finished file %s\n",fName);
>         }
>       }while(0);
>       pruio_destroy(io);
>       return0;
>     }
>     |
>     Desription
>     |
>     rb_file {#SubSecExaRbFile}
>     -------
>
>     \Item{Description}
>
>       Thisfile contains an example on how to usethe ring buffer mode of
>       libpruio.A fixedstep mask of AIN-0,AIN-1andAIN-2getconfigured
>       formaximum speed,sampled into the ring buffer andfromthere saved
>       asraw data to some files.
>
>     \Item{Preparation}
>
>       Nopreparation isrequired.Optionalyyou can customize the number of
>       samples,the sampling rate orthe number of samples inthe source
>       code andrecompile your version.
>
>     \Item{Operation}
>
>       Startthe program by`./rb_file`andyou'll see console output like
>     ~~~{.txt}
>     Creating file output.0
>       writing samples 0-65534
>       writing samples 65535-131069
>       writing samples 131070-196604
>       writing samples 196605-262139
>       writing samples 262140-327674
>       writing samples 327675-370202
>     Finished file output.0
>     Creating file output.1
>       writing samples 0-65534
>       writing samples 65535-131069
>       writing samples 131070-196604
>       writing samples 196605-262139
>       writing samples 262140-327674
>       writing samples 327675-370202
>     Finished file output.1
>     ~~~
>
>       The program created two new files in the current folder, named
>       output.0 and output.1. The files contain the raw data from the three
>       ADC channels AIN-0 to AIN-2.
>
>     \Item{Source Code}
>
>       src/examples/rb_file.bas
>
>       src/c_examples/rb_file.c
>     |
>
>
>     BR
>
> -- 
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google
> Groups "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to beagleboard+unsubscr...@googlegroups.com
> <mailto:beagleboard+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout.

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to