Forum: Mikrocontroller und Digitale Elektronik MSP430F2013 und Sigma-Delta-ADC


von Konstantin R. (kribel)


Lesenswert?

Hallo Leute!

Ich bin nun schon seit ein paar Tagen damit beschäftigt den ADC des 
MSP430F2013 zum Laufen zu bekommen.
Ich versuche an den Differenzeingängen A4+ und A4- eine Spannung 
auszulesen. Dabei bekomme ich nur "Hausnummern". Der Digitalwert läuft 
mir einfach weg, ich bekomme sogar Werte die nicht ein Mal 
näherungsweise den richtigen Wert treffen.

Hat jemand das Problem schon ein Mal gehabt?

Meine Hardware:
eZ430-F2013 Dovelopment Tool mit dem MSP430F2013 drauf.

Testaufbau:
1
                 ___________
2
                |           |
3
          ___   |           |
4
  A4+ ---|___|--|P1.1       |
5
          ___   |           |
6
  A4- ---|___|--|P1.2       |
7
                |           |
8
                |           |
9
                |___________|
10
                 MSP430F2013

Die Beiden Widerständen haben den Wert 4,7kOhm.
An die Analogeingänge wird eine Gleichspannung angelegt.
A4+ = 1,0V
A4- = 0,7V

Konfiguration des MSP430F2013:
1
  SD16CTL = BIN16(  0,0,0,0,
2
                    0,0,0,  /* SD16_A clock divider 1:1 */
3
                    0,      /* Low Power Mode disabled */
4
                    0,0,    /* SD16_A clock divider 1:1 */
5
                    1,0,    /* clock source is ACLK */
6
                    0,      /* Vmid buffer off */
7
                    1,      /* Reference Voltage is on (1.2V) */
8
                    0,      /* Overflow interrupt disabled */
9
                    0
10
                 );
11
12
  SD16CCTL0 = BIN16(  0,
13
                      0,0,  /* Buffer disabled */
14
                      0,    /* Bipolar mode */
15
                      1,    /* Extended oversamplig ratio is enabled */
16
                      1,    /* Single conversion mode */
17
                      0,1,  /* Oversampling ratio = 1024 */
18
                      0,    /* does not toggle with eacht SD16MEMO read */
19
                      1,    /* MSB / LSB selection bit */
20
                      0,    /* No overflow interrupt pending */
21
                      1,    /* 2's complement */
22
                      0,    /* interrupt disable */
23
                      0,    /* no interrupt pending */
24
                      0,    /* no conversion starts */
25
                      0
26
                    );
27
  
28
  SD16INCTL0 = BIN8(  1,1,  /* Fourth sample couses interrupt */
29
                      0,0,0, /* preamplifier gain = 1 */
30
                      1,0,0 /* A4 channel differential pair input */
31
                   );
32
  
33
  SD16AE = BIN8(  1,  /* AE7 */
34
                  1,  /* AE6 */
35
                  1,  /* AE5 */
36
                  1,  /* AE4 */
37
                  1,  /* AE3 */
38
                  1,  /* AE2 */
39
                  1,  /* AE1 */
40
                  1   /* AE0 */
41
               );
Wobei ACLK = 12kHz ist.

Übersehe ich etwas, oder ist der ADC für Wandlungen von Gleichspannungen 
ungeignet?

Ich bin euch für jede Antwort dankbar.

Gruß
Konstantin

von Peter X. (vielfrass)


Lesenswert?

Schätze mal du hast die Taktfrequenz nicht richtig eingestellt.
Schau dir mal mein Programm hier an, vieleicht kann es dir etwas helfen.
1
;*******************************************************************************
2
;   MSP430x1xx Demo - Software Toggle P1.0
3
;
4
;   Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
5
;   ACLK = n/a, MCLK = SMCLK = default DCO
6
;
7
;                 MSP430x2xx
8
;              -----------------
9
;          /|\|              XIN|-
10
;           | |                 |
11
;           --|RST          XOUT|-
12
;             |                 |
13
;             |             P1.0|-->LED
14
;
15
;   A. Dannenberg
16
;   Texas Instruments, Inc
17
;   January 2006
18
;   Built with IAR Embedded Workbench Version: 3.40A
19
;*******************************************************************************
20
#include "msp430.h"
21
;-------------------------------------------------------------------------------
22
            ORG     0FC00h                  ; Progam Start (1K Flash device)
23
;-------------------------------------------------------------------------------
24
RESET       mov.w   #0280h,SP               ; Set stackpointer (128B RAM device)
25
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
26
SetupP1     bis.b   #001h,&P1DIR            ; Set P1.0 to output direction
27
            bis.b   #020h,&P1DIR            ; Set P1.5 to output direction
28
29
30
            BIS.B   # DCO2 + DCO1 + DCO0 , &DCOCTL       ;
31
            BIS.B   # RSEL3 + RSEL2 + RSEL1 + RSEL0 , &BCSCTL1   ;
32
            mov     #004C1h,R12
33
            mov     #01DB7h,R13
34
            mov     #0,R14
35
            mov     #1,R15
36
kein_xor
37
            nop
38
            nop
39
            nop
40
            nop
41
Mainloop
42
            mov.b   R15,&P1OUT
43
            rla     R15
44
            rlc     R14
45
            jnc     kein_xor
46
            xor     R12,R14
47
            xor     R13,R15
48
            jmp     Mainloop
49
            
50
            bis.b   #001h,&P1OUT            ; Set P1.0
51
            mov.w   #005000,R15             ; Delay to R15
52
L1          dec.w   R15                     ; Decrement R15
53
            jnz     L1                      ; Delay over?
54
55
            bic.b   #001h,&P1OUT            ; Clr P1.0
56
            clr.w   R15                     ; Delay to R15
57
L2          dec.w   R15                     ; Decrement R15
58
            nop
59
            jnz     L2                      ; Delay over?
60
61
            jmp     Mainloop                ; Again
62
                                            ;
63
;-------------------------------------------------------------------------------
64
;           Interrupt Vectors
65
;-------------------------------------------------------------------------------
66
            ORG     0FFFEh                  ; MSP430 RESET Vector
67
            DW      RESET                   ;
68
            END
Das Programm ist ein Pseudozufallszahlen-Generator.
Ich habe eines der Beispielprogramme ein bisschen umgebaut.
Leider habe ich keine Kommentare eingefügt.
Die Taktfrequenzeinstellung geht mit DCOCTL und BCSCTL1

von Konstantin R. (kribel)


Lesenswert?

Hallo Peter!

Die Taktquelle des SD16 ist ACLK = 12kHz, wobei die CPU selbst mit 1MHz 
vom DCO versorgt wird. Mit dieser Clockeinstellung habe ich schon meine 
Timer UART ohne externen Oszillator realisiert, daher denke ich dass es 
so stimmt.

Gruß
Konstantin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.