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
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
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.
|