For-Schleife ärgert mich ...

OP Persönliche Seite #239053
Lesenswert?

Hallo zusammen,

mich ärgert hier gerade eine For-Schleife ... Eigentlich dachte ich,
ich wüsste inzwischen, wie man damit umgeht, aber offenbar doch nicht.


Also, mein Programm sieht im Prinzip folgendermaßen aus:
1
PORTC &= (1<<PC0);  // Initialisierung (am Programmstart)
2

3
unsigned int i;
4

5
for(i = 0; i < 8192; i++)
6
{
7
    PORTC |= (1<<PCO);
8

9
    if(i == 0)
10
         [.. mach was ..]
11
    if(i == 2048)
12
         [.. mach was anderes ..]
13

14
    PORTC &= ~(1<<PC0);
15
}

(Im Anhang das vollständige Programm, die For-Schleife findet sich in
der Routine DirectReadout.)

Eigentlich müsste man doch davon ausgehen können, dass die Routine
exakt 8192-mal ausgeführt wird, oder ? Hänge ich aber einen
Frequenzzähler an PC0, kann ich genau 8191 positive Flanken messen -
also eine weniger !

Bin langsam echt am Durchdrehen hier ...

Grüße, Mario
Angehängte Dateien:
Gast #239054
Lesenswert?

mach mal vor die for-schleife ein

PORTC &= ~(1<<PC0);

es könnte ja sein, das das Bit PC0 schon gesetzt ist => dadurch KEINE
Flanke => 8191

oder lass den Frequenzzähler auf neg.Flanke

die for schleife muß 8192 mal durchlaufen werden (außer du springs aus
der schleife raus)

Gruss
Gast #239058
Lesenswert?

Prüfe mal, ob der Pin am Eingang deiner for-Schleife schon auf 1 liegt,
evtl. im Programablauf. Oder, vor der Schleife löschen, damit definitiv
der erste Durchlauf einen Takt erzeugt.

MW
OP Persönliche Seite #239059
Lesenswert?

Hallo zusammen,

ihr kommt im Leben nicht drauf, was der Fehler war !

Es handelt sich um einen BUG IN DER SOFTWARE DES FREQUENZZÄHLERS !!
Wenn man ihn auf Impulsmessung schaltet und zurücksetzt, dann
verschluckt er den ersten eintreffenden Impuls ...

Ich habe jetzt mal meine For-Schleife zwei Durchläufe machen lassen,
nach dem ersten hatte ich 8191 im Display, nach dem zweiten 16383 (=
8191 + 8192). Den endgültigen Beweis hat mir dann das Oszi geliefert,
ich hab die Schleife auf 5 runtergeschraubt und hatte bei jedem
Durchlauf 5 wunderschöne Impulse auf dem Schirm, auf dem Zähler aber
erst den Wert 4, dann den Wert 9, 14, 19 ...

Grüße und Danke nochmals für Eure Tips und Hilfen,

Mario

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