Arduino Mega 2560 Blink ohne Delay mit potigesteuerter Blinkfrequenz

Gast #3119045
Lesenswert?
• ▲
▼
HI, ich hoff Ihr könnt mir weiterhelfen:

MC: Arduino Mega 2560

Ich versuche schon seit Stunden folgendes zu realisieren.

Eine blinkende Led mit einstellbarer Frequenz durch ein 10K Poti. OHNE 
DEALAY!

Nach stundenlanger Suche finde ich laut google immer nur Beispielsketche 
mit

1. Einstellbare Frequenz mit Delay

2. feste Frequenz ohne Delay

Wie kann ich mein vorhaben realisieren?
Gast #3119055
Lesenswert?
• ▲
▼
Du misst über einen ADC die Analoge Spannung welche mithilfe des Potis 
eingestellt wird und übergibst diesen Messwert an einen Timer im PWM 
Modus.

In den Anschlagsbereichen hättest du dann entweder 0% Dutycyle 
(Einschaltzeit) oder 100% Dutycyle (Dauerhaftes Einschalten)

Die Hauptaufgabe besteht also nur darin den Timer einmalig zu 
initialisieren und in einer Hauptschleife die ADC Auswertung und 
aktualisierung des Timers zu implementieren.

Idealerweise nimmst dazu noch einen Timer welcher einen ausgeführten 
Port Pin hat sodass du noch nichtmals in Software den Pinzustand 
einstellen brauchst.



Jetzt schnapp dir das Datenblatt des MEGA256 und lies dich ein wie der 
ADC funktioniert und such dir einen Timer raus welcher die gewünschten 
Funktionen zur Verfügung stellt.
Gast #3119137
Lesenswert?
• ▲
▼
"Du misst über einen ADC die Analoge Spannung welche mithilfe des Potis
eingestellt wird und übergibst diesen Messwert an einen Timer im PWM
Modus.

In den Anschlagsbereichen hättest du dann entweder 0% Dutycyle
(Einschaltzeit) oder 100% Dutycyle (Dauerhaftes Einschalten)

Die Hauptaufgabe besteht also nur darin den Timer einmalig zu
initialisieren und in einer Hauptschleife die ADC Auswertung und
aktualisierung des Timers zu implementieren.

Idealerweise nimmst dazu noch einen Timer welcher einen ausgeführten
Port Pin hat sodass du noch nichtmals in Software den Pinzustand
einstellen brauchst.



Jetzt schnapp dir das Datenblatt des MEGA256 und lies dich ein wie der
ADC funktioniert und such dir einen Timer raus welcher die gewünschten
Funktionen zur Verfügung stellt."

Dat war jetzt aber ein bissl zu hoch für mich...
Gast #3120130
Lesenswert?
• ▲
▼
Also das hier sollte dich zumindest in die richtig Richtung schubsen:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts
http://www.mikrocontroller.net/articles/Interrupt

In der Theorie ist der Delay nichts schlechtes - es wird halt sinnnlos 
Zeit vertrödelt.

Wenn dir das nicht gefällt ist die einfachste Möglichkeit vermutlich 
dass du einene Interrupt baust der alle X Millisekunden aktiviert wird 
(und damit den Prozesser auch aus einem Delay 'rausholt') und irgendwas 
macht.
Zum Beispiel ein LCD aktualisieren.

Thomas
#3120140
Lesenswert?
• ▲
▼
Thomas schrieb:


> Wenn dir das nicht gefällt ist die einfachste Möglichkeit vermutlich
> dass du einene Interrupt baust der alle X Millisekunden aktiviert wird
> (und damit den Prozesser auch aus einem Delay 'rausholt') und irgendwas
> macht.
> Zum Beispiel ein LCD aktualisieren.

Anders rum.
Die einfachste Möglichkeit ist es definitiv, den Interrupt alle X 
Millisekunden vom Timer aktivieren zu lassen und dort drinnen das 
BLINKEN zu erledigen. Wobei Blinken darin besteht, dass die LED einfach 
nur in den jeweils anderen Zustand geschaltet wird und damit hat dann 
der Interrupt seine AUfgabe schon wieder erledigt.

Immer die zeitlich kürzere Aktion in den Interrupt legen.
Aufrufe einer ISR mitzählen und nach X Aufrufen eine LED umschalten geht 
ratz fatz. Das kann man in der ISR problemlos erledigen. Hingegen alles 
was mit Textaufbereitung bzw. Stringausgabe zu tun hat, hat in einer ISR 
normalerweise nichts verloren.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.