Forum: Mikrocontroller und Digitale Elektronik Arduino Mega 2560 Blink ohne Delay mit potigesteuerter Blinkfrequenz


von Hardcore (Gast)


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?

von Nachtaktive (Gast)


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.

von Warum (Gast)


Lesenswert?

kein "Delay", wenn ich fragen darf? Aus sportlichem Ehrgeiz oder was hat 
"Delay" für Dich für Nachteile?

von Hardcore (Gast)


Lesenswert?

ich will die Blinkfrequenz noch auf nem OLED Display anzeigen

von Hardcore (Gast)


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...

von Thomas (Gast)


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

von Electronics'nStuff (Gast)


Lesenswert?

Du willst einen fertigen Code, oder?

von Karl H. (kbuchegg)


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.

von Thomas (Gast)


Lesenswert?

Electronics'nStuff schrieb:
> Du willst einen fertigen Code, oder?

Sind wir hier bei 'Wünsch dir was ?' ;-)
SCNR

von Maus (Gast)


Lesenswert?

guck dir in den example patches in der Arduino IDE die patches 
'blinkwithoutdelay' und 'analogreadserial' an, verstehe sie, und füge 
beide zusammen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.