PIC 18f4550. Amplitudenmessung

#800457
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.
OP #800607
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.
#800634
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"
OP #802327
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
Gast #803862
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
OP #807313
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
#807350
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
#807376
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
}
#807391
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren