Forum: Projekte & Code 8-fach 12-Bit Soft-PWM LED-Dimmer für mega48


von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

8-fach 12-Bit Soft-PWM LED-Dimmer für mega48

Dimmen mit der Hardware-PWM eines mega/tiny ist eigentlich eine von den 
einfachen Übungen.
Leider ergeben sich damit bei kleinen PWM-Werten subjektiv große 
Helligkeitsveränderungen, während bei den hohen Wert kaum noch ein 
Effekt erkennbar ist.

Will man Beleuchtung steuern, dann muss Rücksicht genommen werden auf 
die menschliche Empfindung/Empfindlichkeit für Helligkeitsveränderungen:
Die Helligkeit sollte logarithmisch zunehmen.

Damit zeigen sich aber auch schon die Grenzen der Hardware-PWM mit ihrer 
8-Bit Auflösung: im Zahlenraum von 255 lassen sich nur begrenzt viele 
Zahlen einordnen, die in einem logarithmischen Verhältnis stehen.
Somit muss eine höhere PWM-Auflösung her, die allerdings dann nur 
softwaremäßig realisiert werden kann.
Anliegend ein Beispiel, mit dem man/frau bis zu 8 LEDs mit einer 
Auflösung von 12-Bit bei einem PWM-Takt von 76Hz ansteuern kann.

Der Dimmer wird über TWI oder RS232 angesteuert.

Zusätzlich sind noch zwei Schnörkel eingebaut:
Die Überleitung vom aktuellen Helligkeitswert auf einen neuen mit bis zu 
255 Zwischenschritten und
ein Zufallsmodus, in dem ununterbrochen die Überleitung zwischen neuen 
Zufallswerten wiederholt wird.

Weitere Beschreibung gibts in der readme sowie im dokumentierten C-Code.

Als Hardware wurde ein mega88 verwendet, es reicht aber auch ein mega48 
oder mega8 (bei letzterem müssen einige Registernamen angepasst werden).

Viel Spaß beim Dimmen,

Michael S.

von Simon K. (simon) Benutzerseite


Lesenswert?

Schon mal den xmega angeschaut? ;) Bis zu 24 PWM Ausgänge (16Bit) und 
32MHz Takt. Damit habe ich eine 16Bit PWM bei 500Hz (absolut 
Flimmerfrei).

von Georg (Gast)


Lesenswert?

Morgen, so hoffe ich, liefert mir Reichelt die Bauteile für meine bunte 
LED Lampe. Laufen soll die mit einem Mega8, natürlich ist mir erst nach 
der Bestellung eingefallen, dass dieser nur einen 16 bit Timer hat.

Dein Code kommt mir deshalb sehr gelegen wofür ich mich an dieser Stelle 
bedanken möchte!

Gruß, Georg

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

nach gut 2 Jahren habe ich den LED-Dimmer noch einmal überarbeitet:

Die Interrupt-Routinen sind nun in ASM geschrieben, dadurch wird bei 
einem PWM-Takt von 81Hz eine Auflösung von 12.5Bit (0 - 6150) erreicht
- gegenüber bisher 75Hz bei 12Bit (0 - 4096).

Die aktualisierte Beschreibung und einen Schaltplan gibts in der 
Readme.pdf

Viel Spaß bei Dimmen,

Michael S.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

hier noch der Programmcode.

von Chris (Gast)


Lesenswert?

Hallo,

hat den code von Michael schon jemand auf dem atmega8 probiert? bzw. 
kann mir jemand sagen was ich abändern muss damit er auf dem atmega8 
funktioniert?

von Michael S. (Gast)


Lesenswert?

Hallo,

beim Mega8 haben einige Register/Bits andere Bezeichnungen.
Der Compiler wird sich entsprechend beschweren.

Und der Assembler-Code muss eingebunden werden.

mfg

Michael S.

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.