Forum: Mikrocontroller und Digitale Elektronik Spannungswerte als ASCII in serielle Monitor darstellen, UART


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bao Thien N. (baobao97)


Angehängte Dateien:

Lesenswert?

Guten Tag,
ich bin hier newbie habe Problem mit der Aufgabe, wobei man die analoge 
Spannung eines Potentiometers mit Hilfe von Atmega328p ablesen kann mit 
der Genauigkeit 2 Stelle nach dem Komma. Ich versuchte die 
Eingangspannung über digitale Werte von ADC zu berechnen. Ich habe mit 
TinkerCAD simuliert aber die Spannung, die abgelesen wird, stimmt mit 
den Messwerten am Multimeter gar nicht. Vllt liegt irgendewo Fehler. Ich 
bedanke mich für jede Hilfe :D. Ich wünsche euch einen schönen guten Tag 
noch !! Im Anhang findet man das Bild der Simulation zur Erläuterung und 
den Code.

von Gerald K. (geku)


Lesenswert?

Vielleich hilft es in der Software eine Kalibrierung einzufügen. Ein 
Wert für den Offset, ein Wert für den Multiplikator. Beide Werte so 
einzustellen, dass die Messwerte mit den Multimeter übereinstimmen. 
(Offset bei OV Eingangsspannung, Multiplikator bei maximaler 
Eingangsspannung)

von Falk B. (falk)


Lesenswert?

Bao Thien N. schrieb:
> Guten Tag,
> ich bin hier newbie habe Problem mit der Aufgabe, wobei man die analoge
> Spannung eines Potentiometers mit Hilfe von Atmega328p ablesen kann mit
> der Genauigkeit 2 Stelle nach dem Komma.

Siehe Festkommaaritjmetik. Wenn gleich man es für einen einfachen 
Test auch mit Fließkomma machen kann, da spielt der Resourcenbedarf 
keine Rolle.

> Ich versuchte die
> Eingangspannung über digitale Werte von ADC zu berechnen. Ich habe mit
> TinkerCAD simuliert aber die Spannung, die abgelesen wird, stimmt mit
> den Messwerten am Multimeter gar nicht.

Was heißt das konket? Wie groß ist die Abweichung?

> Vllt liegt irgendewo Fehler. Ich
> bedanke mich für jede Hilfe :D. Ich wünsche euch einen schönen guten Tag
> noch !! Im Anhang findet man das Bild der Simulation zur Erläuterung und
> den Code.

Warum endet dein Quelltext auf .txt? Man hängt einfach das ORIGINAL an!

Hmm
1
int digit = get_ADCvalue();
2
AnalogWert = (digit*500)/1023;

Klingeling! Wie groß können Zwischenergebnisse hier werden? Siehe 
Festkommaarithmetik.

von Falk B. (falk)


Lesenswert?

Gerald K. schrieb:
> Vielleich hilft es in der Software eine Kalibrierung einzufügen.

Vielleicht hilft erst mal ein Blick in den Quelltext?

von Falk B. (falk)


Lesenswert?


von my2ct (Gast)


Lesenswert?

Bao Thien N. schrieb:
> Pr4_Potentionmeter.txt (1,54 KB)

Nur weil es Quelltext heißt, muss man den noch lange nicht in eine 
txt-Datei packen. Zu den meisten Programmiersprachen gibt es eine eigene 
Extension für Quellcode Dateien. Die erleichtert z.B. Syntax 
Highlightning mit vielen Editoren/Viewern.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

AnalogWert = (digit*500)/1023;

Oha. Wenn in einem Programm ein Divisor mit 2^n-1 steht (511, 1023, 2047 
usf), dann ist das meistens ein klares Indiz für "hab ich irgendwo 
herkopiert und habe kP was da passiert".

Korrekt ist hier
AnalogWert = (digit*500)/1024;

Nur wer sich das Ergebnis schönsaufen will, nimmt die falsche Steigung 
mit 1023 als Divisor.

Bao Thien N. schrieb:
> aber die Spannung, die abgelesen wird, stimmt mit den Messwerten am
> Multimeter gar nicht.
Was erwartest du und was kommt stattdessen?
Was sagt dein Programm, wenn du laut Messgerät 1V, 2V, 3V... anlegst?

