Forum: Mikrocontroller und Digitale Elektronik Counter3 beim mega128 auslesen


von Norbert (Gast)


Lesenswert?

Ich habe Probleme die Counter3-Register TCNT3L und TCNT3H auszulesen.

Die Hardware: T3 wird mit einem ext. Clock bedient.
Dieser Clock ist ein Pulspaket vom 1sek. Dauer. Innerhalb dieser Sekunde 
werden 41000 Pulse aufgeschaltet. Diese Pulseanzahl ist immer konstant 
und wurde mit einem Digitalzähler kontolliert.

Nach Ablauf einer Sekunde ist das Pulspaket zu Ende und ich kann
das Zählregister auslesen, also:

a=TCNT3L;
b=TCNT3H;

Beim Auslesen treten merkwürdige Erscheinungen auf:
Nach dem Auslesen von TCNT3L wird TCNT3H gelöscht, oder,
die aufgezählten Impulse schwanken von 35000 bis 45000.

Diese Fehler treten sowohl im Testbetrieb mit Breakpoints und
JTAG-Emulator auf, als auch im Stand-alone-Betrieb.

Initialisiert wird mit:

TCCR3B=0x06;   // Ext.Clock, neg.Flanke

Alle anderen Controls sind 0x00.

Habt ihr eine Idee, oder hab' ich nur mal wieder im Datenblatt was 
übersehen?

Danke für eure Hilfe   Norbert

von mikki merten (Gast)


Lesenswert?

Hast Du auch die richtige Reihenfolge berücksichtigt und das evtl. 
erforderliche sperren der Interrupts.
Beim 16 Bit Zugiff auf die Timer-Register:
schreiben = immer High Byte zuerst
lesen     = immer Low  Byte zuerst
Außerdem darf die maximale externe Taktfrequenz max.
CPUclk/2 betragen.

von Norbert (Gast)


Lesenswert?

@mikki:
die Reihenfolge bei lesen ist oben zu sehen: L-Byte zuerst.

Der CPU-Clock ist 10MHz.

Der Counterclock ist 41kHz.

Es ist ein ext. Interrupt freigegeben. Aber der wird von der
ext. Hardware nicht ausgelöst.
Nach einem Programmstart habe ich auf Adresse 0x0000 einen Breakpoint 
gelegt, aber da verirrt sich auch kein anderer Interrupt hin.

von mikki merten (Gast)


Lesenswert?

Wie sieht denn die Impulsform an Pin8 (T3) aus. 41 kHz symetrischer 
Rechteck mit entsprechendem Logikpegel?

von Norbert (Gast)


Lesenswert?

Ist ein jungfräuliches Rechtecksignal, kommt aus'm 'HC393er

Tastgrad: 1:1
Risingtime: 5nSek.
Fallingtime: 10nSek.
voller Logikpegel: 0 - 5V

keine Spices, kein Jitter, keine Reflexionen,

ich sagte ja, ein externer Frequenzzähler zählt 41000 Pulse,
keinen mehr und keinen weniger.

von mikki merten (Gast)


Lesenswert?

@norbert
war ja auch eher eine retorische Frage. Hätte ja auch sein können das 
41.000 Impulse mit TPh bzw. TPL < 100 ns anliegen. Die Initialisierung 
des Timers als auch der Lesezugriff sind ok. Die Fehlerquellen die ich 
noch vermute:
a) die Register TCNT3L und TCNT3H werden ungewollt überschrieben. Diese 
liegen ja im extended I/O-Bereich wo bei den normalen AVRs bis MEGA32 
bereits normales SRAM vorhanden ist.
b) Interrupt Kollisionen. Ich meinte ja nicht nur externe Interrupts 
sondern auch die anderen Timer.

von Norbert (Gast)


Lesenswert?

mikki, ich hab's gefunden...durch meine Schuld...,

das Einlesen der Pulspakete geschiet nicht synchron mit der
Torzeit von 1sec.

Bitte entschuldige, daß ich Deine Zeit gestohlen habe.
Naja, vieleicht kann ich Dir auch mal helfen, z.B. wie man
log. Programmfehler vermeidet ;-)

Schönen Gruß     Norbert

von mikki merten (Gast)


Lesenswert?

@norbert
Ist doch ok wenn der Fehler am Ende gefunden wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.