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
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.
@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.
Wie sieht denn die Impulsform an Pin8 (T3) aus. 41 kHz symetrischer Rechteck mit entsprechendem Logikpegel?
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.
@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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.