Guten morgen,
Arbeite gerade seit einigen Stunden an einer Frequenzmessung mit dem
AT89C2051 herum, Messfrequenz von 20 bis 400Hz mit einer Auflösung von
0.1Hz. Eingang: Externer Interrupt EX0 @ P3.2
der EX0 Aktiviert mit den Timer1 und lässt ihn hochzählen bis zum 2.ten
Puls der den T1 dann wieder Deaktiviert. Damit die Software diesen wert
dann zu passender zeit mal wieder abholen kann.
Krieg schöne Rechtecke daher aber ab ca. 45Hz flattert mir die Anzeige
davon. Auch die Ausgabe des eigentlichen Eingangssignals auf einem
Sepatatem Ausgang is alles andere als schön, am Oszi sieht man schön
wie die "Antwort" des externen Interrupts hin und her schwankt.
Ideen? Sources? Plan? bei mir herrscht nur noch Blanke verzweiflung,
naja so schlimm is ned aber viel fehlt nimma.
lg Jan
Weiss ich noch nicht,
der AT89C2051 nimmt die Interrupts nicht immer sofort an, vl arbeitet
er im Hintergrund an einem Anderen Interrupt, tatsache ist das 2
verschiedene Interrupts permanent angesprochen werden, 1. der Interrupt
des 1ms Timers ( T0 ), 2.tens der Externe Interrupt der eigentlich ERST
freigegeben wird wenn Timer0 Gerade fertig geworden ist damit keine
Collisions entstehen. Zumindest so das konzept, aber der Ritt auf
Interrupts is wie der Ritt auf einer 10m Welle, wenn man ganz rauf will
fällt man auch schnell mal ganz runter.
Wie ich sehe benutzt du den Timer Mode 3 falls ich das richtig
geschnallt habe, 2 counter und eine Timebase.
Ich versteh noch nicht ganz wie du "Pulsweiten" mit dem ding messen
kannst, oder misst du da nur die Pulse pro zeiteinheit?
auf jeden fall is es ein Rettungsring an dem man sich mal anklammern
kann, danke =)
lg Jan
Das programm is ned hilfreich das du auf halben Amplitudenmessung übers
Gate fährst. dh.: du gehst von einer 1:1er Puls Pausen verhältnis aus.
Das is bei mir ned der fall.
@Jankey,
wen meinst Du ?
Mein Programm mißt nur die Frequenz, keine Impulsdauer.
Das Tastverhältnis ist also völlig egal.
Es erfolgt immer eine Messung über volle Periodendauern von einer
0-1-Flanke bis zur nächsten 0-1-Flanke nach etwa 0,5s.
Dadurch ergibt sich unabhängig von der Frequenz eine gleichbleibend
hohe Auflösung.
Peter
wie geht das? du gehts ja beim T0 eingang für HF und beim T1 Eingang für
NF, wie kannst du über einen T timer Eingang Perioden messen ohne
Interrupt noch dazu +nedversteh+
"wie geht das?"
ganz einfach.
Schau Dir mal diese Sequenz an:
1
i=TL0;
2
while(i==TL0)
3
...
Wenn die nächste Flanke kommt, zählt er eins weiter und damit ist der
Timer ungleich dem vorherigen Wert und die Schleife wird verlassen.
Mein Programm mißt auch ständig weiter, d.h. es wird immer die
Differenz von der jetzigen zur vorherigen Auslesung gebildet.
Das hat den Vorteil, daß man bei 1Hz auch alle 1s eine neue Ablesung
erhält.
Wenn man den Timer stoppen und wieder starten würde, muß man immer noch
eine Flanke warten und würde bei 1Hz nur alle 2s einen neuen Wert
erhalten.
Das Auslesen der Timer im freien Lauf ist natürlich etwas tricky, da ja
genau dabei ein Übertrag kommen kann. Deshalb die nachfolgenden
Überlauftests und Korrekturen.
Den Bereichstest und Umschaltung kannst Du ja weglassen, ist erst ab
über 10MHz nötig.
Ein anderer Prozessor wird Dir nichts nützen.
Höchstens ein LPC2xxx von Philips (ARM7), da der 32Bit ist und auch
32Bit-Timer hat, dann entfallen die Übertragseffekte.
Peter
mhm, dh.: der Timer wird mit dem Gate aktiviert, klingt nach einer
Coolen Polling methode, hoffe es geht sich mit all meiner
Anzeigekramerei aus. Werd das mal probieren
so umgebaut, programmiert, das kann ned funktionieren, das Ding erkennt
zwar flanke, aber bei nächsten Zyklus is das Gate noch immer high und
wird wieder durchlaufen nur halt mit sehr sehr kleinem Zahlenwert, hast
du das ding denn auch Mechanisch aufgebaut und es funktioniert?
Da ist nichts mit nem Gate drin, beide Zähler laufen ständig durch, der
Zähler der Zeitbasis (interner Quarz) und der Zähler des
Eingangssignals.
Das Auslesen wird nach der gewählten Updatezeit auf die nächste Flanke
des Eingangssignals synchronisiert, damit man immer volle Perioden
hat.
Sonst würde man ja erhebliche Ungenauigkeiten bekommen.
Klar sind alle meine Beispiele funktionsfähig und ausprobiert.
Peter