www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Rechteckspannung und ADC


Autor: Heigo R. (heigo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte die Pegel eines Rechtecksignals mittels ADC bestimmen. Mein
Problem ist jetzt, dass das Signal zwischen zwei Werten pendelt, die ich
vorher nicht kenne. Als Lösung hätte ich gerne den Wert für die
niedrigste Spannung und den Wert für die höchste Spannung.
Wenn ich nun zwei nacheinander gemessenen Werte vergleiche und danach
die Aussage treffe, welcher größer oder kleiner war, ist das Problem,
dass der ADC sowieso nie zweimal den gleichen Wert misst.
Ein weiteres Problem ist, wenn ich genau in der steigenden oder
fallenden Flanke messe, dann kommen noch ungenauere Werte zu stande.

Hat da jemand vielleicht eine Idee?

Gruß
Heiko

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde dem zu messenden Signal erst einen Komparator vorschalten. Den 
auf einen ext. Interrupt geben. Somit hast du schon mal die Zeiten wo du 
messen kannst. Danach evtl. mehrere Messungen in dieser Phase und den 
Mittelwert bilden.

MW

Autor: Fabian H. (hdr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned char i, x, min, max;

min = 128;
max = 128;

for (i = 0; i < 100; i++)
{
   x = "Wert vom ADC einlesen";
   if (x > max) { max = x; }
   if (x < min) { min = x; }
}



So ungefähr würde ich es machen...

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mein Problem ist jetzt,
>dass das Signal zwischen zwei Werten pendelt

Nun, das hat ein zeitlich variantes Signal so an sich.
Für eine sinvolle Antwort auf deine Frage fehlen da noch ein paar Daten:
Frequenz?
Flankensteilheit?
Rauschen?
Ändert sich der low- bzw. high-Pegel im Laufe der Zeit?
Falls ja: wie schnell?


Wenn ich das alles als Freiheitsgrade hätte, dann
würde ich das als ein sauberes 5V-Signal definieren
und einen 1-Bit-AD-Wandler (Port-Pin) verwenden :-)
(Ich liebe den Konjunktiv)

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@   Fabian Harder

besser so:
:
min = 255;  // wenn unsigned!!
max = 0;
:

Weil:
was wäre mit "min = 128",
wenn das Signal zwischen 200 und 240 schwanken würde?

Autor: Heigo R. (heigo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Für eine sinvolle Antwort auf deine Frage fehlen da noch ein paar Daten:
Frequenz maximal 16Hz, also sehr langsam
Flankensteilheit im schlechtesten Fall 200us
Rauschen = ADC-Wert +-3

> Ändert sich der low- bzw. high-Pegel im Laufe der Zeit?
> Falls ja: wie schnell?

eigentlich sollte er sich nicht ändern, aber auch das Stecker abziehen 
würde eine Änderung hervorrufen.

Autor: Fabian H. (hdr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lkmiller wrote:
> @   Fabian Harder
>
> besser so:
> :
> min = 255;  // wenn unsigned!!
> max = 0;
> :
>
> Weil:
> was wäre mit "min = 128",
> wenn das Signal zwischen 200 und 240 schwanken würde?

Jo, stimmt!

Autor: Heigo R. (heigo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian Harder wrote:
> lkmiller wrote:
>> @   Fabian Harder
>>
>> besser so:
>> :
>> min = 255;  // wenn unsigned!!
>> max = 0;
>> :
>>
>> Weil:
>> was wäre mit "min = 128",
>> wenn das Signal zwischen 200 und 240 schwanken würde?
>
> Jo, stimmt!

Problem an der Sache ist nur, dass bei dieser Möglichkeit Pegel nur 
erkannt werden, wenn sie oberhalb oder unterhalb der Schwelle liegen. 
Sollten beide unterhalb 255 liegen, wird nur ein Wert erkannt.
Wenn sich das Signal auch noch ändert, also erst ein max wert erkannt 
wird und dann wird die Schwelle unterschritten, dann bleibt der Wert 
trotzdem im Register stehen...

Autor: 3360 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Histogramm erstellen ?

Autor: Fabian H. (hdr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe nicht so ganz, was Du mir damit sagen willst...
Falls sich der Wert im Laufe der Zeit ändert?!

Dann setzt man zyklisch min=255; max=0; und erhält danach wieder die 
aktuellen Werte.

Autor: 3360 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Histogtramm iste ein Araay von Haeufigkeiten. Da kann man irgendwann 
beginnen und 10 Rechteckperioden lang sampeln. Dann muesste man 2 Maxima 
bekommen.

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Histogramm ist schön,
braucht aber einiges an Speicherplatz und Auswerte-SW.
Und eine lange Messdauer, um sicher beide Pegel zu erfassen (<<16Hz).

Wieso nicht do wie die Peak-Anzeigen in einem Mischpult:
z.B. Maximum
A) ein AktWert>MaxPeak setzt den MaxPeak=AktWert
B) dann läuft der MaxPeak zeitlich (z.B. -1 pro 10ms) langsam gegen 0,
   wenn nicht zwischendurch A) eintritt

MinPeak ist eben genau umgekehrt. Das ergäbe eine
schöne Anpassung auch an ein sich langsam änderndes Signal.

Das ergibt ein weniger hartes Verhalten als
>
>Dann setzt man zyklisch min=255; max=0; und
>erhält danach wieder die aktuellen Werte.
>

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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