ADC Problem mit dsPIC30F40

Gast #2888001
Lesenswert?
• ▲
▼
N' Abend,

ich bekomme den ADC meines dsPIC30F4011 einfach nicht zum laufen. Habe 
bereits zweimal das gesamte Datenblatt des ADCs gelesen und hab langsam 
das Gefühl, dass ich ein Brett vor dem Kopf habe.

Mein Ziel ist folgendes:

- 1 Kanal ADC Wandlung
- ADC Eingang: AN8(PB8)
- Manuelles Starten des Samplevorgangs
- Automatisches Beenden des Samplevorgangs und Starten der AD Wandlung
- Tad von Tcy abgeleitet(Tad=Tcy*32)
- Interrupt nach 16 Sample/Wandlungs Sequenzen

Ich nutze den CCS Compiler.


Meine Vermutung ist, dass irgendwas in der Konfiguration schief läuft, 
sprich falsch ist. Aber ich habe es mitlerweile fünf mal überprüft und 
finde den Fehler einfach nicht. Es löst nichtmal der Interrupt aus und 
wenn ich das ganze ohne Interrupt versuche spuckt der ADC ununterbrochen 
den Wert 0 aus. Es liegt aber eine Spannung von ca. 2,5V an.

Hier mal die entscheidenen Ausschnitte aus dem Quellcode
1
//...
2

3
//==================================================================
4
// ISR ADC
5

6
#INT_ADC1 LEVEL=1
7
void isr_adc(void)
8
{  
9
  new_data_available = TRUE;
10
  ADIF=0;  // clear interrupt flag
11
}
12

13
//...
14

15
//==================================================================
16
// ADC configuration (Teil der init() )
17
  
18
  ADCON1 = 0x00E0;  // auto sample
19
  ADCON2 = 0x003C;  // 16 samp./conv. sequences per interrupt
20
  ADCON3 = 0x023F;  // AD conv. clk = 32*Tcy
21
            // AD conv. clk source is derivated from system clk, auto sample time = 2 TAD, 
22

23
  ADCHS = 0x0008;    // AN8 = channel 0 pos. input,  channel 0 neg. input = Vref-
24
  ADPCFG = 0xFEFF;  // configure analog input pin as analog input
25

26
  ADIF =0;  // clear ADC interrupt flag
27
  ADIE =1;  // enable ADC iterrupts
28
  ADON =1;  // enable ADC unit
29

30
//...
31

32
//==================================================================
33
// Wert auslesen (Teil der main() )
34

35
//...
36

37
SAMP =1; // start samp./conv. sequence
38

39
//...
40

41

42
  if(new_data_available)  
43
      {
44
        ADCBUF_ptr =&ADCBUF0; // initiate pointer
45
        ADC_res =0;    
46
        for(i=0; i<16;i++) ADC_res += *ADCBUF_ptr++;  // read conv. result from ADC Buffers  
47
        ADC_res =ADC_res >> 4 ;  // mean
48
        ADC_conversion_done =FALSE;  // clear flag
49
        SAMP = 1;    // start new samp./conv. sequence
50
      }

Vielleicht hat einer von Euch die Muße mal darüber zu schauen oder 
Erfahrung mit der Programmierung des ADCs vom dsPIC30.

Über Anregungen und Hifestellungen würde ich mich sehr freuen!

Viele Grüße und einen schönen Abend noch

Stefan
Gast #2888017
Lesenswert?
• ▲
▼
In der unteren if Struktur muss es heißen:

Stefan schrieb:
> if(new_data_available)
>       {
>         ADCBUF_ptr =&ADCBUF0; // initiate pointer
>         ADC_res =0;
>         for(i=0; i<16;i++) ADC_res += *ADCBUF_ptr++;  // read conv. result from 
ADC Buffers
>         ADC_res =ADC_res >> 4 ;  // mean

>         new_data_available =FALSE;  // <== nicht "ADC_conversion_done"

>         SAMP = 1;    // start new samp./conv. sequence
>       }

War aber nicht der Fehler.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.