Forum: Mikrocontroller und Digitale Elektronik ADC - Verständnisfragen


von Lens (Gast)


Lesenswert?

Hi,

Ich werd hier heute ein Paar Verständnisfragen zum ADC stellen, wenn ich 
nicht mehr weiter weiß. Ich danke schon Mal für eure Geduld
(Ich hab einen miniModul-515C und mvision4 als IDE.)

1. Frage. Sei ADCL=0 und folgende Funktion gegeben:
1
void adc_starten(void) {
2
 "Starten des ADC"
3
 _nop_();
4
 _nop_();
5
 _nop_();
6
 _nop_();
7
 _nop_();
8
 _nop_();
9
 _nop_();
10
 _nop_();
11
 "Auslesen des Ergebnisses"
12
}

Was passiert nun, wenn z. B. in "adc_starten()" erst beim dritten 
_nop_() bin und genau zu dem Zeitpunkt eine neuer Konvertierungswunsch 
gestartet wird (durch schreiben in ADDATL). Dann wird ja beim nächsten 
Maschinenzyklus eine neue Konvertierung gestartet. Was passiert aber nun 
mit "adc_starten()", der von all dem nichts weiß. Es macht einfach 
weiter und liest am Ende einen falschen Wert aus oder wie?

von cbf (Gast)


Lesenswert?

üblicherweise wird das flag zur erfolgtenkonvertierung abgefragt statt 
darauf zu vertrauen, dass die konvertierung innerhalb der durch die nops 
festgelegten zeit abgeschlossen sein wird. wird der adc im single shot 
betrieben? bedenke ferner, dass bei atmels (ich gehe davon aus, dass du 
einen solchen einsetzt) die erste konvertierung mehr prozessortakte 
benötigt als folgende. welchen uC setzt du überhaupt ein ?

von Lens (Gast)


Lesenswert?

Ich hab den Infineon-C515C. Es handelt sich um eine "kontinuierliche 
Konvertierung", keine single-conversion.
--> Ja ich kanns auch auf andere Art und Weise machen. Aber es ist halt 
ne Verständnisfrage, was passiert. Außerdem ist die oben genannte 
Methode die schnellste von allen.

Was passiert denn, wenn das oben geschilderte eintritt?

von Wolfgang (Gast)


Lesenswert?

Lens schrieb:
> Was passiert nun, wenn z. B. in "adc_starten()" erst beim dritten
> _nop_() bin und genau zu dem Zeitpunkt eine neuer Konvertierungswunsch
> gestartet wird (durch schreiben in ADDATL).

Wodurch soll den nun eine Konvertierung gestartet werden?
 - durch adc_starten()
 - durch (wildes?) Schreiben in ADDATL oder
 - durch "kontinuierliche Konvertierung", d.h. automatisch

Du mußt dich schon einigen.

Und was ist an einer Reihe von "nop" besser, als eine Abfrage des Flags 
zur erfolgtenkonvertierung? Die Zeit wird in jedem Fall verdaddelt und 
die Flagabfrage ist sicherer.

von cbf (Gast)


Lesenswert?

Lens schrieb:
> Was passiert nun, wenn z. B. in "adc_starten()" erst beim dritten
> _nop_() bin und genau zu dem Zeitpunkt eine neuer Konvertierungswunsch
> gestartet wird (durch schreiben in ADDATL).

nach dem dritten nop kommt in deiner routine das vierte nop. dein 
nächster konvertierwunsch kann erst nach erreichen des endes der routine 
erfolgen. oder ist der rest vom programm interrupt gesteuert? warum 
sollte im kontinuierlichen betrieb eine neue konvertierung durch oben 
genannten aufruf erneut gestartet werden?

meinem verständnis nach tritt der von dir vermutete zustand erst mal 
nicht ein. am ende einer routine werden die inhalte der 
konverterregister ja zurückgegeben. dort steht dann das ergebnis irgend 
eines konvertiervorgang drin. durch die verzögerung mit den nops ist 
aber nichtdeterministisch, die wievielte wandlung (kontinuierlicher 
betrieb) das ergebnis geliefert hat.

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.