µC DAC: 500mV Offset trotz Registerwert = 0?

OP Persönliche Seite #4069669
Lesenswert?
• ▲
▼
Ich verwende den internen 12bit DAC des atsam4s zum einstellen von 
konstanten leveln (also einmal wert ins register schreiben und DAC 
refreshen bis zum nächsten wert) und will eigentlich gerne die ganze 
Breite von 0 bis VDD als output nutzen können, versorgt wird der µC mit 
3V.

Leider ist der maximale Wert, den ich für 0xFFF bekomme 2,56V und der 
minimale für 0x000 ca. 0,510V. Dazwischen lässt sich 12bit-stufig alles 
einstellen.

Ich verstehe nun nicht, wo die 500mV abstände zum unteren/oberen pegel 
herkommen! Wenn der µC resettet wird, sehe ich am oszi am DAC pin kurz 
logische 3V, es liegt also nciht daran, dass irgendwo eine Last alles 
herunterzieht (was ja auch nur die obere grenze erklären würde).

Initialisiert und verwendet habe ich den DAC unter einbindung des dacc 
ASF moduls wie folgt:
1
/******************************************************
2
*    DAC Defs
3
*/
4
/** Analog control value (Bias current)*/
5
#define DACC_ANALOG_CONTROL (DACC_ACR_IBCTLCH0(0x02) \
6
| DACC_ACR_IBCTLCH1(0x02) \
7
| DACC_ACR_IBCTLDACCORE(0x01))
8
//! DAC channel used
9
#define DACC_CHANNEL        0 // (PB13)
10
//! DAC register base 
11
#define DACC_BASE           DACC
12
//! DAC ID 
13
#define DACC_ID             ID_DACC
14
/********************************************************/
15

16
void dac_init(){
17
  
18
  /* Enable clock for DACC */
19
  sysclk_enable_peripheral_clock(DACC_ID);
20
  
21
  /* Reset DACC registers */
22
  dacc_reset(DACC_BASE);
23

24
  /* Half word transfer mode */
25
  dacc_set_transfer_mode(DACC_BASE, 0);
26
  
27
  /* Power save:
28
   * sleep mode  - 0 (disabled)
29
   * fast wakeup - 0 (disabled)
30
   */
31
  dacc_set_power_save(DACC_BASE, 0, 0);
32
  
33
  /* Timing:
34
   * refresh        - 0x08 (1024*8 dacc clocks)
35
   * max speed mode -    0 (disabled)
36
   * startup time   - 0x10 (1024 dacc clocks)
37
   */
38
  dacc_set_timing(DACC_BASE, 0x08, 0, 0x10);
39
  
40
  /* Disable TAG and select output channel DACC_CHANNEL */
41
  dacc_set_channel_selection(DACC_BASE, DACC_CHANNEL);
42

43
  /* Disable Trigger -Free run mode */
44
  dacc_disable_trigger(DACC_BASE);
45
  
46
  /* Set up analog control */
47
  dacc_set_analog_control(DACC_BASE, DACC_ANALOG_CONTROL);
48
  
49
  /* Enable output channel DACC_CHANNEL */
50
  dacc_enable_channel(DACC_BASE, DACC_CHANNEL);
51
}

Kennt jemand das oben beschriebene Problem und hat ähnliches erlebt - 
und weiß woran es liegt? Ich habe im Datenblatt weder offset 
konfiguration noch eine Begrenzung des ausgangslevels finden (in den 
electrical characteristics) können..
OP Persönliche Seite #4072679
Lesenswert?
• ▲
▼
Jim Meba schrieb:
> Wie wurde gemessen? Kann es sein, dass der verwenete Masse Punkt auf 0.5
> Volt Potential liegt, z.B. weil Strom durch eine Sicherung oder Diode
> fliesst?

Nein, gegen DGND systemmasse, also 0V. Andernfalls hätte ich auch bei 
dem DACmax Wert 3.5V messen müssen. Ist irgendeine 
konfigurationsgeschichte, anders kann ich mir das nicht vorstellen...
Gast #5106443
Lesenswert?
• ▲
▼
Hallo,
auch wenn die ursprüngliche Frage bereits viele Monate her ist: Ich bin 
über das selbe Problem gestoßen, habe die Antwort jedoch im Datenblatt 
gefunden.

Der Spannungsbereich des SAM4S DAC ist begrenzt von
 bis
.

Bei einer Referenzspannung von ~3.1V erklärt dies deinen 
Spannungsbereich von ~0.5V - ~2.5V.

Grüße
--

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren