Forum: Mikrocontroller und Digitale Elektronik ADCwert auf AVRStudio anzeigen


von same (Gast)


Angehängte Dateien:

Lesenswert?

Guten Morgen Experten,
kann jemand mir bitte schreiben, wo der ADCwert auf AVRstudio angezeigt
wird.
ich glaube es unter  View ==>Watch  Value. ist das rechtig??
vielen Dank

: Verschoben durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

ADC = 0x3EB

von wesam a. (fm86)


Lesenswert?

Jörg Wunsch schrieb:
> ADC = 0x3EB

vielen dank

ich habe so gefragt, weil die Value von ergebnis sich in for schleife 
ändert und dachte ich die ganze zeit, dass der mittelwert des ADCwerts 
steht in WATCH==> value.
  for(i=0;i<5;i++)
  {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ){
  ;}   // auf Abschluss der Konvertierung warten
    ergebnis += ADCW;        // oder ergebnis+= ADCL,ADCH; ADCL,ADCH 
oder  durch ADCW ersetzen adc word Wandlungsergebnisse aufaddieren
  }
 ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)

  ergebnis /= 5;                     // Summe durch 5 teilen = 
arithm.Mittelwert

  return ergebnis;
}

also mit diesenm wert ADC = 0x3EB kann ich meine spannung rechnen : V= 
ADC/1024*1,1v ? und nicht mit dem wert, der im Value steht oder??
vielen dank

von Karl H. (kbuchegg)


Lesenswert?

Wovon redest du eigentlich?

Dieser Programmteil bestimmt den Mittelwert von 5 ADC Messungen.

(ICh geh davon aus, dass es sich dabei um eine Funktion handelt).
Die Funktion liefert diesen Wert an den aufrufenden Code und was auch 
immer dieser Code mit dem Wert machen will, kann er damit machen.

Wie dein AVR-Studio in der Simulation den aktuellen ADC Wert anzeigt, 
ist davon völlig getrennt und hat damit nichts zu tun.

von wesam a. (fm86)


Lesenswert?

Karl Heinz Buchegger schrieb:

danke Buchegger
> Wovon redest du eigentlich?
wenn ich deine frage rechtig verstanden habe, dann rede ich spannung, 
die mein Poti liefert. ich probiere die zu digitalisieren durch ADC 
einer Tiny 24.
> Dieser Programmteil bestimmt den Mittelwert von 5 ADC Messungen.
ja rechtig.
ich möchte es verstehen, warum der wert der Spannung im View==>Watch==> 
value in der for schleife ändert.

> Wie dein AVR-Studio in der Simulation den aktuellen ADC Wert anzeigt,
> ist davon völlig getrennt und hat damit nichts zu tun.
also ist der endgültige ADCwert  im ADC DATA regester geschpeicher als 
Hex??
und dies wert kann ich ihn in meinem Berechnung einsetzen
oder das ist nur quatch??

vielen Dank

von Helfer (Gast)


Lesenswert?

1
  uint16_t ergebnis = 0;
2
  ...
3
  for(i=0;i<5;i++) {
4
    ADCSRA |= (1<<ADSC);
5
    while ( ADCSRA & (1<<ADSC) ){ }
6
    ergebnis += ADCW; // #1
7
  }
8
  ADCSRA &= ~(1<<ADEN);
9
  ergebnis /= 5; // #2
10
  return ergebnis;
11
}

ergebnis im Watch-Fenster
ADCW im I/O View Fesnster (ADC Data Register Bytes)

Vor der Schleife
ergebnis
========
0

Schleife mit #1
(Vereinfacht mit konstantem ADCW)
i ADCW  ergebnis
================
0 0x3EB 0x03EB
1 0x3EB 0x07D6
2 0x3EB 0x0BC1
3 0x3EB 0x0FAC
4 0x3EB 0x1397

Mittelwertberechnung #2
ergebnis
========
0x1397 / 5 = 0x03EB

von Karl H. (kbuchegg)


Lesenswert?

wesam aymen schrieb:

> ich möchte es verstehen, warum der wert der Spannung im View==>Watch==>
> value in der for schleife ändert.

Weil 5 Messungen gemacht werden und die Ergebnisse dieser Messungen 
aufsummiert werden. Logisch, dass sich dann der Summenwert ändert.
Aber: Nach der Schleife wird ja dann wieder durch 5 dividiert.


> also ist der endgültige ADCwert  im ADC DATA regester geschpeicher als
> Hex??

Vergiss, das das Hex ist. Es ist eine Zahl. Hex ist nur eine bestimmte 
Schreibweise, wie man Zahlen schreiben kann. Genausogut hätte AVR-Studio 
diesen Wert auch dezimal hinschreiben können.

