Forum: Mikrocontroller und Digitale Elektronik ATMega: Logarithmische Messwerte in Lineare wie ??


von Oliver (Gast)


Lesenswert?

Moin Moin zusammen,

ich verwende ein AVR ATMega8 mit BASCOM, nun
zu meinem Problem:

Ich messe eine Spannung am A/D Wandler, die sich
um 25mV pro dB erhöht. Diese Spannung wird von einem AD8307
erzeugt, der nur eine HF Spannung misst, diese ist
Frequenzunabhängig.
Ich möchte nun im LCD die Leistung in Watt anzeigen.
Gibt es eine Möglichkeit, die logarithmischen Messergebnisse
linear in Watt anzuzeigen ?
Oder muss ich alle Zahlenwerte z.B. in einem EEPROM ablegen ?
Daran habe ich auch schon gedacht, nur leider aufwändig.
Wenn ich die Leistung in dBm anzeigen würde, wäre alles sehr
einfach. Als Beispiel
10 db = 250 mV = 10mW aber
13 db = 325 mV = 20 mW !!!!

Ich kann also nicht einfach die Spannung am A/D gleich der Leistung
setzen.

Wenn ich alle leistungswerte in Abhängigkeit vom Messergebniss des A/Ds
in ein
EEPROM schreibe, wie könnte man die Adressen ansteuern ?
Leider brauch ich ja 2 Byte für den Wert 10Watt und für 100 Watt schon
3 Bytes
im EEPROM. Ich habe noch keine Lösung gefunden, wie ich sicher die
Adressen
ansteuere. Gibt es dafür eine Lösung ?

Für Eure Antworten besten Dank im voraus !!

mfg

Oliver

von crazy horse (Gast)


Lesenswert?

kenn mich zwar mit Bascom überhaupt nicht aus - aber es sollten doch
Logarithmus/Exponentialfunktionen verfügbar sein ???
Ansonsten, bei geringer Auflösung, könnte es durchaus sinnvoll sein,
die Ergebnisse in einer Tabelle zu haben, ich würde dafür allerdings
den Flash nehmen. Schneller als eine Berechnung ist der Tabellenzugriff
auf jeden Fall, braucht aber bestimmt mehr Speicher.

von Peter D. (peda)


Lesenswert?

Du machst Dir zuerst eine Tabelle für 0..2,99dB in der geforderten
Genauigkeit, z.B. mit Excel.

Dann teilst Du die dB durch 3 und potenzierst mit dem Ergebnis 2:
2^(dB/3).

Den Rest nimmst Du dann als Index auf die Tabelle und multiplizierst
mit dem Ergebnis, also:

2^(db/3) * Tabelle(db%3)


Peter

von Oliver (Gast)


Lesenswert?

Moin Moin, dass ging ja fix.
Leider kann BASCOM nicht Logarithmus.

Peter:
Habe es leider noch nicht recht verstanden, aber das
Problem mit der Tabelle ist etwas anders.
Ich bekomme ja von dem A/D Wandler ein Word von
0 bis 1023 . Nun soll der µC in ein EE schauen, welche
Leistung  er im LCD passend zum AD-Word anzeigen soll.
Dies wäre die Tabellenmethode, wobei ich hier nicht weiß, wie ich die
richtigen EE-Adressen ansteuern kann/soll.

Schöner wäre nun, wenn der µC aus der Spannung 2250mV = 0 dBm = 1mW
macht, aber aus 2500mV = 10dBm = 10mW macht.
75mV mehr sind 13dBm, also schon 20mW etc (1dB/25mV).

Mein Hauptproblem ist nur, die richtige EEPROM Adresse zum
passenden Messergebnis anzusteuern und deren Inhalt im
LCD anzuzeigen.

Zur Genauigkeit, ich brauche 1-150 Watt im Display, also
150 Einträge im EEPROM. Ein 512 Byte I2C EEPROM sollte reichen.

Besten Dank nochmal

mfg
Oliver

von crazy horse (Gast)


Lesenswert?

kleiner Irrtum, eine Funktion als Tabelle braucht soviele Einträge, wie
Eingangskombinationen da sind, in deinem Fall also 1024.
In C würde das in etwa so aussehen:
const unsigned char watt_tab[1024]={0,0,...1,1,1,2,2...150}
Das ist die eigentlich Tabelle, den entsprechenden Funktionswert
bekommst du dann ganz einfach mit
Watt=watt_tab[A2D];

von Alex (Gast)


Lesenswert?

Man kann den Logarithmus auch einfach in eine Reihe entwickeln und je
nach Genauigkeit dann nach dem x-ten Glied abbrechen. Mit dieser
Vereinfachung kann dann auch der Controller rechnen, ohne dass man
spezielle Bibliotheken einbinden muss.
Falls du in Mathe nicht so bewandert bist, googele einfach mal nach
"Taylor".