von Manfred (Gast)


Lesenswert?

Lothar M. schrieb:
> ein klares Indiz für "hab ich irgendwo
> herkopiert und habe kP was da passiert".

Das Bild im Eröffnungsbeitrag ist offenbar kopiert. Mir krempeln sich 
immer die Fußnägel hoch, wenn ich Steckbrettchenbilder sehe, A*-Kiddies 
oder auch die Clowns von heises make.

Dem Bildchen nach liegt das Poti an Ub des µCs, wird also am Anschlag 
immer 1023 liefern, unabhängig von der tatsächlichen Spannung - 
ratiometrisch.

Er hat keine Zahlen geliefert, wie groß die Abweichung gegenüber dem DVM 
ist, ein paar-hundert-mV sind unvermeidbar, weil die Speisung nicht 
exakt 5,00 Volt ist.

Als ich meinen ersten ChinaUNO bekommen habe, kamen nach Blink und 
Lauflicht ein LCD und ein Poti dran, erstmal ein paar Grundlagen 
austesten.

> Korrekt ist hier
> AnalogWert = (digit*500)/1024;

Da muß man aufpassen, den passenden Variablentyp zu definieren - ich 
habe schon Fehler suchen dürfen, weil innerhalb der Berechnung ein 
Überlauf stattgefunden hat.

Man kann es anders anfassen: 1023/5 = 204,6, also
AnalogWert = (digit/204,6);

1024 Schritte an 5 Volt macht gerundet 5 mV Auflösung, da sind Wackler 
in der zweiten Nachkommastelle nicht zu vermeiden, wobei das sein 
geringstes Problem sein dürfte.

von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

...

von Falk B. (falk)


Lesenswert?

Manfred schrieb:
> Lothar M. schrieb:
>> ein klares Indiz für "hab ich irgendwo
>> herkopiert und habe kP was da passiert".
>
> Das Bild im Eröffnungsbeitrag ist offenbar kopiert. Mir krempeln sich
> immer die Fußnägel hoch, wenn ich Steckbrettchenbilder sehe, A*-Kiddies
> oder auch die Clowns von heises make.

Jaja, dein Beitrag hat uns allen noch gefehlt!

von selber (Gast)


Lesenswert?

Falk B. schrieb:
> Jaja, dein Beitrag hat uns allen noch gefehlt!

Und deiner!

von A. S. (achs)


Lesenswert?

Lothar M. schrieb:
> Korrekt ist hier
> AnalogWert = (digit*500)/1024;

Das kann nicht korrekter sein:

Mit 2 Bit und 4V wird's deutlicher:

 * 0..1=0
 * 1..2=1
 * 2..3=2
 * 3..4=3
 * --> d*4/3

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Ich tue mich noch mit anderen Teilen des Programms schwer:
>    unsigned char digit;
...
>  int digit = get_ADCvalue();
geht das überhaupt? Ja gut, ist in einem eigenen Fokus, aber warum macht 
man das? Verwirrt nur.
Und
>  unsigned char AnalogWert;
>  AnalogWert = (digit*500)/1023;
Ist es sicher, dass das mit den Typen passt? Bei dem größtmöglichen 
ADC-Wert ist der AnalogWert ja 500 und passt nicht in unsigned char.

von Falk B. (falk)


Lesenswert?

A. S. schrieb:
> Lothar M. schrieb:
>> Korrekt ist hier
>> AnalogWert = (digit*500)/1024;
>
> Das kann nicht korrekter sein:
>
> Mit 2 Bit und 4V wird's deutlicher:
>
>  * 0..1=0
>  * 1..2=1
>  * 2..3=2
>  * 3..4=3
>  * --> d*4/3

Das hatten wir schon mal vor VIELEN Jahren diskutiert.

Beitrag "Re: Berechnung zur Auflösung ADC - wie richtig?"

von Stefan ⛄ F. (stefanus)


Lesenswert?

