Forum: Mikrocontroller und Digitale Elektronik PWM für Dummies - Kann mir wer helfen?


von Marcel S. (derschlangen)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Gerd (Gast)


Lesenswert?

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

von Max H. (hartl192)


Lesenswert?

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.

von Duck-und-wech (Gast)


Lesenswert?

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

von Marcel S. (derschlangen)


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

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
von San L. (zwillingsfreunde)


Lesenswert?

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

von Marcel S. (derschlangen)


Lesenswert?

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

von foo (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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.

von Garden (Gast)


Lesenswert?


von Ingo (Gast)


Lesenswert?

Womit möchtest du denn deinen uC programmieren? Mit welchem 
Programmierterät meine ich?

von Marcel S. (derschlangen)


Lesenswert?

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.

von al3ko (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.