mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Blink Signal einer LED mit Ardunio (PWM) auslesen/auswerten


Autor: Ramon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich benötige für meine Projektarbeit ein Programm womit man ein PWM 
Signal bzw. verschiedene Blinktakte auswerten kann.
Es handelt sich um 2 LED's.
Es gibt 3 verschiedene Zustände die ausgewertet werden sollen:
1. LED1 aus / LED2 blinkt alle 5 sekunden,
2. LED1 blinkt / LED2 leuchtet dauerhaft,
der oder die letzten Zustände bestehen aus verschiedenen 
Sequenzen(blinken):
3.1. LED2, LED1, LED1, LED1;
3.2. LED2, LED1, LED2, LED1;
3.3. LED2, LED2, LED1, LED1;

Als Anfänger in Ardunio fällt es mir leider schwer alles direkt zu 
verstehen :( . Was ich bisher gefunden habe ist:

The pulseIn Function
byte PWM_PIN = 3;

int pwm_value;

void setup() {
  pinMode(PWM_PIN, INPUT);
  Serial.begin(115200);
}

void loop() {
  pwm_value = pulseIn(PWM_PIN, HIGH);
  Serial.println(pwm_value);
}

Bitte um Hilfe :)
MFG

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für ein Anfangsprojekt würde ich Dir empfehlen, mit etwas einfacherem 
anzufangen.

Denn wenn du das sauber umsetzen willst, musst du dich mit vielen 
schwierigen Themen gleichzeitig auseinander setzen. Zum Beispiel 
Multitasking, was diese pulseIn() Funktion leider nicht kann.

Falls du es unbedingt machen willst, würde ich Dir empfehlen den Zustand 
der LED's in (z.B.) 100ms Intervallen in einem Timer-Interrupt 
abzufragen.


> 3.1. LED2, LED1, LED1, LED1;

Das musst du genauer beschreiben. bedeutet es a: Sofort nachdem LED1 aus 
geht, geht LED2 für die dreifache zeit an:
       _
LED1 _| |_____________
         ______
LED2 ___|      |______

oder b: Nachdem LED1 aus gegangen ist, geht LED2 etwas später für die 
dreifache zeit an:
       _
LED1 _| |______________
           ______
LED2 _____|      |______

oder c: Nachdem LED1 einmal kurz an war, geht LED2 dreimal kurz an:
       _
LED1 _| |________________
           _   _   _
LED2 _____| |_| |_| |____


Für die beiden ersten Fälle könntest du im Interrupt-Handler messen, wie 
lange die LEDs leuchten und diese beiden Zahlen miteinander vergleichen.

Für den dritten Fall müsstest du hingegen die Anzahl der Impulse zählen.

Autor: Ramon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Stefanus für die super schnelle Antwort :)

Bei dem dritten Fall handelt es sich um Blink Sequenzen also es wird wie 
in c 3 mal blinken nachdem LED1 einmal kurz an war

Hast du / Gibt es für die Timer-Interrupts ein gutes Beispiel ? Über 
Interrupts weiß ich leider nicht viel.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefanus F. schrieb:
> Falls du es unbedingt machen willst, würde ich Dir empfehlen den Zustand
> der LED's in (z.B.) 100ms Intervallen in einem Timer-Interrupt
> abzufragen.

Wenn nichts weiter zu tun ist, kann er das das Interval auch per Delay 
festlegen.
Das Problem ist doch eher die ungenaue Beschreibung.
Stattdessen wird lieber auf der "Ich kleiner dummer Anfänger"-Schiene 
rumgejammert.

Wie ist das Zeitraster?
Sind die Perioden alle 5 Sekunden lang?
Bzw. mit welcher Periodendauer wird sonst noch geblinkt?
Die Periodendauer lässt sich einfacher als die Frequenz bestimmen.

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ramon schrieb:
> Hast du / Gibt es für die Timer-Interrupts ein gutes Beispiel ? Über
> Interrupts weiß ich leider nicht viel.

https://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

Autor: Stefanus F. (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ramon schrieb:
> Hast du / Gibt es für die Timer-Interrupts ein gutes Beispiel ? Über
> Interrupts weiß ich leider nicht viel.

https://playground.arduino.cc/Deutsch/HalloWeltMitInterruptUndTimerlibrary

STK500-Besitzer schrieb:
> Das Problem ist doch eher die ungenaue Beschreibung.

> Das Problem ist doch eher die ungenaue Beschreibung.

Allerdings. Wenn man die Aufgabe präzise beschrieben hat, ist die 
Umsetzung einfach. Ansonsten artet es in ein mühsames Trial & Error aus.

Also: Zeichne mal zuerst Diagramme mit konkreten Zeitangaben, welche die 
Blinkmuster exakt beschreiben. Danach kann man daraus ableiten, an 
welchen Merkmalen die unterschiedlichen Muster möglichst einfach aber 
eindeutig erkannt werden können.

Immer schön daran denken: Unsere Mikrocontroller können gut messen und 
rechnen - aber sie sind nicht intelligent.

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer schrieb:
> Wenn nichts weiter zu tun ist, kann er das das Interval auch per Delay 
festlegen.

Dealy wurde erfunden, um Anfänger in die Irre zu führen. Manchmal 
braucht man es, aber generell ist es besser, mit millis() zu rechnen.

Der Beschreibung nach hat er zumindest eine serielle Ausgabe zu 
bedienen, also wären blockierende Abfragen mit delay nicht meine erste 
Wahl.

> Das Problem ist doch eher die ungenaue Beschreibung.

Stimmt.

> Stattdessen wird lieber auf der "Ich kleiner dummer Anfänger"-Schiene 
rumgejammert.

Stimmt ebenfalls - es fehlt die Motivation, erstmal Grundlagen 
durchzuarbeiten.

Bei nur zwei LEDs und 5 Sekunden würde ich vermutlich in der loop() 
ständig zwei Zeitwerte vergleichen und die Dinger pollen, ohne 
Interrupt.

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.

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