mikrocontroller.net

Forum: Compiler & IDEs Die Zeit eines rechteckigen Signals mit einem Interrupts messen


Autor: John Konj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich hoffe jemand kann mir bei der Lösung meines Problems helfen. Also
worum es geht:
Ich muss mit einem Interrupt ein rechteckiges Signal messen. D.h. ich
muss die Zeit von Rising bis Reising messen was ich auch geschaft habe,
aber wie kann ich mit dem selben Innterrupt die Zeit von Rising bis
Falling messen, dazu muss ich sagen das rechteckige Signal ändert
anderauernd die Periodendauer, das Signal wird nicht negativ es wird nur
1 und 0 und da wo es 1 wird, die Zeit muss ich auch mit dem selben
Interrupt messen das heißt von Rising bis Falling, die Zeit soll man
einfach bei der Flanke Falling ablessen und als Past in einem Hyper
Terminal schreiben werden.

Ich hoffe ich habe mich deutlich ausgedruckt und jemand kann mir helfen,
und es ist dringend.
Schöne größe an jeden.
Hier habe ich das was ich schon selber geschrieben habe:

$regfile = "m8515.dat"
$crystal = 8000000
$baud = 4800


'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii 
iiiiiiii


Config Timer1 = Timer , Prescale = 8

Config Pind.3 = Input

On Int1 Signal_1
Config Int1 = Rising
Enable Int1
Enable Interrupts
Start Timer1
Dim Timeus As Long

Do

Print "Signal_1" ; Timeus

Loop


'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii 
iiiiiiii

Signal_1:
Timeus = Timer1

Timer1 = 0
Return

'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii 
iiiiiiii

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lustig BASCOM im GCC Forum^^.
Man hat Dir doch schon gesagt wie das zu machen ist. Interrupt auf 
Low-level.
Wenn ausgelöst Timer an und Interrupt auf High-Flanke. Usw.
Den Code suchste selber oder in nem BASCOM Forum.

Außerdem reicht es einen Post aufzumachen und nicht 2 im Elektronik 
Forum und 1 hier. Nenene.

Moin

Autor: John Konj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich weis aber mit zwei anfragen kriegt man mehr antworten ;-)=

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich ein Assembler Freak bin, kann ich es Dir in Deinem Code 
nicht zeigen, aber zumindest eine Anleitung zur Logik geben:

Programmstart:
Stell den Interrupt auf rising + falling, er soll in beiden Fällen 
auslösen
Schalte den Timer / Zähler zunächst aus und setze ihn auf 0.

Signal_1:
Die Interrupt routine soll gleich zu beginn erkennen ob es sich um ein 
HIGH oder LOW am Eingang handelt und zu zwei Unterroutinen springen:

Unterroutine_1a:
Beim HIGH wird der Timer Zähler genullt und gestartet.

Unterroutine_2:
Bei einem LOW wird der Timer Zähler ausgelesen und versendet (das ist 
die rising2falling zeit) und weiter nichts unternommen.

Unterroutine_1b:
Beim beim nächsten HIGH wird der Timer Zähler ausgelesen und versendet 
(das ist die rising2rising zeit) und der Zähler für die nächste Messung 
genullt.

Unterroutine 1a und 1b kann die gleiche Routine sein. Du musst also 
keine Abfrage machen, ob es das erste HIGH oder zweite HIGH (oder ein 
weiteres) war. Vermische einfach alle Funktionen von 1a und 1b zusammen, 
also:

Unterroutine_1:
1)sende aktuellen Wert zum Hyperterminal
2)setze Timer / Zähler auf 0
3)starte Timer / Zähler

Damit wirst Du zwar beim ersten HIGH auch Daten zum Hyper Terminal 
schicken und und beim zweiten HIGH den bereits gestarteten Timer nochmal 
starten, aber der erste gesendete Wert kann im Hyperterminal ignoriert 
werden bzw ist sowieso eine "0", weil er beim Programmstart genullt 
wurde.

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.