> und dies wert kann ich ihn in meinem Berechnung einsetzen
> oder das ist nur quatch??

Ich hab dich immer noch nicht.
Was willst du mit dem Wert? Händisch kontrollieren, ob sich dein µC 
verrechnet hat?

von wesam a. (fm86)


Lesenswert?

hallo,
ich habe es so gemacht ich habe den Hex Wert, der in ADC Data regester 
bytes genommen und in den ADC Forml ( V=ADCwert/1024*1,1v) eingesetzt 
die Berechnete V ist klein bissschen nicht das gleiche wie der 
Eingangwert

von wesam a. (fm86)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Ich hab dich immer noch nicht.
> Was willst du mit dem Wert? Händisch kontrollieren, ob sich dein µC
> verrechnet hat?

jaaaaaaaaaaaaaaaaaaa genau du hast mich verstanden

von wesam a. (fm86)


Lesenswert?

Karl Heinz Buchegger schrieb:
> wesam aymen schrieb:

> Vergiss, das das Hex ist. Es ist eine Zahl. Hex ist nur eine bestimmte
> Schreibweise, wie man Zahlen schreiben kann. Genausogut hätte AVR-Studio
> diesen Wert auch dezimal hinschreiben können.
ich habe es in dezimal gewandert :-)

von Karl H. (kbuchegg)


Lesenswert?

wesam aymen schrieb:
> Karl Heinz Buchegger schrieb:
>
>> Ich hab dich immer noch nicht.
>> Was willst du mit dem Wert? Händisch kontrollieren, ob sich dein µC
>> verrechnet hat?
>
> jaaaaaaaaaaaaaaaaaaa genau du hast mich verstanden

Ah, ok!
Ja, in dem Fall nimmst du den ADC Wert. Du könntest auch den Wert im 
Watch-Fenster vom Ergebnis am Ende der Funktion nehmen. Kommt aufs 
gleiche hinaus.

von wesam a. (fm86)


Lesenswert?

beim wtch ergebnis steht nur die aufeinander addiereten 5 Messungen aber 
der mittelwert finde ich nicht bei watch.
hat es ein sinn, dass ich berechnete spannung mit dem analogeingang(von 
0v bis 5) zu vergleichen)??

von Karl H. (kbuchegg)


Lesenswert?

1
  for(i=0;i<5;i++)
2
  {
3
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
4
    while ( ADCSRA & (1<<ADSC) ){
5
  ;}   // auf Abschluss der Konvertierung warten
6
    ergebnis += ADCW;        // oder ergebnis+= ADCL,ADCH; ADCL,ADCH
7
oder  durch ADCW ersetzen adc word Wandlungsergebnisse aufaddieren
8
  }
bis hier her werden die Messungen addiert

1
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
2
3
  ergebnis /= 5;                     // Summe durch 5 teilen = arithm.Mittelwert
und jetzt wurde der Mittelwert berechnet


ergebnis hat innerhalb der Funktion 2 Bedeutungen, je nachdem an welcher 
Stelle du bist, wenn du dir die Variable ansiehst

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

wesam aymen schrieb:
> hallo,
> ich habe es so gemacht ich habe den Hex Wert, der in ADC Data regester
> bytes genommen und in den ADC Forml ( V=ADCwert/1024*1,1v) eingesetzt
> die Berechnete V ist klein bissschen nicht das gleiche wie der
> Eingangwert

Hast du denn vorher mal die Referenzspannung nachgemessen?  Die 1,1 V
sind doch nur der Sollwert, der tatsächliche Wert kann ein Stück
davon abweichen.  Kann man mit einem Multimeter am Pin AREF nachmessen.

von wesam a. (fm86)


Lesenswert?

ich habe den Mittelwert gerechnet und das hat gestimmt.
es wurde keinen Mitelwert dargestellt, da der gelbe Pfeil(show next 
statement) springt nicht auf ergibnis/=5 warum ?? ich habe keine Ahnung, 
deswegen habe ich den mittel wert mit tachenrechner gemacht.

von wesam a. (fm86)


Lesenswert?

also jungs vielen dank zusammen

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

wesam aymen schrieb:
> da der gelbe Pfeil(show next
> statement) springt nicht auf ergibnis/=5 warum ?

Weil die Optimierung des Compilers den Code nicht immer 1:1 in der Form
generiert, wie du ihn aufgeschrieben hast.  Solange er dabei überhaupt
den Mittelwert ausrechnet, ist es dem Compiler überlassen, mit welchen
Schritten er dies tut.

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.