mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mikrosekundengenaue Portansteuerung


Autor: Dennis (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Florian Pfanner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.