Forum: Mikrocontroller und Digitale Elektronik richtiges Einstellen der timing-Register vom AVR32


von brechbunkt (Gast)


Lesenswert?

Hallo,

ich möchte den ADC vom Atmel AT32UC3A0512 verwenden. Meine Fragen 
beziehen sich auf die Einstellungen für die ADC-Timings, welche im "Mode 
Register" eingestellt werden müssen.

Im entsprechendem Kapitel vom Datenblatt 
(http://www.atmel.com/images/doc32058.pdf) steht folgendes:
1
ADC Timings:
2
Each ADC has its own minimal Startup Time that is programmed through the field STARTUP in
3
the Mode Register MR.
4
In the same way, a minimal Sample and Hold Time is necessary for the ADC to guarantee the
5
best converted final value between two channels selection. This time has to be programmed
6
through the bitfield SHTIM in the Mode Register MR.
7
8
Warning: No input buffer amplifier to isolate the source is included in the ADC. This must be
9
taken into consideration to program a precise value in the SHTIM field. See the section, ADC
10
Characteristics in the product datasheet.

Nun zu meinen zwei Fragen:
- Habe ich das richtig verstanden, dass das Register "STARTUP" 
ausschließlich zur Verwendung kommt, wenn die CPU vom sleep-mode 
aufwacht? Verwende ich keinen sleep, könnte ich dieses Register 
unberücksichtigt lassen?

- Ist das Register "SHTIM" nur wichtig, wenn man mehrere Channels 
verwenden möchte? (ansonsten wäre es egal was da drin steht?)
Falls dieses Register auch bei nur einem channel verwendet werden muss:
Bezieht sich dann das "SHTIM" (= Sample & Hold Time) auf die "Track and 
Hold Acquisition Time" in der Tabelle "ADC Characteristics"?

Danke schon mal für eure Hilfe.

von Henry P. (henrylexx)


Lesenswert?

Hey ich habe zu den ADC keine Ahnung,aber vielleicht trotzdem ein rat 
auch wenn es recht zeitaufwendig ist, versuch mal die  ADC Example 
EVK1100 - AT32UC3A... genau aus einander zu nehmen...   vielleicht wird 
dann deine Frage beantwortet...

P.S. tut mir leid für die sonst wenig hilfreicht Antwort

von brechbunkt (Gast)


Lesenswert?

Danke sehr für deine Hilfe.
Dieses Example habe ich mir allerdings schon angesehen. Dort wird dieses 
Register leider überhaupt nicht angesprochen/geändert.

Allerdings haben die dort eine Zählschleife zwischen den einzelnen 
Messungen eingefügt. Kann also durchaus sein, dass eine Wartezeit nicht 
explizit angegeben werden muss, da die Schleife schon lange genug 
wartet.

von Henry P. (henrylexx)


Lesenswert?

Hey... also ich hab immer noch keine Ahnung von den ADC... aber hab 
trotzdem mal geschaut... und bin deiner letzten Aussagen nach gegangen:

in der main von dem adc_example [AVR32-EVK1100] steht in der zeile 193
1
adc_configure(adc)

wenn du in der adc.c schaust, steht da
1
void adc_configure(volatile avr32_adc_t * adc)
2
{
3
  Assert( adc!=NULL );
4
5
#ifdef USE_ADC_8_BITS
6
  adc->mr |= 1<<AVR32_ADC_LOWRES_OFFSET;
7
#endif
8
  // set Sample/Hold time to max so that the ADC capacitor should be loaded entirely
9
  adc->mr |= 0xF << AVR32_ADC_SHTIM_OFFSET;
10
  // set Startup to max so that the ADC capacitor should be loaded entirely
11
  adc->mr |= 0x1F << AVR32_ADC_STARTUP_OFFSET;
12
}

hier wird wohl anscheinen über den Aufruf von adc_configure deine 
besagten Register beschrieben.
Ich glaube die Schlaufe muss sein, sonst würde er ja nur eine Messung 
durch führen, und diese wird dann im abstand von 1s durchgeführt...

Leider kann ich dir keine Garantie für meine Aussagen geben da ich 
selbst UC newbe bin und erst seit knapp 4 Wochen mit nem AVR32 UC3C 
Board arbeite... hier gibts zum Beispiel gar kein Mode Register, hier 
heißt es Configure Register (CFG)
=)

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.