Guten Abend zusammen! Ich bin auf der Suche nach Hilfe was das programmieren von Mikrocontrollern angeht. Ich würde gerne mit einen Atmega8 ein PWM Signal generieren jedoch würde ich das Tastverhältnis gerne mit einem Potentiometer verändern können. Es soll eine über PWM dimmbare LED werden. Leider habe ich wenn überhaupt rudimentäre C Kenntnisse und habe bisher auch noch keine uC's programmiert. Kann mir jemand sagen wie man bei einer PWM vor geht? Woher kommt die Zeitbasis? Jetzt bleibt noch eine Frage: Ich wollte zusätzlich noch einen anderen Code einbauen (Bargraph per Schieberegister ansteuern) geht das Codemäßig gleichzeitig oder muss man das "hinten" an den PWM Code anhängen? Hat das nicht Auswirkungen auf die Laufzeit des PWM? Wenn es irgendwo ein leicht verständliches Kochrezepte oder Mustercode geben würde wäre es auch schön wenn den jemand verlinkten würde. Vielen Dank im vorraus
Marcel Schlangen schrieb: > Leider habe ich wenn überhaupt rudimentäre C Kenntnisse und habe bisher > auch noch keine uC's programmiert. Kann mir jemand sagen wie man bei > einer PWM vor geht? Woher kommt die Zeitbasis? FAQ: Timer > Jetzt bleibt noch eine Frage: > Ich wollte zusätzlich noch einen anderen Code einbauen (Bargraph per > Schieberegister ansteuern) geht das Codemäßig gleichzeitig oder muss man > das "hinten" an den PWM Code anhängen? Hat das nicht Auswirkungen auf > die Laufzeit des PWM? Die PWM wird von der Hardware erzeugt. Die 'belastet' den Computer nicht. Und umgekehrt: Rechenvorgänge behindern die PWM nicht.
Geschwindigkeit hängt vom Prozessortakt ab. Du kannst ne PWM in Software schreiben, dann musst du dich um den Ablauf kümmern, der Atmega8 kann auch eine PWM mittels Timer1/2 in Hardware erzeugen. Guck mal ins Datenblatt ab S.74 (PWM geht ab S.87 los) bzw. S.102 ff, je nach Timer. Das tutorial hier auf der Seite ist auch immer eine gute Anlaufstelle: http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM
Geht's dir um den Weg (µC programmieren lernen) oder das Ziel? Wenn zweiteres, kann man mit einem OPV PWM ohne auch nur eine Zeile Code erzeugen: http://www.strippenstrolch.de/grafiken/pwm-op-3.jpg Für die Bargraph gibt's den LM3914N. Wenn dir um den Weg geht, würde ich ein Tutorial für den µC deiner Wahl empfehlen.
Marcel Schlangen schrieb: > Kann mir jemand sagen wie man bei > einer PWM vor geht? Du kannst die Arduino Umgebung - IDE mag man das wohl nicht nennen - installieren und die analogWrite() Funktion nutzen. Bei den meisten Arduinos wird das als PWM-Signal ausgegeben. http://arduino.cc/en/Reference/AnalogWrite?from=AnalogWrite.PWM
Danke erstmal für eure kurzfristigen Hilfen. Im Grunde geht es mir tatsächlich darum zu lernen und zu verstehen wie man sauber eine PWM erzeugt. Erst wenn man so was versteht kann man so etwas auch gut anwenden. Einige Tutorial habe ich schon gelesen hab aber ganz selten was mit durch Eingangswerte veränderbares Tastverhältnis gefunden. Und als es an diese Interups ging habe ich fast gar nichts mehr verstanden. Wie gesagt außer einen Taschenrechner und Hello World habe ich in C noch nicht viel hinbekommen. Der Tipp mit dem Arduino ist nützlich damit kann man ja schnell die Schaltung testen nur wie gesagt es ist unbefriedigend das ich das in C nicht verstehe.
Marcel Schlangen schrieb: > Einige Tutorial habe ich schon gelesen Von Anfang an? Beim Integrieren wirst du auch Schwierigkeiten haben, wenn du noch nicht weißt, was Ableitungen, sin/cos, usw. sind. Marcel Schlangen schrieb: > Im Grunde geht es mir tatsächlich darum zu lernen und zu verstehen wie > man sauber eine PWM erzeugt. Das könnte man auch mit der OPV Schaltung, wenn es kein µC sein muss. Ich weiß nicht wie es mit deinen Elektronikkenntnissen aussieht, die OPV sollte aber einfacher zu verstehen sein, als wenn man irgendeinen Code, in einer Programmiersprache, die man nur ansatzweiße versteht kopiert und in den µC flasht. Meine Meinung nach kann man bei der OPV Schaltung mehr lernen, da man beim µC, wenn man nicht sehr ins Detail geht nur lernt, welche Register man wie setzten/Funktionen aufrufen muss, dass ein PWM-Signal rauskommt,
:
Bearbeitet durch User
Guten Morgen da melde ich mich nun aber auch mal zu Worte. Einige wichtige Fragen wurden ja bereits von Karl Heinz korrekt beantwortet, will da auch nicht unbedingt zu tief ins Detail gehen. Marcel Schlangen schrieb: > durch Eingangswerte veränderbares Tastverhältnis > gefunden Im Grunde ist das ganz simpel. Ich versuche das mal ein bisschen zu erklären. Ein PWM zu erzeugen ist nicht unbedingt einfach, da es doch einiges an Initialisierung usw. benötigt. Ist dies allerdings erst einmal gemacht, lässt sich das Tastverhältniss meist mit einem oder zwei Bytes einstellen, je nach dem wie gross die Auflösung ist. Ist die Auflösung Beispielsweise 8-Bit, so kannst du 256 verschiedene Tastverhältnisse einstellen. Oder einfach ausgedrückt: PWM = 0 - 255 Genau diesen Wert, diese 0-255 möchtest du nun Mithilfe eines Potentiometers einstellen. Dafür bietet dir ein Mikrocontroller einen Analog-Digital Wandler. Damit kannst du Analoge Eingangsspannungen Digitalisieren. Dann hast du Beispielsweise bei 0V einen Wert von 0, bei 5V einen Wert von 255 (Das ganze ändert natürlich je nach Auflösung und Referenzspannung!) Dieser gewandelte Wert wird in einem Register gespeichert. Alles was du dann noch machen müsstest wäre: PWM = Digitaler_Analogwert um das mal ganz simpel auszudrücken. Die Grundidee ist sehr einfach, das Programmieren davon ist auch nicht sehr kompliziert, wird dich allerdings Zeit kosten wenn du bisher kaum Programmiert hast. Hier bei Sprut sind PWM sehr schön erklärt (bisschen veraltet, aber immernoch gut): http://www.sprut.de/electronic/pic/grund/pwm.htm Für dein vorhaben hilft dieser Google wieder mal. Immer wieder erstaunt darüber, was der so kann, ist n guter Junge. https://www.google.com/search?q=PWM+Analogwert+einstellen&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a&channel=sb#channel=sb&q=PWM+Tastverh%C3%A4ltnis+mit+ADC&rls=org.mozilla:de:official Marcel Schlangen schrieb: > Der Tipp mit dem Arduino ist nützlich damit kann man ja schnell die > Schaltung testen nur wie gesagt es ist unbefriedigend das ich das in C > nicht verstehe. Von Arduino rate ich dir ab, wenn du was sinnvolles lernen willst. Mehr als ein zusammenschnipseln vorgefertigter Lib's ist das nicht. Max H. schrieb: > Meine Meinung nach kann man bei der OPV Schaltung mehr lernen, da man > beim µC, wenn man nicht sehr ins Detail geht nur lernt, welche Register > man wie setzten/Funktionen aufrufen muss, dass ein PWM-Signal rauskommt, Kommt drauf an. Sollte er es mit einem Arduino machen, dann ja. Sollte dies nicht der Fall sein wird er sich generell einmal mit Mikrocontrollern beschäftigen müssen, bevor er an sein PWM denkt. Das ist auch ne ganz schöne Menge Material. Ich hoffe ich konnte dir weiterhelfen. Gruss
Danke für die ausführlichen Antwort. Auch wenn meine mathematischen Fähigkeiten nicht die besten sind, integrieren und ableiten klapp doch schon noch :-) Ich befinde mich zurzeit in einer Weiterbildung und möchte schonmal im "voraus" ein wenig uC mit C lernen da dies im nächsten Jahr ansteht. Da man ja immer versucht das angenehme mit den nützlichen zu verknüpfen habe ich mir ja direkt einen Anwendungszweck gesucht. Der bestand darin die Analog aufgebaute Schaltung eines Schulprojektes (Dimmbare LED Lampe) nun zum Vergleich mit einem uC und PWM aufzubauen. Der Tipp mit PWM über OP ist lieb gemeint, diese Schaltung habe ich auch schon geplant und aufgebaut nur leider hier nicht Bestandteil des an mich selbst gestellten Auftrages. Ich möchte Tatsächlich das uC Programmieren lernen. Hab da auch das ein oder andere Buch nur Interups sind halt ein Buch mit sieben Siegeln und viele Codes die man googlen kann nutzen das eben (Abgesehen davon das alle Lösungsansätze die ich gesehen habe theoretisch anders vorgeben als ich mir es gedacht habe). Ich werde mir wenn ich wieder Bastelzeit habe mal genaustens die Tutorials ansehen und gucken ob ich da so jetzt weiter komme...
Es geht hier weniger um C... Das was du in C können musst um PWM zu generieren ist Register zu beschreiben... Wichtiger ist, du liest das Datenblatt des uC. Der hat entweder dedizierte PWM HW Einheiten, oder Timer die für die PWM verwendet werden. Oft sind da auch Beispiele drinn....
Marcel Schlangen schrieb: > Ich würde gerne mit einen Atmega8 ein PWM Signal generieren jedoch würde > ich das Tastverhältnis gerne mit einem Potentiometer verändern können. Das sind zwei verschiedene Aufgaben, die du erstmal getrennt bearbeiten kannst. Wenn das einzeln klappt, kannst du die beiden Komponenten zusammenbauen. Für die Erzeugung eines PWM Signals, kann dir ein auf fast allen µCs vorhandener Timer viele Arbeit abnehmen.
Vielleicht helfen DIr die Videos: http://et-tutorials.de/4741/pwm-pulsweitenmodulation/ http://et-tutorials.de/4768/ein-programmablaufplan-fur-die-pulsweitenmodulation/ http://et-tutorials.de/4789/programmierung-der-pulsweitenmodulation/
Womit möchtest du denn deinen uC programmieren? Mit welchem Programmierterät meine ich?
Ingo schrieb: > Womit möchtest du denn deinen uC programmieren? Mit welchem > Programmierterät meine ich? Im jugendlichen Leichtsinn habe ich mir ein STK500 und einen original Atmel ISP gekauft. Als IDE würde ich gerne das Studio von Atmel selber nutzen.
Marcel Schlangen schrieb: > Im jugendlichen Leichtsinn habe ich mir ein STK500 und einen original > Atmel ISP gekauft. Als IDE würde ich gerne das Studio von Atmel selber > nutzen. Sind doch gute Voraussetzungen. Mir persönlich haben diese Tutorials sehr sehr gut gefallen: https://sites.google.com/site/qeewiki/books/avr-guide Hier das Kapitel der PWM: https://sites.google.com/site/qeewiki/books/avr-guide/pwm-atmega8 Wenn ich du wäre, würde ich Schritt für Schritt gehen und ein Kapitel nach dem Anderen abarbeiten.
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.