Forum: Mikrocontroller und Digitale Elektronik Rechteckpulse glätten/modulieren vor Eingang in einen Arduino


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christian S. (tjaden82)


Bewertung
0 lesenswert
nicht lesenswert
Wunderschönen guten Morgen,

ich greife aus einer bestehenden Schaltung auf einer Leitung folges ab:

Eine Rechteckspannung 200kHz mit einer Tal-Spitze von 0 -> 4,5V.
Davon hab ich 20 Amplituden, dann kommt eine lange Pause.
Das Spiel wiederholt sich ca.3x die Sekunde...
1
       1 2 3 4 5 6 7 8 9     20
2
...____#_#_#_#_#_#_#_#_#_...._#_____...

Nun möchte ich gern nach der fallenden 20. Flanke, also am Ende des 
Blockes eine Messung durchführen (an einem anderen Pin)...
Nun hatte ich versucht mit einem Arduino das Ende der 20. fallenden 
Flanke zu ermitteln, aber ich würde sagen dass das der Arduino nicht 
schafft.

Grob wie ich rangegangen bin:
(Arduino Mega 2560, Interrupt auf Pin 2, absteigender Counter für die 20 
Flanken,  Berechnung mit micros() um sicherzustellen, dass ich da im 
Block bin)

----

Nun war meine Idee das Signal irgendwie zu modulieren (umganssprachlich 
das Signal glätten), um nur einmal die fallende Flanke zu ermitteln und 
die vorher versuchten Berechnungen an welcher Stelle ich bin entfallen 
zu lassen.
Alternativ auch einfach die erste Steigende Flanke, da die 20er-Länge ja 
fest ist.
1
          1 2 3 4 5 6 7 8 9     20
2
Vorher:  _#_#_#_#_#_#_#_#_#_...._#_______
3
Nachher: _########################_______

Da ich kein Elektrotechniker bin, weiß ich nicht, wie ich das 
realisieren kann bzw. nach was ich suche.


Mit freundlichen Grüßen
Christian

von Nick M. (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Christian S. (tjaden82)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank,
das scheint genau das zu sein was ich brauche.

Jetzt brauch ich also einen nicht Nachtriggerbaren Monoflop den ich 
mithilfe von einem Widerstand und einen Kondensator auf 100µs einstelle.

Richtig?

Kennt jemand einen den ich dafür verwenden könnte?
bzw. Wo schaut man wenn man so ein Bauteil braucht?

Mit freundlichen Grüßen
Christian

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
Christian S. schrieb:
> Wunderschönen guten Morgen,
>
> ich greife aus einer bestehenden Schaltung auf einer Leitung folges ab:
>
> Eine Rechteckspannung 200kHz mit einer Tal-Spitze von 0 -> 4,5V.
> Davon hab ich 20 Amplituden, dann kommt eine lange Pause.

20 Pulse, nennt sich Burst.

> Das Spiel wiederholt sich ca.3x die Sekunde...
>        1 2 3 4 5 6 7 8 9     20
> ...____#_#_#_#_#_#_#_#_#_...._#_____...
>
> Nun möchte ich gern nach der fallenden 20. Flanke, also am Ende des
> Blockes eine Messung durchführen (an einem anderen Pin)...
> Nun hatte ich versucht mit einem Arduino das Ende der 20. fallenden
> Flanke zu ermitteln, aber ich würde sagen dass das der Arduino nicht
> schafft.

Deine Programmierung schafft es nicht, der Arduino schon.

> Grob wie ich rangegangen bin:
> (Arduino Mega 2560, Interrupt auf Pin 2, absteigender Counter für die 20
> Flanken,  Berechnung mit micros() um sicherzustellen, dass ich da im
> Block bin)

Spar dir die die Lyrik, zeige originalen Quelltext.

> Nun war meine Idee das Signal irgendwie zu modulieren (umganssprachlich
> das Signal glätten),

Unfug. Modulieren und Glätten sind vollkommen verschiedene Dinge.

> Da ich kein Elektrotechniker bin, weiß ich nicht, wie ich das
> realisieren kann bzw. nach was ich suche.

Das kommt der Sache schon näher.
Man kann das über einen externen Interrupt machen, der auf die fallende 
Flanke eingestellt ist. Dazu noch ein Timer für das Timeout und bissel 
Logik.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
Christian S. schrieb:
> Vielen Dank,
> das scheint genau das zu sein was ich brauche.
>
> Jetzt brauch ich also einen nicht Nachtriggerbaren Monoflop den ich
> mithilfe von einem Widerstand und einen Kondensator auf 100µs einstelle.

Das allein reicht nicht. Denn du willst ja relativ genau an der letzten 
Flanke irgendwas messen. Das kann das Monoflop nicht allein, da braucht 
es mehr Logik.

> Kennt jemand einen den ich dafür verwenden könnte?
> bzw. Wo schaut man wenn man so ein Bauteil braucht?

Es reicht nicht. Wenn du schon einen Arduino hast, kannst du das mit dem 
machen, wenn gleich das sicher nicht so ganz so einfach ist wie eine LED 
blinken lassen.

von Peter D. (peda)


Bewertung
2 lesenswert
nicht lesenswert
Du kannst einen Timer extern takten und dann einfach auf -20 vorladen. 
Dann erfolgt nach 20 Takten ein Overflow-Interrupt.

Christian S. schrieb:
> Das Spiel wiederholt sich ca.3x die Sekunde...

Also >300ms Pause.
Das kannst Du mit einem weiteren Timer feststellen. Wenn z.B. nach 100ms 
keine Flanke erfolgt (Pin-Change Flag), dann ist das ne Pause, d.h. den 
Zähltimer auf -20 setzen.

von Nick M. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Falk B. schrieb:
> Das allein reicht nicht. Denn du willst ja relativ genau an der letzten
> Flanke irgendwas messen. Das kann das Monoflop nicht allein, da braucht
> es mehr Logik.

Ich hab den Eindruck, dass es nicht so genau sein muss und es genug ist, 
nahe der ersten Flanke nach der langen Pause zu lesen.

> Es reicht nicht. Wenn du schon einen Arduino hast, kannst du das mit dem
> machen, wenn gleich das sicher nicht so ganz so einfach ist wie eine LED
> blinken lassen.

K.A. ob der Ardiino schnell genug ist. Desshalb hab ich die 
Hardware-Lösung vorgeschlagen. Schadet ja auch nichts, wenn ein Anfänger 
beide Wege kennt.

von Nick M. (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Christian S. schrieb:
> Kennt jemand einen den ich dafür verwenden könnte?

Steht doch im Wiki drinnen. Nimm irgendwas aus der 40xx-Serie oder der 
74xx-Serie.
Ich kenn nicht mal die Versorgungsspannung vom Aruino. 74xx geht nur mit 
5 Volt.

Ich bin absichtlich etwas dürftig mit meinen Antworten, weil ich dich 
dazu bringen will, selbst zu recherhieren.
Vorkauen will dir hier kaum jemand was. Spezifische Fragen werden aber 
gerne gegeben.

von Christian S. (tjaden82)


Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> 20 Pulse, nennt sich Burst.
Danke, wieder was gelernt


Falk B. schrieb:
> Deine Programmierung schafft es nicht, der Arduino schon.
Dem widerspreche ich nicht.


Falk B. schrieb:
> Unfug. Modulieren und Glätten sind vollkommen verschiedene Ding
gut, da mir der Fachbegriff fehlt, habe ich versucht was verständliches 
darzulegen


Falk B. schrieb:
>Das allein reicht nicht. Denn du willst ja relativ genau an der letzten
>Flanke irgendwas messen. Das kann das Monoflop nicht allein, da braucht
>es mehr Logik.
Meine Idee war es nun, an der steigenden Flanke einen Timer für den 
Moment der fallenden Flanke zu setzen.
Den Monoflop wollte ich nutzen um nicht in 20 Interrupt behandlungen zu 
laufen, die ich nicht benötige.


Peter D. schrieb:
>Du kannst einen Timer extern takten und dann einfach auf -20 vorladen.
>Dann erfolgt nach 20 Takten ein Overflow-Interrupt.
>...
> Also >300ms Pause.
> Das kannst Du mit einem weiteren Timer feststellen. Wenn z.B. nach 100ms
> keine Flanke erfolgt (Pin-Change Flag), dann ist das ne Pause, d.h. den
> Zähltimer auf -20 setzen.
Ok, das hört sich ganz interessant an, das werde ich mir mal anschauen.


Nick M. schrieb:
> Ich bin absichtlich etwas dürftig mit meinen Antworten, weil ich dich
> dazu bringen will, selbst zu recherhieren.
> Vorkauen will dir hier kaum jemand was. Spezifische Fragen werden aber
> gerne gegeben.
Ich hab schon mehr Infos und anregungen bekommen als ich erwartet hatte!



Danke schonmal an alle Beteiligten!
Ich hab auf jedenfall erstmal Futter für die nächsten Tage


LG Christian

von c-hater (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Christian S. schrieb:

> Eine Rechteckspannung 200kHz mit einer Tal-Spitze von 0 -> 4,5V.
> Davon hab ich 20 Amplituden, dann kommt eine lange Pause.
> Das Spiel wiederholt sich ca.3x die Sekunde...
>
>
1
>        1 2 3 4 5 6 7 8 9     20
2
> ...____#_#_#_#_#_#_#_#_#_...._#_____...
3
>
>
> Nun möchte ich gern nach der fallenden 20. Flanke, also am Ende des
> Blockes eine Messung durchführen (an einem anderen Pin)...
> Nun hatte ich versucht mit einem Arduino das Ende der 20. fallenden
> Flanke zu ermitteln, aber ich würde sagen dass das der Arduino nicht
> schafft.
>
> Grob wie ich rangegangen bin:
> (Arduino Mega 2560

Also, der Controller selber wäre mit dieser Aufgabe keinesfalls 
überfordert, nichtmal näherungsweise (wird ja vermutlich mit 16MHz 
betrieben).

Alles, was Scheiße ist, ist dein Programm. Und es ist deswegen Scheiße, 
weil es auf dem Arduino-Software-Framework basiert, denn das ist bereits 
Scheiße.

Also: weg von Arduino, das ist ein Irrweg. Die Hardware kannst du 
immerhin weiter verwenden. Du mußt nur lernen, wirklich selber zu 
programmieren...

von Christian S. (tjaden82)


Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Also, der Controller selber wäre mit dieser Aufgabe keinesfalls
> überfordert, nichtmal näherungsweise (wird ja vermutlich mit 16MHz
> betrieben).
Ja deswegen war ich etwas überrascht, aber natürlich in meiner Umsetzung 
schon...
Vielleicht gibt es auch noch andere Probleme, die sich später noch 
zeigen werden.

> Alles, was Scheiße ist, ist dein Programm. Und es ist deswegen Scheiße,
> weil es auf dem Arduino-Software-Framework basiert, denn das ist bereits
> Scheiße.
>
> Also: weg von Arduino, das ist ein Irrweg. Die Hardware kannst du
> immerhin weiter verwenden. Du mußt nur lernen, wirklich selber zu
> programmieren...

Ja, da mag ich dir zustimmen, aber irgendwo muss man anfangen und auch 
da hilft das Framework immerhin einen einfachen Einstieg zu bekommen.

Programmieren ist ja nur eines der Kompetenzen die man benötigt um die 
Sachen umzusetzen...
Und auch Programmieren teilt sich in viele Bereiche, es mag Leute geben 
die gut programmieren können und trotzdem nicht in der Lage sind auf 
Anhieb einen Mikrocontroller zu programmieren.

Bis vorhin hab ich nicht gewusst, dass die Timer/Counter unabhängig 
sind.

Gut, aber was empfiehlst du den um vom Arduino-Software-Framework 
wegzukommen?
Und was verstehst du darunter überhaupt?
Ich benutze jetzt nicht die IDE sondern nutze CLion, aber im im 
Hintergrund nutz ich ja trotzdem das Arduino-Framework.



Nun, ich lese mal weiter die Doku um mein Unterfangen mit den 
Registern/Timer/Counter umzusetzen.

Und später versuch ich mal die Hardwarelösung, obwohl die wohl obsolet 
ist, wie es mir scheint.

LG Christian

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]
  • [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.

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