www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik dsPIC30F3014 ADC


Autor: Heiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte gerne ein Array mit 128 Werten gewandelten Werten füllen, sie 
sollten mit 16kHz gesampelt werden. Leider habe ich keine Möglichkeit 
zum debuggen deshalb kann ich den Code auch nicht so ohne weiteres 
testen. Aber vieleicht hat jemand von euch schon einmal etwas ähnliches 
gemacht und kann mir seinen code zur Verfügung stellen, also ich möchte 
ein Signal mit 16kHz abtasten und das mit jewals 128 Werten die ich in 
einem Array speichern möchte!!!!
Folgender Ausgangscode wird verwendet, funst aber irgendwie noch nicht 
so richtig^^.
void ADC_Init(char mode)
{
        //ADCON1 Register
        //Set up A/D for Automatic Sampling
        //Use Timer3 to provide sampling time
        //Set up A/D conversrion results to be read in 1.15 fractional
        //number format.
        //All other bits to their default state
        ADCON1bits.FORM = 3;
        ADCON1bits.SSRC = 2;
        ADCON1bits.ASAM = 1;

        //ADCON2 Register
         ADCON2bits.VCFG = 3;         //External Vref+, External Vref-
     ADCON2bits.SMPI = 0;      //Set up A/D for interrupting after 1 samples get filled in the buffer  

        //ADCON3 Register
        //We would like to set up a sampling rate of 7998.6981Hz or 87252.071 Hz
        //Total Conversion Time= 1/Sampling Rate = 125.02 microseconds or 11.461 microseconds
        //For fosc=117.968MHz, Tcy = 33.91 ns = Instruction Cycle Time
        //We will set up Sampling Time using Timer3 & Tad using ADCS<5:0> bits
        //All other bits to their default state
        //Let's set up ADCS arbitrarily to 38
        //So Tad = Tcy*(ADCS+1)/2 = 661.2 nanoseconds
        //So, the A/D converter will take 14*Tad periods to convert each sample
        ADCON3bits.ADCS = 63;

        //Next, we will to set up Timer 3 to time-out every X=125.02 microseconds (for mode 1) or X=11.461 microseconds (for mode 2)
        //As a result, the module will stop sampling and trigger a conversion
        //on every Timer3 time-out, i.e., 125.02 microseconds or 11.461 microseconds. At that time,
        //the conversion process starts and completes 14*Tad periods later.
        TMR3 = 0x0000;      
    IFS0bits.T3IF = 0;
        IEC0bits.T3IE = 0;
    T3CONbits.TCS = 0;
    T3CONbits.TCKPS=0;

        //ADCHS Register
        //Set up A/D Channel Select Register to convert AN0
    ADCHS = 0x0000;


      //ADCSSL Register
        //Channel Scanning is disabled. All bits left to their default state
        ADCSSL = 0x0000;

        //ADPCFG Register
        //Set up channels AN0 as analog input and configure rest as digital
        //Recall that we configured all A/D pins as digital when code execution
        //entered main() out of reset
        ADPCFG = 0xFFFF;
        ADPCFGbits.PCFG0 = 0;

        //Clear the A/D interrupt flag bit
        IFS0bits.ADIF = 0;

        //Set the A/D interrupt enable bit
        IEC0bits.ADIE = 1;

        //Turn on the A/D converter
        //This is typically done after configuring other registers
        ADCON1bits.ADON = 1;

        //Start Timer 3
        T3CONbits.TON = 1;
}

//_ADCInterrupt() is the A/D interrupt service routine (ISR).
//The routine must have global scope in order to be an ISR.
//The ISR name is chosen from the device linker script.
void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
        //Clear the Timer3 Interrupt Flag
        IFS0bits.T3IF = 0;

        int i = 0;

        //Clear the A/D Interrupt flag bit or else the CPU will
        //keep vectoring back to the ISR
        IFS0bits.ADIF = 0;
        
        //Put the A/D conversion results to inputSignal.real
        adcPtr = &ADCBUF0 ;
        
    for (i=0;i<1;i++)
          {
               (*p_inputSignal++).real = *adcPtr++;         
      }
        
    if (p_inputSignal > &inputSignal[NUMSAMP-1])
      {
       SamplesReadyFlag++ ;   // Sampling completed
         IEC0bits.ADIE = 0;    // Disable ADC interrupt
      }

Autor: Heiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm

Autor: hhmmm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So das Problem hat sich erledigt!!!!!!!!!!!!!!!!!!!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.