Schneller Zaehler/Timer mit PIC..?

F

Friedel Herrmann

Guest
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
 
Friedel Herrmann wrote:
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)
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.

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
Die kann man sich ja aus den Zählerständen E2..E4 berechnen.

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.
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
 
"Matthias Weißer" <DTMAN@gmx.de> wrote in message
news:bkp53q$462o0$1@ID-76219.news.uni-berlin.de...

Hm. Freilaufender Timer dessen Stände bei E1..E4 jeweils gesichert werden?
E1 könnte auch den Zähler starten, E4 ihn wieder stoppen?

Wie groß sind den die Zeiten zwischen den Ereignissen?
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

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.
Ich hatte er an PIC's gedacht. Mit AVR's kenne ich mich gar nicht aus.
 
On Tue, 23 Sep 2003 11:20:48 +0200, "Friedel Herrmann"
<herrma@t-online.de> wrote:

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.
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



..
 
On Tue, 23 Sep 2003 13:35:30 +0200, Dirk Ruth <d.ruth@expressnet.info>
wrote:


// 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)
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
 
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
 
On Tue, 23 Sep 2003 14:09:36 +0200, "Friedel Herrmann"
<herrma@t-online.de> wrote:

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)
Na das ist ja eine halbe Ewigkeit.

Dazu noch einige Fragen:
Welche Auflösung wäre maximal möglich?
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.


Welchen PIC sollte man nehmen?
Was willst Du sonst noch damit machen?

Hättest Du gegen Bezahlung Interesse an der Realisierung nach Pflichtenheft?
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
 

Welcome to EDABoard.com

Sponsor

Back
Top