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?
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.
kein "Delay", wenn ich fragen darf? Aus sportlichem Ehrgeiz oder was hat "Delay" für Dich für Nachteile?
ich will die Blinkfrequenz noch auf nem OLED Display anzeigen
"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...
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
Du willst einen fertigen Code, oder?
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.
Electronics'nStuff schrieb: > Du willst einen fertigen Code, oder? Sind wir hier bei 'Wünsch dir was ?' ;-) SCNR
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.