Hallo Leute, ich habe hier eine Seite gefunden, wie man die PWM-Frequenz ändern könnte für fast alle Arduino Boards. http://arduino-info.wikispaces.com/Arduino-PWM-Frequency Habe das getestet und es klappt auch wunderbar. Meine Frage: Der DUE ist leider nicht mit angegebn, kennt jmd. eine Seite bzw. weiß jmd. wo das steht bzw. wie der Code bzw. die Zeile lautet für die PINS ? Danke!. VG Vadislav
Vadislav schrieb: > Der DUE ist leider nicht mit angegebn Was ist denn ein DUE? Wozu willst Du die Frequenz ändern. Willst Du Töne erzeugen, einen Schrittmotor ansteuern oder was?
Hat der Due nicht einen ganz anderen Prozessor? (AVR <->Arm) Da müßte das doch auch ganz anders gehen?
uwe schrieb: > http://www.atmel.com/Images/doc11057.pdf > Seite 873 und Seite 906 Danke UWE, aber wie würde denn der Befehl für eine PWM-Pin lauten ? Brauche halt den µC für die Erzeugung einer höheren PWM. Bei dem UNO gebe ich einfach in Simulink folgendes ein: TCCR0B = TCCR0B & B11111000 | B00000001; für PIN 5, um 62.5 kHZ zu erhalten. Was müsste man denn für den DUE eingeben ? PittyJ schrieb: > Hat der Due nicht einen ganz anderen Prozessor? (AVR <->Arm) > Da müßte das doch auch ganz anders gehen? Nein, der hat auch einen von atmel.
@ Vadislav (Gast) >Was müsste man denn für den DUE eingeben ? >> Hat der Due nicht einen ganz anderen Prozessor? (AVR <->Arm) >> Da müßte das doch auch ganz anders gehen? Hat er. >Nein, der hat auch einen von atmel. Ja, Atmel ist der HERSTELLER, ARM ist der CPU-Typ. Der DUE ist ein ARM und hat GANZ ANDERE Register! http://arduino.cc/en/Main/ArduinoBoardDue Es ist ein Atmel SAM3X8E ARM Cortex-M3 CPU Und huch, dort gibt es einen Link zum Datenblatt. Schau einer an! http://www.atmel.com/Images/doc11057.pdf Und Was lesen wir auf 869? Was von den Timern. Ja, das Datenblatt ist FETT! Das ist ein ganz anderes Kaliber als der kleine, nette AVR.
> Nein, der hat auch einen von atmel. Auf dem DUE ist ein 32Bit ARM von Atmel (SAM3) auf den Anderen Arduinos sind 8 Bit AVRs von Atmel. Du mußt im TC_CMRx (für x timer 0 bis2) die Bits im Feld TCCLKS auf 0 setzen. Dadurch würde sich aber auch das ganze andere zeitverhalten des DUEs ändern. Wenns nicht gehen sollte ist warscheinlich das WPEN gesetzt. Dann steht da: This register can only be written if the WPEN bit is cleared in “TC Write Protect Mode Register” on page 903 Also auf Seite 903: Das Register TC_WPMR das Bit WPEN vorher löschen. Aber mal ehrlich hast du irgendwas verstanden von dem was ich geschrieben habe? Lese und verstehe das Datenblatt. Wenn dir das zu hoch ist dann versuchs erst mal mit den 8 Bit AVRs und lese und verstehe das Datenblatt, mach das Tutorial durch und lass nen paar LEDs blinken mit Timern. Danach nimm dir nochmal den SAM3 vor und dessen Timer. und wenn ich sage mach das Tutorial durch dann meine ich auch lass die Arduino Sche***. Der SAM3 kann übrigen dies wenn du kein Arduino Zeug benutzt: Up to 8-channel 16-bit PWM (PWMC) with Complementary Output, Fault Input, 12-bit Dead Time Generator Counter for Motor Control
Nein, ich bin nur Anwender, was ich will, ist nur den Befehl, um die PWM-Frequenz der PINS zu ändern. Das ist nicht mein Aufgabengebiet, daher würde bräuchte ich nur kurz den Code...
@Vadislav (Gast) >Nein, ich bin nur Anwender, was ich will, ist nur den Befehl, um die >PWM-Frequenz der PINS zu ändern. Dann nutzt die Funktionen, die dir die Arduinoblibliotheken zur Verfügung stellen. Dass die nicht ALLE möglichen Einstellungen bieten, welche die Hardware kann, ist halt Pech. Beschwer dich bei den Programmierern.
Vadislav schrieb: > Nein, ich bin nur Anwender, was ich will, ist nur den Befehl, um die > PWM-Frequenz der PINS zu ändern. > > Das ist nicht mein Aufgabengebiet, daher würde bräuchte ich nur kurz den > Code... Und woher willst du wissen, dass dieser "eine" befehl existiert? Je nachdem was du sonst noch timing-Abhängiges (direkt oder indirekt) benuzt, sind das vielleicht viele tausende Zeilen code, die man quer durch das ganze Arduino-Framework anpassen muss, Also: Wenn google nix findet: Nimm einen AVR-Basierten Arduino, notfalls als reinen "PWM-Coprozessor", und folge den Anweisungen die du schon kennst. "Hach, ich weiß nicht, wie ich bei meinem Porsche den zweiten Gang einlegen kann, deshalb fahr ich jetzt Dreirad".
Linksammler schrieb: > Und woher willst du wissen, dass dieser "eine" befehl existiert? Weil er das nicht weis fragt er ja. Ich halte das für durchaus legitim! ;)
> Das ist nicht mein Aufgabengebiet
Dann ist das einfach: Gebe es demjenigen dessen Aufgabengebiet es ist.
Das Problem ist folgendes: Diejenigen die sich mit SAM3 und den Timern und dem Taktsystem usw. auskennen benutzen keine Arduino Libs, können dir also nur sagen wie es gehen würde wenn man keine Arduino Libs benutzt. Diejenigen die Arduino Libs benutzen kennen sich mit SAM3 und den Timern und dem Taktsystem usw. nicht aus. Wenn du weißt wie man mit den Arduino Libs in das Register TC_CMRx in die unteren 3 Bits eine 0 schreibst dann sollte es das gewesen sein. Du mußt nur noch herausfinden ob TC_CMR0 oder TC_CMR1 oder TC_CMR2, dies hängt vom Timer welcher benutzt wird ab bzw. an welchem Pin das PWM Signal rauskommt. Da ich mich absolut nicht mit Arduino auskenne kann ich dir auch nicht sagen wie das geht, aber du solltest doch schon wissen wie man etwas in ein Register bzw. in eine Speicherstelle schreibt. Wenn nicht mußt du das halt herausfinden. google doch mal Arduino TC_CMR.
uwe schrieb: > Wenn du weißt wie man mit den Arduino Libs in das Register TC_CMRx in > die unteren 3 Bits eine 0 schreibst dann sollte es das gewesen sein. Im Prinzip geht das genauso wie bei denjenigen, die kein Arduinio benutzen. Denn das Ardunio Framework baut auf genau denselben Grundlagen auf, wie auch die anderen Programme und mit dem richtigen Include File hast du auch das alles zur Verfügung. Aber: das Arduino System ist ein Framework! Die interessante Frage ist, welche Teile will das Framework für sich selbst haben bzw. wo lasse ich besser die Finger davon, die Hardware unter dem Framework umzukonfigurieren. Ein wichtiger Punkt bei Arduino ist genau das, das man eben nicht die unterste Ebene kennen muss. Genau dazu hat man ja das Framework, dass dieses die Hardware so gut es geht wegabstrahiert. Mit natürlich auch genau dem Effekt, dass das Framework dann oft auch auf dem kleinsten gemeinsamen Nenner aufsetzen muss. Was hier konkret bedeutet, dass man nicht alles, was die Hardware hergibt, auch über das Framework benutzen kann. Wenn für mich das Framework 'Auto' nur aus 3 Pedalen, 1 Ganghebel und einem Lenkrad besteht, dann kann ich eben nicht mehr einfach so an der Zündverstellung rummachen. D.h. ich kann das schon. Nur muss ich dann eben ein wenig mehr können, als nur mit den 3 Pedalen und dem Ganghebel umgehen zu können. Die wiederrum sind aber nützlich, denn sie erlauben mir ein neues Auto zu kaufen und da ich dort genau die gleichen Pedale vorfinde, komme ich sofort zurecht. Hat halt alles seine Vor und Nachteile.
Meine Hoffnung war ja, dass einer das schon vll. gemacht hat, siodass es einfach heißt: mach dies und das in Simulink =)
Eine PWM soll ja eine analoge Spannung erzeugen, d.h. die Frequenz ist schnurz piep egal. Ein Framework für PWM-Frequenz wirst Du daher kaum finden. Für die Frequenzerzeugung mußt Du nach der Anwendung unterscheiden. D.h. ein Framework für Tonerzeugung oder Schrittmotorsteuerung sollte eher zu finden sein.
Diese Aussagen sind völlig nutzlos und führen nicht weiter. Wenn Sie eine Möglichkeit kennen die pwm-Frequenz zu erhöhen antworten seien Sie so nett und antworten bitte. Falls nicht helfen solche dämlichen Antworten niemandem weiter. Beiträge dieser werden immer wieder von hilfesuchenden aufgerufen, da Schlagworte wie Due & Frequenz darin vorkommen. Wenn dann nur dumme Kommentare in dieser Art bei zu lesen sind ist niemandem geholfen. Ich kann nur sagen wie sehr mich solche Arroganz irritiert. Wenn ich helfen kann tue ich es. Chauvinịstisches Verhalten um sich selbst auf die Schulter zu klopfen ist peinlich.
Hallo zusammen, ich bin das Problem angegangen, indem ich die arduino-Funktion analaogWrite() angepasst habe. Ursprünglich mit 2 Übergabevariablen (Pin und DutyCycle) habe ich noch eine dritte Übergabevariable Frequenz eingefügt und den Code entsprechend angepasst. Man findet die Funktion in der Datei wiring_analog.c. Das ist vielleicht nicht die eleganteste Variante, weil die Funktion analogWrite ja auch für andere Zwecke (eben analoge Werte an einen Pin schreiben, oder einen Timer ausgeben) verwendet wird. Wenn eine dieser Funktion gebraucht wird, muss man dann beachten als dritte Übergabevariable ein dummy zu übergeben, damit die Funktion akzeptiert wird. Für mich funktioniert es so, und ich kann jede beliebige Frequenz bzw. Periode und DutyCycle über die PWM ausgeben lassen. Habe allerdings noch keine Grenzen ausgetestet. Achso, ich brauchte die PWM, um den Controller für einen Schrittmotor anzusteuern. Das Framework für die Schrittmotoransteuerung ist für mich nutzlos, weil da das Programm in der Schrittmotorfunktion hängen bleibt, ich aber parallel noch andere Aufgaben ausführen muss.
Annika schrieb: > indem ich die arduino-Funktion > analaogWrite() angepasst habe. Ich beglückwünsche dich zu deinem Erfolg!
Peter D. schrieb: > Eine PWM soll ja eine analoge Spannung erzeugen, d.h. die Frequenz ist > schnurz piep egal. Leider ein sehr großer Irrtum, die Frequenz macht einiges aus. ZB, pfeifen bei Motoren.
Die ursprüngliche Seite ist umgezogen und jetzte unter folgendem Link zu erreichen.: https://arduinoinfo.mywikis.net/wiki/Arduino-PWM-Frequency Gruß, Frank
Annika schrieb: > Hallo zusammen, > > ich bin das Problem angegangen, indem ich die arduino-Funktion > analaogWrite() angepasst habe. Ursprünglich mit 2 Übergabevariablen (Pin > und DutyCycle) habe ich noch eine dritte Übergabevariable Frequenz > eingefügt und den Code entsprechend angepasst. Man findet die Funktion > in der Datei wiring_analog.c. > > > Das ist vielleicht nicht die eleganteste Variante, weil die Funktion > analogWrite ja auch für andere Zwecke (eben analoge Werte an einen Pin > schreiben, oder einen Timer ausgeben) verwendet wird. Wenn eine dieser > Funktion gebraucht wird, muss man dann beachten als dritte > Übergabevariable ein dummy zu übergeben, damit die Funktion akzeptiert > wird. Genauso geht man vor. Wenn du die orignale Funktion bzw. Methode wieder herstellst mit genau dem gleichen Namen, dann unterscheiden sich beide in ihrer sogenannten Signatur. Nennt man Überladung. Damit musst du anderen Code nicht ändern der nur die 2 Standard Parameter benötigt.
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.