Mikrosekundengenaue Portansteuerung

Gast #56036
Lesenswert?

Ich versuche mit einem ATMega16 (8MHZ intern)ein Programm zu entwickeln
das einen Port_Pin abhänging von einer Verzögerung ansteuert.Die
Verzögerung ist varriabel zwischen
66µsec und 66*99999µsec.
Ein Interrupt startet den Timer1.
Um die 66µsec zu realisieren habe ich den Timer1 verwendet der bis 528
zählt,er wird durch einen Interrupt gestartetWenn die Verzögerung(66*X)
vergangen ist wird ein Port_Pin 1 gesetzt.
Mein Problem ist:
...das es eben nicht 66 µsec. sind, sondern(im Bespiel)80µsec. und wenn
ich die Timer_Zeit verändere bekomme ich 60-70-90µsec.
Aber keine Zeiten dazwischen:-(
Hat das etwas mit den Portzyklen zu tun?
Auch ein Port benötigt 10µsec für den Wechsel 0-->1.
Bin dankbar für jeden Rat.
Angehängte Dateien:
Gast #56037
Lesenswert?

Hallo,

ich hab mal dein Programm angeschaut. Konnte jedoch nicht
nachvollziehen wie du das mit den Timern machst.
Ich hab mal das Programm ein bischen umgeschrieben. Es funktioniert
folgendermasen: Zuerst werden die PORTs gesetzt (Eingang/Ausgang,
Pllup), dann wird der Compare-Match von Timer 1 gesetzt = Anzahl der
µs. Anschließend wird noch INT1 aktiviert. Nach der globalen
Interruptaktivierung bleibt das Programm in einer Endlosschleife.
Wenn jetzt ein ext. INT1 kommt, dann wird der Timer1 aktiviert:
Vorteiler = 8, bei 8Mhz Takt gibt das 1µs. d.h. jede µs wird der Timer
um eins erhöt. Wenn der Timerwert den Comparewert erreicht, wird der
Timer gelöscht und der Compare-Match Interrupt aufegerufen. Dort wird
dein Ausgang gesetzt.
Das ganze funktioniert bis zu einem Compare-Wert von 65535 das
entspricht 65536µs. Wenn du mehr Zeit brauchst, must du die
Interruptroutine umschreiben.

Gruß, Florian
Angehängte Dateien:
Gast #56038
Lesenswert?

Danke  Florian für das Programm,läuft gut.

..Das mit den Timern hatte ich falsch aus dem großen Programm
abgeschrieben.

Aber das war nicht das eigentliche Problem: Ich war leider zu dümmlich
war das Oszilloskop mit der richtigen Abtastrate zu betrieben, daher
die falschen Delay_zeiten.
Erst denken dann messen!;-)

Danke für deine Zeit,
Gruß Dennis

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