Forum: Mikrocontroller und Digitale Elektronik PIC 18f4550. Amplitudenmessung


von Abc E. (xeinettel)


Lesenswert?

Hallo!! Ich hätte eine Frage: Könnte mir jemand erklären wie ich eine 
Amplitudenmessung mit dem PIC 18f4550 realisieren kann. mfg

von Εrnst B. (ernst)


Lesenswert?

Mit dem ADC.

Wie genau hängt von deinem zu messenden Signal ab:

Wenns recht langsam ist: Komplett digitalisieren, die Amplitude in 
Software berechnen
Wenns zu schnell dafür ist: Vorher die Amplitude mit entsprechender 
Analogschaltung "gleichrichten", und dann an den ADC. Im einfachsten 
Fall reicht dafür eine Diode und ein Kondensator.

Wenn du noch ein paar Details rausrückst, kann man dir wahrscheinlich 
besser helfen.

von Abc E. (xeinettel)


Lesenswert?

Ich bekomme von einem Gleichrichter ein Signal. Bei diesem Signal muss 
ich die Amplitude und die Frequenz messen. Die Amplitude muss gemessen 
werden damit ich einen Verstärker einstellen kann. (output_low(pin_b0), 
output_high(pin_b1) und output_low(pin_b2)).

Danke für die rasche Antwort.

von Εrnst B. (ernst)


Lesenswert?

Das ist etwas konfus...

Beschreib doch mal dein Signal genauer... Frequenz: 50Hz? Audio? 1MHz? 
50MHz?
Und die Pegel: 10mV pp, 100mV? 10V?

Die Frequenzmessung ist mit dem PIC relativ einfach, da der ohne externe 
Vorteiler etc, direkt 50MHz als externen Trigger für seinen Counter 
verträgt.
Allerdings ist die Gleichrichtung zum Frequenzmessen eher 
Kontraproduktiv.

und du brauchst jetzt zusätzlich zum Frequenzzähler noch einen weiteren 
Verstärker, den du softwaremäßig ansteuern willst um das Eingangssignal 
auf eine definierte Amplitude zu bringen?
=> das geht mit einer rein analogen Lösung einfacher und besser.

Oder reicht es evtl nur die Frequenz beizubehalten, und am Ausgang ein 
schönes TTL Signal zu bekommen?

Und was meinst du mit output_low(pin_b0) ?


Ach ja, und die Antworten in deinem Zweit-Thread nicht übersehen, da 
sind auch hilfreiche dabei:
Beitrag "Amplitudenmessung pic 18f4550"

von Gast (Gast)


Lesenswert?

Stichwort: Spitzenwertgleichrichter

z.B. sowas...
http://www.loetstelle.net/grundlagen/operationsverstaerker/opamp_5.php

von Abc E. (xeinettel)


Lesenswert?

Ich bekomme ein gleichgerichtetes Signal. Von diesem Signal muss ich die
Amplitude messen und vergleichen. Wenn sie zu klein ist muss ich am
pin_b0 ein "high" ausgeben wenn sie noch immer zu klein ist dann am
pin_b1, sollte die Ampl. noch immer zu klein sein dann am pin_b3.

Könnten Sie mir eventuell ein Codebeispiel geben!!

mfg

von Master S. (snowman)


Lesenswert?

@Ernst: ich glaube er will deine frage nicht verstehen ;) also: don't 
feed... auch könnte es sein, dass er die hausaufgabe zu wenig genau 
durchlesen möchte: fragt nach dem code ohne die spezifikation der 
ausgangslage nennen zu wollen. tzz tzz :(

von Schoaschi (Gast)


Lesenswert?

Hi

Nichts für ungut.... aber wenn du konkrette Hilfe brauchst, dann stell 
auch konkrette fragestellungen und stell dein Projekt etwas genauer vor.

Aber wenn ich das richtig verstanden habe, dann würd ich auf die ganze 
AD-Geschichte verzichen und einfach das Signal entkoppeln, glätten und 
mit deinem anderen Signal mittels Comperator vergleichen.

So und wenn du jetzt keine Ahnung hast wovon ich rede, dann weisst du 
wie deine angabe rüber kommt ;-).