Achte mal auf deine Datentypen, die hast du wild durcheinander 
gewürfelt. Da finden eine Menge unerwartete Konvertierungen im 
Hintergrund statt, mit ihren Seiteneffekten.

Die Doku des gcc Compilers sagt dazu "The sizes of these variables 
depend on the hardware and operating system of the computer. On a 
typical 32-bit GNU system, the sizes of the integer types are as 
follows..."

Char ist meistens 8-bit signed integer, muss aber nicht zwingend.

Was short ist musste ich erstmal nachlesen: 16-bit unsigned integer auf 
einem typischen 32-bit GNU System. Keine Ahnung was es auf einem AVR 
ist, ist mir aber auch egal weil ich das so niemals nutze.

Anstatt so unklar definierte Sachen wie short und char für Messwerte zu 
benutzen empfehle ich:
1
#include <stdint.h>
2
3
uint16_t get_ADCvalue()
4
{
5
   ...
6
   uint16_t Wert=ADC;
7
   return Wert;
8
}
9
10
...
11
12
uint16_t digit = get_ADCvalue();

uint16_t deswegen, weil das ADC Register dieses Format hat.

: Bearbeitet durch User
von Manfred (Gast)


Lesenswert?

HildeK schrieb:
>>  unsigned char AnalogWert;
>>  AnalogWert = (digit*500)/1023;
> Ist es sicher, dass das mit den Typen passt? Bei dem größtmöglichen
> ADC-Wert ist der AnalogWert ja 500 und passt nicht in unsigned char.

Deshalb schrieb ich gestern, dass man auf den Variablentyp aupassen muß:
Manfred schrieb:
> Da muß man aufpassen, den passenden Variablentyp zu definieren - ich
> habe schon Fehler suchen dürfen, weil innerhalb der Berechnung ein
> Überlauf stattgefunden hat.

Wenn der ADC z.B. 500 liefert, ergibt die Multipikation mit 500 dann 
250000, ein normales unsigned läuft aber bei 65536 über.

Aus dem Grunde erspare ich mir die temporäre Riesenzahl und dividiere:

> Man kann es anders anfassen: 1023/5 = 204,6, also
> AnalogWert = (digit/204,6);

---------

Scheint so, dass Herr Bao Thien N. (baobao97) nicht mehr folgt, sonst 
hätte er ja mal Beispiele geliefert, welche Werte der Arduino mist und 
was sein DVM zeigt.

von Jefe (Gast)


Lesenswert?

Gerald K. schrieb:
> Vielleich hilft es in der Software eine Kalibrierung einzufügen.
> Ein

Du weist schon was eine Kalibrierung ist?

von Bao Thien N. (baobao97)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
tut mir leid,ich bin am Wochenende so beschäftig mit Nebenjob als 
Student(T.T). deswegen habe ich jtzt Zeit, mich zu melden.Danke ertsmal 
für eure Hilfe.

Stefan ⛄ F. schrieb
> Anstatt so unklar definierte Sachen wie short und char für Messwerte zu
> benutzen empfehle ich:#include <stdint.h>
> uint16_t get_ADCvalue()
> {
>    ...
>    uint16_t Wert=ADC;
>    return Wert;
> }
> ...
> uint16_t digit = get_ADCvalue();
>
> uint16_t deswegen, weil das ADC Register dieses Format hat.

ich habe versuch aber funktionert auch nicht

Manfred schrieb:
> Man kann es anders anfassen: 1023/5 = 204,6, also
>> AnalogWert = (digit/204,6);

das habe ich auch gemacht aber geht auch leider nicht

von EAF (Gast)


Lesenswert?

Bao Thien N. schrieb:
> das habe ich auch gemacht aber geht auch leider nicht
Was passiert?
Was erwartest du stattdessen?

von Bao Thien N. (baobao97)


Lesenswert?

Die Messwerte auf Serial Minitor unten recht im Bild soll mit dem 
Multimeter(gelbes Stück) übereinstimmt.

von Minus M. (Firma: irre) (minusman)


Lesenswert?

