dsPIC33, ADC, Rauschen

Gast #2196530
Hallo,

ich habe ein Problem beim Auslesen des ADCs vom dsPIC33FJ32GP202. Wenn 
ich die externen VREF+/- Eingänge nutze und den Eingang des ADCs auf GND 
setze, dann werden zyklisch folgende Werte ausgelesen:

0    0    0    12    0    0    0    12    0    0    0    12    ...

Bei jedem 4. Wert gibt es also einen Sprung auf 12. Dies entspricht bei 
einer Auflösung von 10 bit und einer Ref-Spannung von 3,3 V einen Sprung 
von 39 mV.

Wenn ich die VREF+/- Eingänge nicht nutze, kommt es zwar beim setzen des 
ADCs auf GND nicht zu diesem Problem, ich habe aber das Gefühl, dass 
andere Werte zu sprunghaft sind.

Mach ich irgendetwas in der Software falsch (Quelltextauszug weiter 
unten, vollständig im Anhang)?
Oder kann es ein Problem an meiner Schaltung sein? Versorgt mit Strom 
wird der Chip vom Pickit 3. AVdd und AVss sind angeschlossen. 10nF 
liegen zwischen Vdd und Vss. 10µF sind an Vcap angeschlossen. Taktgeber 
ist ein 16MHz-Quarz. VRef+/- und ADC sind an POTIs angeschlossen.
Oder sind Sprünge von 39 mV bei diesem Chip normal?

Vielen Dank für Hilfe!




  AD1PCFGLbits.PCFG0 = 0;

  AD1CON1 = 0x0000; // SAMP bit = 0 ends sampling ...
  AD1CHS0 = 0x0000; // Connect RB2/AN2 as CH0 input ..
  AD1CHS0bits.CH0SA = 0b00101;  //select AN5 for CH0 +ve input

  // in this example RB2/AN2 is the input
  AD1CSSL = 0;
  AD1CON3 = 0x0000; // Manual Sample, Tad = internal 2 Tcy
  AD1CON2 = 0;
  AD1CON2bits.VCFG = 0b011;    // use external VREF+/- 011
  AD1CON1bits.ADON = 1; // turn ADC ON
  TRISB = 0b01111;  // RB4 is output

  while (1) // repeat continuously
  {
    AD1CON1bits.SAMP = 1;
    // wait 0.5 µs
    LATBbits.LATB4 = 1;
    Nop();
    Nop();
    Nop();
    LATBbits.LATB4 = 0;
    AD1CON1bits.SAMP = 0; // start Converting
    while (!AD1CON1bits.DONE);// conversion done?
    tmp = ADC1BUF0; // yes then get ADC value
    buffer[i] = tmp;

    for (i = 0; i < 240; i++)
    {
      for (j = 0; j < 1000; j++)
        Nop();
      for (j = 0; j < 1000; j++)
        Nop();
      for (j = 0; j < 1000; j++)
        Nop();
      for (j = 0; j < 1000; j++)
        Nop();
    }

    SendString(itoa(numbuf, tmp, 10));
    SendString("\r\n");
  } // repeat
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.