Genauere Details gibts erst dann wenns von dir details gibt. Wenns 
Confidential sein sollte, was ich eher bezweifle solltest du sowieso 
nicht ins Forum ;-)

mfg Schoasch

von xeinettel (Gast)


Lesenswert?

Sorry. Aber genauere Details weis ich erst am Montag. Trotzdem danke für 
eure Antworten. mfg

von Abc E. (xeinettel)


Lesenswert?

So. Ich bekomme ein analoges Signal. Dieses Signal muss ich A-D wandeln. 
Wie stelle ich den ad wandler ein, dass er mir das Eingangssignal vom 
Pib_b5 ad wandelt. Danach muss ich den Pegel(gleich wie Amplitude) 
zwischen 0- 2,5V oder mehr messen und je nachdem muss ich dann mit 
einigen if schleifen und ouput befehlen an den pins b0-b2 high oder low 
ausgeben.

Vielen Dank im Voraus.

mfg

von Daniel P. (ppowers)


Lesenswert?

Also:
Erstens gibt es keine "if-Schleifen" und zweitens hat der PIC18F4550 an 
Pin B5 keinen A/D-Wandler-Eingang. (Siehe Datenblatt)
Wie hoch ist die Frequenz des Audiosignals, bzw. wie hoch ist die 
geforderte Abtastrate? Ich weiß jetzt nicht aus dem Stegreif, wie hoch 
die maximal mögliche Abtastrate mit dem PIC18F4550 ist (hängt ja auch 
von Deiner Taktrate ab), aber für ein Audiosignal dürfte es etwas mau 
sein...

gruß
daniel

von Abc E. (xeinettel)


Lesenswert?

Ich meine natürlich if-Anweisung. Geht am Port A5 auch. Die Frequenz 
beträgt max. 2,5kHz. Die Abtastrate soll sinnvoll gewählt werden.

mfg

von Εrnst B. (ernst)


Lesenswert?

Erstmal: Pin RB5 geht garnicht, dieser Pin ist nicht an den A/D-Wandler 
angeschlossen. Ich nehm stattdessen Pin RA0 (==AN0).

Dann etwa so:
1
#include <adc.h>
2
3
// ... dann in main, zum ADC-Initialisieren:
4
void main() {
5
// Channel 0, Andere Parameter nach Bedarf
6
adc_open(ADC_CHN_1, ADC_FOSC_xx, ...);
7
8
// Grosse Schleife:
9
while (1) {
10
// Messung starten:
11
adc_conv();
12
// Warten bis fertig:
13
while (adc_busy());
14
// Auslesen:
15
ergebnis=adc_read();
16
17
// Hier natürlich DEINE Wunschwerte eintragen...
18
if (ergebnis>123) 
19
  LATBbits.LATB0=1;
20
else 
21
  LATBbits.LATB0=0;
22
23
if (ergebnis>223) 
24
  LATBbits.LATB1=1;
25
else 
26
  LATBbits.LATB1=0;
27
28
// Ende while(1)
29
}
30
}

von Abc E. (xeinettel)


Lesenswert?

Danke erstmal. adc_conv nimmt mein compiler nicht. Ich verwende den 
CCS-C Compiler.

mfg

von Εrnst B. (ernst)


Lesenswert?

Daniel P. wrote:
> Ich weiß jetzt nicht aus dem Stegreif, wie hoch
> die maximal mögliche Abtastrate mit dem PIC18F4550 ist (hängt ja auch
> von Deiner Taktrate ab), aber für ein Audiosignal dürfte es etwas mau
> sein...

Die sollte für Audio noch reichen, wenn ich mich grad nicht verrechnet 
habe, könnte dieser PIC bei 48MHz Clock noch 62500 Samples/sec bei 10Bit 
Auflösung hinkriegen.

von Abc E. (xeinettel)


Lesenswert?

Jetzt habe ich den digitalen Wert. Wie kann ich jetzt den Pegel messen??

von Εrnst B. (ernst)


Lesenswert?

Elias Einetter wrote:
> Jetzt habe ich den digitalen Wert. Wie kann ich jetzt den Pegel messen??

Wenn du die guten Ratschläge weiter oben beachtet hast, 
(->Spitzenwertgleichrichter) entspricht dein digitaler Wert bereits dem 
Pegel.

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.