Bao Thien N. schrieb:
> Die Messwerte auf Serial Minitor unten recht im Bild soll mit dem
> Multimeter(gelbes Stück) übereinstimmt.
Das wird nicht gelingen.
A. deine Ausgabe kann kein Float
B. Du verwendest Vcc als Refrenz.(variiert)
C. Noch Böcke bei den Datenypen/Wertebereichen?

Meine Tipps:
Sogfältig mit Datentypen umgehen.
Ob Fest- oder Fließkomma... deine Ausgabe muss das zeigen können.

Absolute Messungen mit der internen Referenz (z.B. 2 Punkt Kalibrierung)
Ratiometrische Messungen mit Vcc als Referenz

Dann kann das was werden.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Bao Thien N. schrieb:
> Hallo Leute,
> tut mir leid,ich bin am Wochenende so beschäftig mit Nebenjob als
> Student(T.T). deswegen habe ich jtzt Zeit, mich zu melden.Danke ertsmal
> für eure Hilfe.

Naja.

>> Man kann es anders anfassen: 1023/5 = 204,6, also
>>> AnalogWert = (digit/204,6);
>
> das habe ich auch gemacht aber geht auch leider nicht

Weil du noch mehr Fehler im Programm hast.

unsigned char AnalogWert;

Das sind nur mickrige 8 Bit.

Versuchs mal so.

unsigned int AnalogWert;
....
AnalogWert = (digit*500L)/1024;

Das 500L ist wichtig. Und lies den Artikel Festkommaarithmetik. Dazu 
warst du bisher zu faul oder ignorant.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

1023/5 = 204.6
Bitte kein Komma verwenden, sondern den Dezimalpunkt.

von Bao Thien N. (baobao97)


Angehängte Dateien:

Lesenswert?

Danke euch für alle Unterstüzung, ich bin auf das Ergebnis angekommen, 
nur die Spannung schwankt um den wahren Wert.

: Bearbeitet durch User
von Bao Thien N. (baobao97)


Lesenswert?

Falk B. schrieb im Beitrag:
Dazu
> warst du bisher zu faul oder ignorant.

Ich lese gerade die immer noch, für mich ein bisschen schwer, in Deutsch 
zu lesen, bitte um Verständnis.

von Bao Thien N. (baobao97)


Lesenswert?

Christian H. schrieb:
> 1023/5 = 204.6
> Bitte kein Komma verwenden, sondern den Dezimalpunkt.

jetz funktionier das aber nur wenn ich 1024/500 statt 5V. ich meine 
Aufgabeblatt von Uni steht schon man muss Uref mit 100 mutiplizieren, 
ich weiß nicht wieso, wir haben all als online Praktika und Simulation 
mit TinkerCAD, die Schaltung im Bild ist von Dozenten aufgebau, ich habe 
die nicht von jmd kopiert oder so

von Falk B. (falk)


Lesenswert?

Bao Thien N. schrieb:
> Ich lese gerade die immer noch, für mich ein bisschen schwer, in Deutsch
> zu lesen, bitte um Verständnis.

Mag sein, aber in dem Artikel findest du praktisch alle Antworten auf 
deine Fragen. Und da du Student bist, solltest du dir das alles selber 
durcharbeiten können und WOLLEN!

"Nur selber denken macht geistig fett."

Einer der vielen schönen Sprüche meines Mathematiklehrers (RIP)

von Falk B. (falk)


Lesenswert?

Bao Thien N. schrieb:
> Danke euch für alle Unterstüzung, ich bin auf das Ergebnis angekommen,
> nur die Spannung schwankt um den wahren Wert.

Naja, so schwanke ich auch, wenn ich mal wieder zu lange in der Kneipe 
war ;-)

Da ist was faul. Die Spannung sollte bestenfalls um ein paar Dutzend mV 
schwanken, aber niemals um VOLT!

Zeig mal ein Photo von deinem realen Aufbau. Bildformate beachten!

von Bao Thien N. (baobao97)


Lesenswert?

Falk B. schrieb:
> Zeig mal ein Photo von deinem realen Aufbau. Bildformate beachten!

als Aufbau in realer Welt habe ich nicht, ich letzte Woch die ersten 2 
online Vorlesung von Mikroprozessor und man muss alles online im 
TinkerCAD(siehe oberes Bild) machen. Diese Aufgabe ist meine 
Vorbereitung für Praktikum in 2 Wochen, ich mache nur selbst Studium.

