Hallo,
ich suche für Testzwecke einen PWM-Generator bei dem man die Frequenz und das Tastverhältnis einstellen kann, mit LCD 2x12. Ca. 50kHz max. Hat jemand so etwas schon mal gebaut? Leider bin ich aufgrund fehlender Kenntnisse nicht in der Lage so etwas selbst zu programmieren. Mit einem NE555 würde ich es ev. hinkriegen, aber der Arduino wäre mir lieber.
wenn du es lernen möchtest, dann helfe ich dir dabei es Schritt für Schritt zu programmieren. Die Basics mußte drauf haben und gewillt sein mit dem Datenblatt umzugehen. Wenn du also zum Bsp. die Einstellungen mittels Poti ändern möchtest, dann solltest du jetzt schon in der Lage sein ein Poti einzulesen und den Wert auf der seriellen ausgeben zulassen. Timer Einstellungen erkläre ich dir mittels Datenblatt. Dabei lernst du viel mehr als wenn du fertigen Code bekommst. Das schwierigste an der Sache ist eigentlich nur die richtigen Einstellungen an Hand vom Datenblatt rauszusuchen und paar Dinge zubeachten, die auch im Datenblatt stehen.
Welchen Arduino hast du? Bereit fürs Eingemachte?
Wenn nicht, dann nimm Post #1.
Holzwurm56:
Hallo,
ich suche für Testzwecke einen PWM-Generator bei dem man die Frequenz und das Tastverhältnis einstellen kann, mit LCD 2x12.
Ein 2x12-LCD ist kein Standard. Das kann Probleme machen. Standard-LCDs sind 2x16 oder 4x20. Hier funktioniert die Ansteuerung und Libs reibungslos. Außerdem sind die Standard-LCDs als Massenware extrem günstig.
Hallo,
Display mit 12x12 habe ich nur so hingeschrieben, klar nehme ich ein 16x16 oder 20x20.
Hallo Doc_Arduino vielen Dank für dein Angebot, dieser Weg wäre mir natürlich lieber da kann ich was dazulernen. Ich probiere mal das Grundgerüst zu programmieren und stelle es hier ein.
Da ich von Timern wenig Ahnung habe hätte ich mit delayMicroseconds gearbeitet, Frequenz und Tastverhältnis hätte ich mit 2 Drehgebern an 2 Interupteingängen eingestellt.
mit Befehlen geht schon nur wird man keine absolut stabilen Frequenzen hinbekommen. Auch wenn der Teensy schneller ist. Die Laufzeit der loop funkt dann mit rein. Deshalb ist die Nutzung der Hardware-Timer sinnvoll. Die Hardware-Timer belasten wiederum die loop nicht. Eine Win-Win Situation.
Ich würde erstmal auf Hans eingehen wollen. MaHa u.a. machen einfach mit und können natürlich auch Fragen stellen. Ich hoffe das ergibt kein Kaos. Ich hoffe Hans hält durch. Ein Oszi oder Logikanalyzer ist vorhanden?
Wobei das grundlegend nicht sooo schwer ist, wenn man erstmal weiß welche Bits man in welchen Register einstellen und welche Registerwerte man später ändern muß. Ich werde wenn Hans soweit ist erstmal paar Grundfragen zum Timer stellen, damit ihr ein Gefühl bekommt wie schnell der ist. Vorher kümmern wir uns noch um stabile Potiwerte. Dabei kommt die Filterfunktion von Gunther ins Spiel. Ich möchte das Schritt für Schritt aufbauen und nicht alles auf einmal. Dauert zwar länger, erhoffe mir dadurch jedoch eine Struktur und kein Kaos und das alle mitkommen.
grober Ablauf:
Wir nehmen den Timer 1. Das kalte Wasser kann nicht tief genug sein. Wer den beherrscht kann später alles.
a) grundlegende Fragen zum Timer, damit ihr ein Gefühl bekommt wie schnell oder langsam der sein kann
b) arbeiten mit dem Datenblatt und ein wenig rechnen
c) Auswahl des Timer Mode und daraus folgend die Registereinstellungen
d) erste Versuche mit festen Settings
e) erste live Änderung des Timers einbauen
f) zweite live Änderung des Timers einbauen
g) ... wird sich ergeben ...
Ich bin auch nicht 24h am Tag und 7 Tage die Woche im Forum. Ich versuche es so oft wie möglich.
Also wenn Hans das analoge einlesen zweier Potis und serielle Ausgabe dessen fertig hat, machen wir weiter würde ich vorschlagen. Code bitte in Code Tags, Button oben links </>.
Es müßte sich noch jeder das Pinout zu seinem Arduino besorgen. Dann ist es egal ob man einen Uno oder Mega hat. Nur die Arduino-Board Pin Nummern sind dann jeweils verschieden. Die interne Bezeichnung ist gleich.
ArduFE:
Wahrscheinlich kommen andere 32 Bit Boards auch in diese Bereiche, nur finde ich da keine Doku.
Der teensy ist eine gute Idee!
Befehle/Funktionen/Methoden, die die Hardware optimal unterstützen, gefallen mir und eine Doku ist doch sehr hilfreich, weshalb ich schnell mal ein Programm für den teensy 3.2 gezimmert habe, um die Funktionalität zu überprüfen.
Auflösung 9 mit 96 MHz CPU Frequenz an Pin 3. Oben ist die vom TO gewünschte Maximalfrequenz (50 kHz) zu sehen mit zwei Tastverhältnissen, unten eine beliebige niedrigere Frequenz (1,91 kHz) ebenfalls mit zwei Tastverhältnissen.
Nun möchte ich nur ungern als Spielverderber dastehen, aber Hans würde ich einen teensy 3.2 mit kurzem, leicht verständlichem Programm empfehlen.
agmue:
Nun möchte ich nur ungern als Spielverderber dastehen ...
Was auch immer Hans am Ende macht bzw. nimmt, ich lese auf jeden Fall interessiert mit. Ich kenne mich mit Oszi-Grafiken nicht allzu gut aus, könntest Du kurz erklären, was die Angaben unter den Kurven bedeuten (und von was für einem Oszi die stammen)?
wie gesagt, 50kHz würde auch ein Arduino schaffen. Nur macht das keinen Sinn. Damit wäre er fast ausgelastet. Änderungen an der Looplaufzeit wirken sich direkt auf den Takt aus. Ist bei allen µC so wenn man das im Hauptprogramm macht. Egal ob Arduino oder Teensy. Deswegen gibts Hardware-Timer. Zudem hat Hans nun einmal einen Arduino und keinen Teensy. Ich habe nichts gegen Teensy, nur wenn Hans das hier wirklich durchziehen möchte, dann macht bitte für den Teensy einen eigenen Thread auf. Sonst gibts hier Kaos. Der Teensy bringt hier keinen Vorteil.
gregorss:
könntest Du kurz erklären, was die Angaben unter den Kurven bedeuten (und von was für einem Oszi die stammen)?
Na klar
Ich nutze BitScope DSO 2.8.
FT Triggerpunkt, 0s ist in der Mitte
TB horizontale Auflösung 10 µs/Div
FP Frequenz bezogen auf TP
TP Zeit zwischen linkem Cursor (grün) und rechtem (braun)
TM Zeit zwischen Triggerpunkt und linkem Cursor
@Doc_Arduino: Ich nutze analogWrite, das ist doch Hardware PWM
Doc_Arduino:
... nur wenn Hans das hier wirklich durchziehen möchte, ...
... dann werde ich interessiert mitlesen. Ob Hans einen teensy kauft oder es mit einem UNO macht, soll er entscheiden. Solange er das nicht gemacht hat, werde ich ihn mit Informationen zur Entscheidungsfindung füttern.
Doc_Arduino:
Der Teensy bringt hier keinen Vorteil.
Da bin ich anderer Meinung: Es reichen ein paar Zeilen, um zum Ergebnis zu kommen, ohne in Datenblättern usw. lesen zu müssen:
analogWriteResolution(9); // analogWrite value 0 to 511
...
analogWriteFrequency(PWMpin, freq);
analogWrite(PWMpin, PWMwert);
ich dachte Hans hat schon einen Arduino? Nur welchen weiß ich noch nicht.
Falls du dich mit Timern noch nicht auskennen solltest, dann kannste danach die Funktion
analogWriteFrequency(PWMpin, freq);
für Arduino gern nachrüsten. Zudem ist es bestimmt interessant zu wissen was dahinter steckt. Das macht ja gerade den Reiz aus sich mit dem Datenblatt auseinandersetzen zu müssen. Für mich jedenfalls. Man kann alles erdenkliche frei einstellen.
Edit: jetzt ist endlich das Forum wieder erreichbar. Heute ging gar nix.
Doc_Arduino: Edit: jetzt ist endlich das Forum wieder erreichbar. Heute ging gar nix.
So kommt es, daß Dein gestern geschriebener Text erst heute gespeichert wurde, womit dann heute zu gestern wird
Doc_Arduino:
ich dachte Hans hat schon einen Arduino?
Das kann ich aus dem, was er schreibt, nicht eindeutig erkennen. Aber wenn man einen teensy hat, kann ein zusätzlicher UNO nicht schaden, da man dann die Unterschiede zwischen 8 Bit µC (auf dem UNO geht's) und 32 µC gut vergleichen kann. Geht mir zumindest so.
Doc_Arduino:
Zudem ist es bestimmt interessant zu wissen was dahinter steckt. Das macht ja gerade den Reiz aus sich mit dem Datenblatt auseinandersetzen zu müssen. Für mich jedenfalls.
Für mich auch! Mit meinem Hobby möchte ich ja neue Dinge herausfinden. Im Datenblatt zu stöbern, gehört nicht unbedingt zu meinen Lieblingsbeschäftigungen, muß aber eben manchmal sein.
Allerdings fände ich es egoistisch, Hans Informationen vorzuenthalten, weil ich UNO-Timer spannend finde.
Ich bin gespannt, ob Hans sich nochmal meldet, sonst sind alle Überlegungen umsonst.