www.mikrocontroller.net

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


Autor: Konstantin R. (kribel)
Datum:

Bewertung
0 lesenswert
nicht 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:
                 ___________
                |           |
          ___   |           |
  A4+ ---|___|--|P1.1       |
          ___   |           |
  A4- ---|___|--|P1.2       |
                |           |
                |           |
                |___________|
                 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:
  SD16CTL = BIN16(  0,0,0,0,
                    0,0,0,  /* SD16_A clock divider 1:1 */
                    0,      /* Low Power Mode disabled */
                    0,0,    /* SD16_A clock divider 1:1 */
                    1,0,    /* clock source is ACLK */
                    0,      /* Vmid buffer off */
                    1,      /* Reference Voltage is on (1.2V) */
                    0,      /* Overflow interrupt disabled */
                    0
                 );

  SD16CCTL0 = BIN16(  0,
                      0,0,  /* Buffer disabled */
                      0,    /* Bipolar mode */
                      1,    /* Extended oversamplig ratio is enabled */
                      1,    /* Single conversion mode */
                      0,1,  /* Oversampling ratio = 1024 */
                      0,    /* does not toggle with eacht SD16MEMO read */
                      1,    /* MSB / LSB selection bit */
                      0,    /* No overflow interrupt pending */
                      1,    /* 2's complement */
                      0,    /* interrupt disable */
                      0,    /* no interrupt pending */
                      0,    /* no conversion starts */
                      0
                    );
  
  SD16INCTL0 = BIN8(  1,1,  /* Fourth sample couses interrupt */
                      0,0,0, /* preamplifier gain = 1 */
                      1,0,0 /* A4 channel differential pair input */
                   );
  
  SD16AE = BIN8(  1,  /* AE7 */
                  1,  /* AE6 */
                  1,  /* AE5 */
                  1,  /* AE4 */
                  1,  /* AE3 */
                  1,  /* AE2 */
                  1,  /* AE1 */
                  1   /* AE0 */
               );
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

Autor: Peter X. (vielfrass)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schätze mal du hast die Taktfrequenz nicht richtig eingestellt.
Schau dir mal mein Programm hier an, vieleicht kann es dir etwas helfen.
;*******************************************************************************
;   MSP430x1xx Demo - Software Toggle P1.0
;
;   Description; Toggle P1.0 by xor'ing P1.0 inside of a software loop.
;   ACLK = n/a, MCLK = SMCLK = default DCO
;
;                 MSP430x2xx
;              -----------------
;          /|\|              XIN|-
;           | |                 |
;           --|RST          XOUT|-
;             |                 |
;             |             P1.0|-->LED
;
;   A. Dannenberg
;   Texas Instruments, Inc
;   January 2006
;   Built with IAR Embedded Workbench Version: 3.40A
;*******************************************************************************
#include "msp430.h"
;-------------------------------------------------------------------------------
            ORG     0FC00h                  ; Progam Start (1K Flash device)
;-------------------------------------------------------------------------------
RESET       mov.w   #0280h,SP               ; Set stackpointer (128B RAM device)
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
SetupP1     bis.b   #001h,&P1DIR            ; Set P1.0 to output direction
            bis.b   #020h,&P1DIR            ; Set P1.5 to output direction


            BIS.B   # DCO2 + DCO1 + DCO0 , &DCOCTL       ;
            BIS.B   # RSEL3 + RSEL2 + RSEL1 + RSEL0 , &BCSCTL1   ;
            mov     #004C1h,R12
            mov     #01DB7h,R13
            mov     #0,R14
            mov     #1,R15
kein_xor
            nop
            nop
            nop
            nop
Mainloop
            mov.b   R15,&P1OUT
            rla     R15
            rlc     R14
            jnc     kein_xor
            xor     R12,R14
            xor     R13,R15
            jmp     Mainloop
            
            bis.b   #001h,&P1OUT            ; Set P1.0
            mov.w   #005000,R15             ; Delay to R15
L1          dec.w   R15                     ; Decrement R15
            jnz     L1                      ; Delay over?

            bic.b   #001h,&P1OUT            ; Clr P1.0
            clr.w   R15                     ; Delay to R15
L2          dec.w   R15                     ; Decrement R15
            nop
            jnz     L2                      ; Delay over?

            jmp     Mainloop                ; Again
                                            ;
;-------------------------------------------------------------------------------
;           Interrupt Vectors
;-------------------------------------------------------------------------------
            ORG     0FFFEh                  ; MSP430 RESET Vector
            DW      RESET                   ;
            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

Autor: Konstantin R. (kribel)
Datum:

Bewertung
0 lesenswert
nicht 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

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.