von Falk B. (falk)


Lesenswert?

Bao Thien N. schrieb:
> Falk B. schrieb:
>> Zeig mal ein Photo von deinem realen Aufbau. Bildformate beachten!
>
> als Aufbau in realer Welt habe ich nicht, ich letzte Woch die ersten 2
> online Vorlesung von Mikroprozessor und man muss alles online im
> TinkerCAD(siehe oberes Bild) machen. Diese Aufgabe ist meine
> Vorbereitung für Praktikum in 2 Wochen, ich mache nur selbst Studium.

Häää? Und mit was testest du JETZT?

von Bao Thien N. (baobao97)


Lesenswert?

Falk B. schrieb:
> Häää? Und mit was testest du JETZT?
nur die Simulation ist das einzige Werkzeug, so ist das online Praktikum 
:(

von Falk B. (falk)


Lesenswert?

Du hast einen Simulator, um den Arduino zu simulieren? Mit Poti und 
Multimeter? Alles virtuell? OMG!

von Falk B. (falk)


Lesenswert?

Ist der Simulator auf einer öffentlichen Website? Hast du einen Link 
dazu?

von Bao Thien N. (baobao97)


Lesenswert?

Falk B. schrieb:
> Du hast einen Simulator, um den Arduino zu simulieren? Mit Poti und
> Multimeter? Alles virtuell? OMG!

Der heißt TinkerCAD

von Falk B. (falk)


Lesenswert?

Hmm.
Aber ich hab noch einen Fehler gefunden. Du liest den falschen ADC-Kanal 
aus. Dein Poti hängt an A1, du liest aber Kanal 0 aus. Eher so.

ADMUX |=(1<<1);

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bao Thien N. schrieb:
> ich habe versuch aber funktionert auch nicht
Mach dir vorher Gedanken zu deiner Software. Du kopierst laufend nur 
irgendwas irgendwoher in dein Programm und das tut dann immer noch 
nichts Sinnvolles. Parallel zum kopieren solltest du auch versuchen zu 
kapieren, was der jeweilige Vorschlag dir sagen will.
Hast du eigentlich die Fragen zu deinem ursprünglichen Programm gesehen?

EAF schrieb:
> Was passiert?
> Was erwartest du stattdessen?
Besser wäre:
Was erwartest du?
Und was passiert stattdessen?
Denn das bedeutet, dass man sich vorher Gedanken gemacht hat, ein 
Programm dazu geschrieben hat und ein bestimmtes Verhalten erwartet.

A. S. schrieb:
> Mit 2 Bit und 4V wird's deutlicher:
> 0V..1V=0

> 1V..2V=1

> 2V..3V=2

> 3V..4V=3

1V ist also entweder 0 oder auch 1?
Und 2V kann 1 oder auch 2 sein?
Oder müsste es nicht korrekt so heißen:

0V..0,99V=0

1V..1,99V=1

2V..2,99V=2

3V..3,99V=3

> --> d*4/3
Damit haben wir 1,33V-Schritte und können zurückrechnen:
der AD-Wert 3 ergibt dann auf der Anzeige 4,00V,
AD=2 wird als 2,66V angezeigt,
1 ergibt 1,33V und 0 ergibt 0V. Seltsam krumme Werte...

Aber jetzt kommt es: welchen AD-Wert ergibt mit diesem Wandler eine 
Eingangsspannung von 0V? 1V? 1,5V? 2V? 3V? 3,5V? 3,9V? 4V?

: Bearbeitet durch Moderator
von Bao Thien N. (baobao97)


Angehängte Dateien:

Lesenswert?

Falk B. schrieb:
> Hmm.
> Aber ich hab noch einen Fehler gefunden. Du liest den falschen ADC-Kanal
> aus. Dein Poti hängt an A1, du liest aber Kanal 0 aus. Eher so.
>
> ADMUX |=(1<<1);
Auf dem Datenblatt von ATmega328p steht so bei ADMUX aus Wahl, ich 
hoffe, ich habe den richtigen Bit ADC1 mit 1 an 0.MUX0 bit ausgewählt.

von Falk B. (falk)


Lesenswert?

Bao Thien N. schrieb:
> Falk B. schrieb:
>> Hmm.
>> Aber ich hab noch einen Fehler gefunden. Du liest den falschen ADC-Kanal
>> aus. Dein Poti hängt an A1, du liest aber Kanal 0 aus. Eher so.
>>
>> ADMUX |=(1<<1);
> Auf dem Datenblatt von ATmega328p steht so bei ADMUX aus Wahl, ich
> hoffe, ich habe den richtigen Bit ADC1 mit 1 an 0.MUX0 bit ausgewählt.

Ahhhh, stimmt. Mein Fehler! Ich hab mich durch deine Schreibweise 
irritieren lassen. Hier schreibt man das sinnvollerweise NICHT mittels 
Schiebeoperation, sondern direkt als Zahl!

ADMUX |= 1;

von Bao Thien N. (baobao97)


Lesenswert?

Falk B. schrieb:
> Ahhhh, stimmt. Mein Fehler! Ich hab mich durch deine Schreibweise
> irritieren lassen. Hier schreibt man das sinnvollerweise NICHT mittels
> Schiebeoperation, sondern direkt als Zahl!
>
> ADMUX |= 1;
Danke dir!!

von Falk B. (falk)


Lesenswert?

Also was ist jetzt? Was erscheint in deinem Terminal, wenn du den 
virtuellen Poti auf sagen wir 3,5V stellst und dort läßt? Dann müßte 
konstant 3,5V erscheinen, immer und immer wieder.

von Manfred (Gast)


Lesenswert?

EAF schrieb:
> Was erwartest du stattdessen?
Bao Thien N. schrieb:
> Die Messwerte auf Serial Minitor unten recht im Bild soll mit dem
> Multimeter(gelbes Stück) übereinstimmt.

Verdammt nochmal, dann zeige eine Reihe Werte:
10 Verschiedene Stellungen des Potis und abtippen, was DVM und Monitor 
anzeigen.

Du gehst leider auch nicht logisch vor: Du hast eine funktionsfähig 
serielle Ausgabe, also füge an jeder Stelle, wo ein Wert erzeugt wird, 
ein serial.print und ein delay ein und schaue Dir die Werte an.

Minus M. schrieb:
> Absolute Messungen mit der internen Referenz (z.B. 2 Punkt Kalibrierung)
> Ratiometrische Messungen mit Vcc als Referenz
>
> Dann kann das was werden.
Ich hoffe, Du teilst Dir selbst Minus zu!

Grundsätzlich kann man auch mit Vcc Werte messen, solange man mit der 
möglichen Drift von Vcc leben kann. Bao scheint doch ein ganz anderes 
Problem zu haben, Werte jenseit der Realität - die er uns hoffentlich 
noch verrät.

Und ja, sein Aufbau ist ratiometrisch, das Ding muß am Rechtsanschlag 
1023 entsprechend 5,00 Volt anzeigen, selbst, wenn Vcc nur 4,7 oder gar 
5,3V beträgt. Darüber sprechen wir, wenn er soweit gekommen ist.

von A. S. (achs)


Lesenswert?

Falk B. schrieb:
> Das hatten wir schon mal vor VIELEN Jahren diskutiert.

Das macht es nicht richtiger, vor allem, wenn man den zweiten Teil 
unterschlägt: die Addition des halben LSBs. Dann ist 1024 bzw. hier 4 
vermutlich richtig.

Lothar M. schrieb:
> Seltsam krumme Werte...

Nicht Dein Ernst, oder? Und welcher Bereich nun inclusive und welcher 
exclusive 1 ist, was soll das.

Lothar M. schrieb:
> Damit haben wir 1,33V-Schritte und können zurückrechnen:
> der AD-Wert 3 ergibt dann auf der Anzeige 4,00V,
> AD=2 wird als 2,66V angezeigt

Ja.

Startet der AD mit einem ganzen Bit, dann ist 2^n gut, erfordert aber 
das halbe Bit Offset. Das fehlt aber bei Dir. Darum
A. S. schrieb:
> nicht korrekter

Startet (und endet) der AD mit einem halben Bit, ist 2^n-1 perfekt, 2^n 
nur falsch.

Schade finde ich nur, dass dies hier im Thread nichts zu suchen hat, da 
der TO ein absoluter Anfänger ist und an ganz anderer Front kämpft.

: Bearbeitet durch User
von Bao Thien N. (baobao97)


Angehängte Dateien:

Lesenswert?

Falk B. schrieb:
> Also was ist jetzt? Was erscheint in deinem Terminal, wenn du den
> virtuellen Poti auf sagen wir 3,5V stellst und dort läßt? Dann müßte
> konstant 3,5V erscheinen, immer und immer wieder.

nein der schwankt echt stark,

von Falk B. (falk)


Lesenswert?

Dann muss man weiter nach dem Fehler suchen. Probier mal andere 
ADC-Kanäle aus. Möglicherweise steckt auch ein Fehler im Simulator.

von Falk B. (falk)


Lesenswert?


von Bao Thien N. (baobao97)


Lesenswert?

Falk B. schrieb:
> Dann muss man weiter nach dem Fehler suchen. Probier mal andere
> ADC-Kanäle aus. Möglicherweise steckt auch ein Fehler im Simulator.
Ich habe dieses Mal in ADC3 PIn angeschlossen. Die Messwerte sehen so 
aus(mit Einstellung 3,89V)
3.87V
2.62V
0.89V
3.04V
0.07V
3.61V
1.68V

von EAF (Gast)


Lesenswert?

Manfred schrieb:
> Und ja, sein Aufbau ist ratiometrisch,

Da hat der Minusmann schon recht....
Bei einer ratiometrischen Messung darf man auch nur ratiometrische Werte 
erwarten.
Das Messgerät ist allerdings absolut.

Ihm (der TO) versucht also eine ratiometrische und eine absolute Anzeige 
in Übereinstimmung zu bringen.

Das geht natürlich nicht. Ist irgendwie unsinnig. Unlogisch.

Manfred schrieb:
> solange man mit der
> möglichen Drift von Vcc leben kann
Damit bestätigst du, dass es kaum möglich ist, die Anzeigen in 
Übereinstimmung zu bringen.

Das ist sowieso schon schwierig genug!
Aber mit dem logischen Fehler im Bauch quasi unmöglich.
1
// 1 Punkt Kalibrierung (reduzierte Geradengleichung)
2
3
constexpr float maximalEinstellbarerWert {4.59};//Volt vom DMM abgelesen
4
constexpr float steigung {maximalEinstellbarerWert/1024.0};
5
6
7
8
void setup()
9
{
10
  Serial.begin(9600);
11
}
12
13
void loop()
14
{
15
  Serial.print(steigung * analogRead(A1));
16
  Serial.println("V");
17
  delay(1000);
18
}

Kalibriert auf eine Versorgung, ein µC, und ein Referenzmessgerät, ist 
alles OK.
Aber umgesteckt, z.B. von einem PC an den anderen, oder eine externe 
Versorgung?
Zack weg... 10% sind da locker drin.

Also:
Wenn absolute Werte gewünscht sind, dann sollte man das Messverfahren 
auch so bauen, dass man absolute Werte erhält.

----

Bao Thien N. schrieb:
> ich meine
> Aufgabeblatt von Uni steht schon man muss Uref mit 100 mutiplizieren,
Schon richtig!
Das liegt an deiner seltsamen Ausgabe.

von EAF (Gast)


Lesenswert?

Lothar M. schrieb:
> EAF schrieb:
>> Was passiert?
>> Was erwartest du stattdessen?
> Besser wäre:
> Was erwartest du?
> Und was passiert stattdessen?
> Denn das bedeutet, dass man sich vorher Gedanken gemacht hat, ein
> Programm dazu geschrieben hat und ein bestimmtes Verhalten erwartet.

Da spricht deine Erwartungshaltung, ganz laut!
Evtl. ist die, leicht bis mittelschwer, überzogen.

Bedenke:
Die Erwartungshaltung, ist die Mutter der Enttäuschung.

Wobei man da auch sagen muss, dass eine Enttäuschung ein ungemein 
positives Erlebnis ist.
Das Wort sagt es schon, man kann so eine (Selbst)Täuschung erkennen und 
abwerfen.
Besser geht es kaum, ein wahrhaft Glück bringendes Ereignis.
Also alles gut so, weiter so.

von Manfred (Gast)


Lesenswert?

EAF schrieb:
>> Und ja, sein Aufbau ist ratiometrisch,
>
> Da hat der Minusmann schon recht....
> Bei einer ratiometrischen Messung darf man auch nur ratiometrische Werte
> erwarten.
> Das Messgerät ist allerdings absolut.
>
> Ihm (der TO) versucht also eine ratiometrische und eine absolute Anzeige
> in Übereinstimmung zu bringen.
>
> Das geht natürlich nicht. Ist irgendwie unsinnig. Unlogisch.

Das ist vollkommen richtig und ich hatte es bereits vorher angerissen:

Manfred schrieb:
> Dem Bildchen nach liegt das Poti an Ub des µCs, wird also am Anschlag
> immer 1023 liefern, unabhängig von der tatsächlichen Spannung -
> ratiometrisch.
>
> Er hat keine Zahlen geliefert, wie groß die Abweichung gegenüber dem DVM
> ist, ein paar-hundert-mV sind unvermeidbar, weil die Speisung nicht
> exakt 5,00 Volt ist.

Es bleibt aber das Grundproblem: Der TO hat irgendwelche Zufallswerte 
und muß erstmal seine groben Fehler ausmerzen.
Es müssen erstmal stabile Werte zwischen 0 und 1023 vom ADC kommen und 
sinnvoll nach Volt umgerechnet werden, danach diskutieren wir solche 
Feinheiten.

Ich habe mehrere Anwendungen, wo ich per Arduino messe und sinnvolle 
Werte bekomme, das ist kein Hexenwerk. Ich habe das auch nicht direkt 
beim ersten Versuch hinbekommen, aber, siehe weiter vorne, mir seriell 
Zwischenwerte ausgeben lassen und damit eingegrenzt, wo es klemmte.

von EAF (Gast)


Lesenswert?

Manfred schrieb:
> Es bleibt aber das Grundproblem: Der TO hat irgendwelche Zufallswerte
> und muß erstmal seine groben Fehler ausmerzen.
Das hat er gesagt bekommen!
1. Die Berechnung und ihre Datentypen
2. Die Multiplexer Port Irritierung/Vertauschung

Manfred schrieb:
> danach diskutieren wir solche Feinheiten.
Da du hier zum Ober Guru ernannt wurdest, werde ich dir natürlich ohne 
jeden Widersprich gehorchen, und das Thema auch nie wieder erwähnen. Ich 
erwarte dann ergebenst dein Startsignal, bevor wir denn auch mal an das 
"Eingemachte" gehen...
Lass uns solange, den TE und auch die unbedarften Mitleser, ruhig in die 
Irre laufen lassen. Ist schließlich deren Irre und nicht unsere. 
Zumindest wir beide wissen es ja besser.

von Stefan ⛄ F. (stefanus)


Lesenswert?

Ist das so schwer, einfach mal zusätzlich den Wert vom ADC register 
auszugeben?

Man muss Fehler einkreisen. Jede Ausgabe beruht auf einer Eingabe und 
einer Verarbeitung. Das wiederum passiert typischerweise in mehreren 
Schritten. Also gibt man diese Zwischenwerte aus, dann sieht man ob es 
an den Werten oder der Verarbeitung liegt.

von A. S. (achs)


Lesenswert?

Falk B. schrieb:
> Beitrag "Re: 1023 oder 1024"

Das fasst es gut zusammen: rationale Beiträge und Leute (entschuldige 
das hier ausnahmsweise passende Wortspiel) die nicht mehr alle Latten 
auf dem Zaun haben.

Umso trauriger, dass er das trotzdem hier (und dann noch falsch) 
anbringt, wo es O.T. ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.