Forum: Mikrocontroller und Digitale Elektronik Mikrosekundengenaue Portansteuerung


von Dennis (Gast)


Angehängte Dateien:

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.

von Florian Pfanner (Gast)


Angehängte Dateien:

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

von Dennis (Gast)


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

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.