Schneller Zaehler/Timer mit PIC..?

Hallo NG, wie würdet Ihr nachstehendes Problem lösen?

Aufgabenstellung:

Der zeitliche Abstand von Vier aufeinander folgenden Ereignissen soll dokumentiert und berechnet werden.

E1--E2--------------------E3---E4

Auflösung: möglichst hoch (>= 10 MHz)

Für die Auswertung werden folgende Zeiten(Zählerstände) benötigt:

t1: E1 bis E2 t2: E1 bis E3 t3: E2 bis E4 t4: E3 bis E4

Berechnungen nachdem T4 eingetroffen ist:

t2 Result ------- t4 - t1

Das Ergebnis sollte auf einem Display angezeigt werden. Eine Übertragung(RS232) aller Werte zum PC wäre auch gut.

MfG Friedel Herrmann

Reply to
Friedel Herrmann
Loading thread data ...

Hm. Freilaufender Timer dessen Stände bei E1..E4 jeweils gesichert werden? Wie groß sind den die Zeiten zwischen den Ereignissen? Wenn die Zeiten >=1µs sind würde ich das mit dem Timer1 eines AVR's machen. Die Ereignisse werden über den ICP erfasst und die erfassten Zählerstände dann im ICP-INT in temporäre Register gespeichert.

Die kann man sich ja aus den Zählerständen E2..E4 berechnen.

Wenn obige Bedingung ((tEx+1)-(tEx))>=1µs zutrifft würde ich das mit einem ATMega8 bei 16MHz machen. Der sollte das packen. Trifft diese Bedingung nicht zu brauchts halt noch externe Hardware. Also einen 8Bit-Zähler + 3 Register. Das wird dann an den AVR/PIC/8051/... angeschaltet welcher dann die Auswertung übernimmt.

--
Matthias Weißer
matthias@matwei.de
http://www.matwei.de
Reply to
Matthias Weißer

E1 könnte auch den Zähler starten, E4 ihn wieder stoppen?

Theoretisch sind folgende Zeiten zu erwarten: E1-E2 - 0,6 ms E1-E3 - 30-180 ms E2-E4 - 0,6 ms E3-E4 - 3 ms

machen. Die Ereignisse werden

Ich hatte er an PIC's gedacht. Mit AVR's kenne ich mich gar nicht aus.

Reply to
Friedel Herrmann

Typischer Fall für eine Capture-Einheit (Vorraussezung, dass zwischen den einzelnen Ereignissen genügend Zeit zum Abspeichern bleibt).

// für einen PIC

struct PCA_Counter { unsigned int Ovl; // Counter Overflow unsigned char Hi; // High-Byte PCA-Counter unsigned char Lo; // Low-Byte PCA Counter }

union CAP { unsigned long Capture; struct PCA_Counter PcaCntr;

}Capture[4];

unsigned char EdgeCount;=0;

void interrupt isr(void) { ovl = TMR1IF; cap = CCP1IF;

// feststellen, ob erst timer überlauf für capture oder erst capture aufgetreten ist (Problem, wenn beide kurz hintereinander auftreten und der Controller keine priorisierten Interrupts hat

if( ovl && cap) {

// ist der Capture vor dem Timer-Überlauf aufgetreten, dann kann das Capture-High-Register nicht high sein if( CCPR1H == 0) { TMR1IF = ovl = 0; TMR1_Ovl++; } } if( cap) { CCP1IF = cap = 0; Capture[EdgeCount].PcaCntr.Hi = CCPR1H; Capture[EdgeCount].PcaCntr.Lo = CCPR1L; Capture[EdgeCount].PcaCntr.Ovl = TMR1_Ovl; if( ++EdgeCount == 4) { StopPCA(); TMR1_Ovl = 0; CCP1CON = 0; EdgeCount =0; } }

if( ovl) { TMR1IF = ovl = 0; TMR1_Ovl++; }

}

Tschö Dirk

.
Reply to
Dirk Ruth

Käse. Ist erst der Timer übergelaufen (vor demCapture) und dann der Capture aufgelaufen, dann kann das Capture-High-Register noch nicht größer als

0 sein.

Tschö Dirk

Reply to
Dirk Ruth

Hallo Dirk,

ich habe zwar nur wenig Ahnung von der PIC-Programmiererei, aber Dein Vorschlag hört sich gut an. Die kürzeste Zeit ist zwischen E1 und E2 zu erwarten (0,6 ms)

Dazu noch einige Fragen: Welche Auflösung wäre maximal möglich? Welchen PIC sollte man nehmen? Hättest Du gegen Bezahlung Interesse an der Realisierung nach Pflichtenheft?

Gruß Friedel Herrmann

Reply to
Friedel Herrmann

Na das ist ja eine halbe Ewigkeit.

Hängt vom Controller ab, bzw. wie schnell der Timer laufen kann. Microchip gibt eine max. Auflösung von 12,5ns beim PIC16F873 an.

Schneller dürfte dann nur noch mit CPLD/FPGA gehen.

Was willst Du sonst noch damit machen?

Hängt vom Aufwand ab (was ist sonst noch gefordert?) und wie schnell das fertig werden muß (da ich dieses Jahr schon recht viel zu tun habe).

Um den Umfang mal abschätzen zu können, müßte man mal das Pflichtenheft sehen. Eine Schweigepflichterklärung dafür ist natürlich kein Problem, aber das sollten wir per Mail regeln.

Tschö Dirk

Reply to
Dirk Ruth

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.