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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren