mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Input Capture


Autor: Andreas Juhl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab hier schon mal was gepostet, aber irgendwie hats niemanden so recht
gekümmert!

Jetzt hab ich mal das Programm zur fehlersuche Minimiert.

Ich möchte mit einem Atmel ATmega16 mittels des ICP (Input Capture)
Eingangs Eine Lampe Leuchten lassen, sobald das der Impuls kleiner als
1500 ms ist (Hex 05 DC).

Mein Prozessor ist auf 8 Mhz internen Oszilator eingestellt, und der
vorteiler für den Zähler ist 8, also 1 Zähler = 1 ms

Das funktioniert scheinbar auch schon ganz gut, nur wenn ich mit dem
Signal langsam bis auf 950ms runterfahre gibt es eine Stelle
mittendrin, an der das licht wieder erlischt, noch weiter runter geht
es wieder an. Ich glaube auch dass die Schaltschwelle nicht bei genau
1500 liegt sonder etwas darüber. Woran kann der Fehler denn liegen?

Zum testen benutze ich das Signal einer Fernsteuerung für
Modellflugzeuge (Royal EVO 12) in PPM 9 Modus.


Hab ich das überhaupt generell richtig verstanden,

dass ich wenn ich das Signal von aufsteigender zu absteigender Flanke
messen will, erst den Interrupt auf ansteigende Flanke triggern muss,
dann Wert speichern, dann auf absteigende Flanke triggern, und die
differenz aus Aktuellem und gespeichertem wert nehmen muss?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"aber irgendwie hats niemanden so recht gekümmert"

Hier ist doch kein Kümmerkasten !!!

Hier sitzen nur ganz normale Leute, wie Du und ich.

Und wenn einer nichts dazu sagen kann, dann schweigt er eben.

Capture wird wohl nur sehr selten eingesetzt, ich habs auch noch nie
benutzt.


Peter

Autor: Sven Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hat sich keiner gekümmert weil das schon oft hier diskutiert
wurde..

Aber ich will mal nicht so sein..

1. Wie kommst du darauf das ein Zähler 1ms ist? (milli!!) es ist eine
us (gesprochen mükro, 1e-6)
 2. Ja, du musst den trigger umschalten. Bei der berechnung wert2 -
wert1 =zeit müssen alle datentypen als unsigned int definiert sein
(wenn du c nutzt)
3. hast du alle Interrupts wieder passend gesperrt?

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch ein Tip, der die Software übersichtlicher macht:
lege das Signal sowohl an einen Int-Eingang als auch den ICP-Eingang,
damit sparst du dir ganze Umschalterei und Rechnerei.
Der externe Int (nur steigende Flanke) macht nichts weiter, als Timer1
auf 0 zurückzusetzen, beim ICP (fallende Flanke) liest du den
Capture-Wert aus, der ist dann die Impulslänge, bei 8MHz und Vorteiler
8 direkt in µs.
Und noch was: bitte in den diversen Interruptroutinen immer das SREG
sichern! Es gibt kaum eine Ausnahme von dieser Regel.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>cpi TimerAktuellHigh, $05
>brsh AuswertEnde
>cpi TimerAktuellLow, $DC
>brsh AuswertEnde

Ich habe dir schonmal geschrieben das deine Vergleicherei nicht i.o.
ist. "CPC" ist der gesuchte Befehl der dir weiterhilft. Ich versuche
es mal zu erklären:
1. Test ">$05?" ist ja noch ok.
Aber was ist bei <$05?
1. $4FF bis $400 haut alles hin.
2. aber jetzt kommt es: $400-1=$3FF
3. von $3 FF bis $3 DC Licht aus weil >=$DC
und das ganze bei $2FF,$1FF,$0FF nochmal.


MFG Uwe

Autor: Andreas Juhl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke Uwe,

jetzt funktionierts.

Hab ichs endlich doch noch kapiert!



Ich weiss, du hattest das schon mal geschrieben, da hab ichs auch
probiert, und der einschaltpunkt lag immernoch daneben, da hab ich dann
gedacht dass es das auch nicht sein kann.

Naja, der 2.Fehler war dann noch dass das Signal was am Sender
rauskommt um 400ms kürzer ist als gedacht

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sven:
Es heisst entweder mikro oder mü!

Autor: Andreas Juhl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt,

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.