Gruss Alex

von Stephan Hochberger (Gast)


Lesenswert?

@Oliver
Bei insgesamt ca. 22db von 1-150W macht das 550mV am ADC-Eingang, oder
220 Werte bei 2,5mV Auflösung. Niedrige höhere Werte müssen dann
entsprechend visualisiert werden.

Peters Methode ist eigentlich schon die richtige um ne kleine Tabelle
zu bekommen.
a) Messwert durch 75mV teilen
b) linearen Wert für den Rest aus a aus Tabelle holen (ggf.
interpolieren)
c) um das ganzzahlige Ergebnis aus a nach links schiften

Die Tabelle für b könnte auch durch ne Reihenentwicklung (Taylor)
gemacht werden.

Die Auflösung bei 25mV pro db ist aber nicht besonders (am oberen Ende
gibts nur Stufen 144, 147, 150).

@Alex
Taylor für den ganzen Messbereich halte ich für nicht geeignet.
Entweder wird die Reihe zu lang, oder zu ungenau. Als Ersatz für die
0..3db-Tabelle aber wohl gut geeignet.

von Peter D. (peda)


Lesenswert?

Wenn Du nur 1..150W anzeigen willst, reicht tatsächlich eine Tabelle mit
150 Einträgen.

Entweder Du vergleichst alle Tabellenwerte hintereinander mit dem
ADC-Wert (max 149 Vergleiche) oder Du fängst in der Mitte an und
näherst Dich in max 8 Vergleichen dem richtigen Eintrag an.

149 Vergleiche sind aber für den AVR ein Klacks.


Peter

von Axel Rühl (Gast)


Lesenswert?

Hi, Leutz
ich habe FastAVR, da würde ich das soo machen...

dim leistungstabelle(1024) as Flash Byte

print leistungstabelle(adc(0))

leistungstabelle: 001,002,004,008...,150

eine Tabelle im Flash anlegen mit den korrespondierenden
Leistungswerten zu eingangsspannung. Hier kanal 0 am adc,
dann ausgeben, wie auch immer, in diesem Fal über die UART.

Grüße
AxelR.

von Oliver (Gast)


Lesenswert?

Moin Moin zusammen,
erstmal besten Dank für Eure Antworten.

Ich habe nun doch eine Lösung ohne Tabelle gefunden.

Ich messe die HF-Leistung mit dem Log-Verstärker AD8307.
Er macht zwar 25mV/dB, aber da ich erst ab 1 Watt messe,
entsprechen 1 Watt schon 1,750 Volt.
Nun muss ich von meiner gemessenen Spannung die 1,750V
abziehen, dass Ergebnis / 25mV und erhalte die dB.
Jetzt noch db / 10 = Bell und
 10^Bell gleich mein Multiplikator-Faktor. Da meine Referenz
1 Watt ist, ist der Faktor gleich meiner Leistung.
Dieses Verfahren ist aber nur möglich, da der Wandler
sehr linear ist, also das Verhältnis db/Ua.
Wenn ich die Leistung direkt von einer UHF-Gleichrichter Diode
messen würde, wäre die Kennlinie nicht so einfach zu Berücksichten.

Ich hoffe, dass ich das einigermaßen erklärt habe.

Zum Hintergrund für interessierte:
Es soll eine Schutzschaltung mit LCD-Anzeige
für eine Röhrenendstufe (144 MHz) entwickelt werden.
Sie soll Leistung, Anoden- Spannung und Strom, Temp,
Betriebsstunden und die Anpassung zur Antenne überwachen.
Eine Power Peak Anzeige darf auch nicht fehlen :-)

Bei Interesse => http://www.dg7xo.de => Selbstbauprojekte

Soo, möchte mich noch mal für Eure Infos bedanken, und viel
Erfolg weiterhin in diesen schönem Fachgebiet :-)

mfg
Oliver

von Thomas (Gast)


Lesenswert?

@Oliver

"Moin Moin, dass ging ja fix.
Leider kann BASCOM nicht Logarithmus."

Doch kann es

von Oliver (Gast)


Lesenswert?

@Thomas

Jo, habe ich auch schon gemerkt, aber auch, dass ich es doch nicht
brauche :-) (siehe oben)
Nur wenn ich die Rückflussdämpfung (Fehlanpassung der Ant)
anzeigen möchte (in dB), dann brauche ich LOG10.
Aber ich bin nun am Ende mit dem ATMega8, ich werde wohl
umsteigen müssen auf ATMega16 oder gar 32.

mfg
Oliver

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.