mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM mit AVR


Autor: max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mit einem ATmega8 einen Dimmer gebaut. Ich kann leider nur 1
Lampe mit dimmen. Gibt es eine Möglichkeit mit einem AVR mehrere Dimmer
 mit PWM zu realissieren?
Bzw welche Möglichkeiten gibt es um ca 4 Lampen(12V/20W) zu dimmen)

Gruß Max

Autor: Jens D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
software pwm ;)

gruss

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- erste Möglichkeit schon von Jens genannt (softwarelastig)
- du nimmst einen µC wie z.B. mega88, der bis zu 6 pwm kann
- oder eine pwm multiplexen (hardwarelastig)

Autor: Borny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso nicht einfach 4 Transistoren, an deren Basis du einfach den PWM
Ausgang legst?

Autor: Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für 12V Glühlampen brauchst du keine PWM. Da reicht es bei DC die
Spannung zu steuern oder bei AC eine Phasenanschnitts-Dimmer.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Heinz,

wie würde das ohne PWM und mit einem AVR gehen??

Grüße MAx

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Heinz:

Die Aussage halte ich für etwas gewagt. Gerade für Ohmsche Lasten
eignet sich PWM hervorragend und ist einer leistungsverbratenden
DC-Regelung in jedem Fall vorzuziehen. Im Fall von trägen Glühlampen
tut´s eine recht niederfrequente Software-PWM (meinetwegen 100Hz
Ausgabefrequenz), die über einen Timer erzeugt wird, ohne große
Probleme. Da krigste in einem Tiny2313 Controller mindestens 8 von
unter und hast dann auch noch genug Platz und Zeit für andere Dinge.

Autor: Florian Labermeyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

also ich hab auch versucht eine mehrfach PWM mit 3 unabhängigen Kanälen
(RGB-Farbwechsel)auf Basis eines 90S2313 zu realisieren:
Clock= 3,6 Mhz /PWM Frequenz=1,8 KHz . Das PWM-Signal wird über einen
Timer im Sekundentakt verändert (auf-/abdimmen). Aber leider flackerts
gelegentlich ein wenig. Ich vermute, es liegt am sekündlichen
inkrementieren, das dann zu viel Zeit in anspruch nimmt. Hat hier
jemand einen Tip?
Gibt`s bei dem angesprochenen ATMega eine fertige Lösung dafür, oder
muss man`s immer zu Fuß machen? Danke für die Hilfe!
Gruß

2Bob

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorschlag: Man hat 3 Bytes als Register oder SRAM (eines pro PWM-Kanal),
in die man die Werte einschreibt, die proportional zur Helligkeit sind,
also 255 voll an und 0 aus. Jetzt baut man sich einen Timer, der mit
meinetwegen 100 kHz läuft. Dieser Timer löst einen Interrupt aus, in
der ISR wird ein 8-Bit Software-Vergleichs-Zähler hochgezählt und mit
den o.g. Werten verglichen. Je nach Vergleich wird der betreffende
Portpin des jeweiligen PWM-Kanals auf 1 oder 0 geschaltet. Ein 2.
Timer, der im Sekundentakt läuft (oder ein vom ersten Timer
heruntergeteilter Software-Zähler) übernimmt dann immer nur dann, wenn
der 8-Bit-Vergleichs-Zähler gerade 0 geworden ist, die neuen Werte in
die Speicher-Register. Auf diese Weise laufen alle PWMs unabhängig
nebeneinander (mit der gleichen Frequenz), können unteschiedliche
Helligkeiten fahren und werden immer zeitsynchron übernommen, um eben
Flackern (Glitches) zu vermeiden.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RGB-PWM, die vielleicht nicht unbedingt mit den "älteren" AVR geht:
8-Bit-Timer im CTC laufen lassen (wobei CTC auf jeden Fall mit
16bit-Timern geht [hab mir die 8bit Timer noch nicht näher
angeguckt]).
Man schreibt den jeweiligen Wert in das OCR, schaltet den jeweiligen
Pin ein und wartet auf das OCR-Interrupt. In dessen ISR schreibt man
dann den Wert für die nächste Farbe ins OCR, und das reihum.

Durch die Trägheit des Auges müsste es zum gewünschten Effekt kommen.

Für die Sekunden hätte man dann noch gewisse andere Möglichkeite, wobei
 sich einer der restlichen Timer quasi aufdrängt.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rahul: CTC geht bei der Mega-Serie mit allen Timern, damit
verkleistert man sich aber das Hardware-PWM und sämtliche Timer. Der
OCR-Vergleich wird dabei übrigens IMMER ohne Glitch ausfgeführt, weil
komplett in Hardware gegossen und synchronisiert. Somit erspart man
sich das Updaten in der ISR, kann man jederzeit machen.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es darum geht, NUR eine LED in unterschiedlichen Farben leuchten zu
lassen, ist der Kleister ja egal.
Für den Ablauf würde ich halt die ISR nehmen und da das OCR
aktualisieren und den Pin umschalten. Man im Main auch die Sachen
vorbereiten. 1-2 Timer hat man ja noch über...

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jojo - geht alles irgendwie. Ich gucke immer, daß ich mit den Routinen
so universell wie möglich bleibe und nicht mehr "verbaue", als ich
wirklich brauche. So kann man später Programmteile auf verschiedene
Prozis in verschidene Programme einfügen und hat dann schon eine
gewisse Struktur und noch Platz für andere Faxen. Für ´ne Leuchte, die
maximal mit 200Hz für ein ruhiges Bild getaktet werden muß, verkloppe
ich ungerne Hardware-PWMs, die ich für schnelle und saubere
Spannungssysnthese beispielsweise brauche - aber ist ja wurscht...
Jeder macht´s anders ;-).

Autor: Florian Labermeyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tipp! Jetzt funktionierts wunderbar!
Das mit den 3 Registern als Zähler-Vergleich hat ich auch so, jedoch
hab ich in der ISR des Timers nur alle Ports auf 1 gesetzt und im
"laufenden" Programm die 3 Zählerwerte auf das TCNT0-Register
verglichen um dann die Ports wieder auf 0 zu steuern. Da ich aber
momentan außer des Vergleichs nichts anderes in der Schleife mache,
versteh ich aber nicht wirklich warum das Timing nicht klappte. Die
Schleife müsste doch (meiner Meinung nach ;-)) in der Zeit zwischen 2
ISR etliche male durchlaufen werden, was für eine ausreichende
Auflösung der PWM reichen müßte(?). Oder liegt`s dann tatsächlich an
der sekündlichen ISR des Timers1, der das inkrementieren macht?

Gruß und schöne Feiertage!

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das weiß ich nicht. Auf jeden Fall ist der Prozi schnell genug,
sämtliche Aktualisierungen innerhalb einer ISR zu machen, ohne daß Dir
das auffallen würde, wenn Du in derselben ISR auch die PWM-Zähler
aktualisierst. Nur wenn Du per Prozessorhauptschleife Dein PWM machst
und mit einer ISR dazwischenspringst, kommt Dein Timing durcheinander,
weil die Hauptschleife dann sehr schnell ist und die ISR
dazwischenfunkt und sämtliche Register mehrfach überfahren werden
können. Dann kommt´s zu dem merkwürdigen Flackern. Deshalb:
zeitkritische Sachen immer durch eine Timer-ISR laufen lassen und
zeitunkritische Sachen in freilaufende Schleifen packen, die ruhig auch
mal unterbrochen werden dürfen. Und nicht vergessen, in ISR und Main
doppelt genutzte Register am Anfang der ISR zu sichern und am Ende
wieder zu restaurieren (insbesondere Statusregister).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.