PWM-LED-Dimmer mit Attiny15

Gast #734380
Lesenswert?

Hallo
Ich stelle Euch ein Programm vor, welches zum Dimmen von LED mittels 
zweier Taster oder eines Potentiometers von 47 Kiloohm dient. Dazu 
schließt man einen N-Kanal (Logik-Level) Leistungs-Mosfet über 47 Ohm an 
PB1 an.
Der Tiny 15 kann durch einen Tiny 25 ersetzt werden, eventuell müssen
dann einige Registernamen vor dem Assemblieren des Programmes geändert 
werden.

Ich habe es ausführlich kommentiert.

Hinweis: Ich bin nicht DER Assemblerprogrammierer d.h. es kann sicher 
auch anders gelöst werden, aber es funktioniert. ;-)

MfG Paul
Angehängte Dateien:
Gast #735254
Lesenswert?

Gebt bei Gelegenheit mal Rückmeldung, was ihr damit/daraus gemacht habt.

Denn:
Nichts ist schlimmer,
als ein defekter Dimmer.
Der geht manchmal,
doch nicht immer
und dann brennt das Zimmer!

:-)

MfG Paul
Gast #736292
Lesenswert?

Mein erster Kommentar dazu: Du solltest Dir eine andere Formatierung 
angewöhnen. Man kann die Symbole von den Befehlen schwer unterscheiden. 
Ein Vorschlag von mir:
1
    .include "tn15def.inc"
2
    .def temp =r16
3
    .def pwm =r17
4
    .cseg
5
    .org $0000
6
;-------------------------
7
start:
8
    ldi temp,0x62
9
    ldi pwm,0x00        ; Setze erstmal "pwm" auf 0
10
    out TCCR1,temp      ; Lade Timerregister, damit PWM stattfindet
11
    ldi temp,0x00
12
    out OCR1A,temp      ; Setze einen Anfangswert in OCR1A
13
;-------------------------
14
Init_ad_wandler:
15
    ldi temp,0b00100010 ;8Bit Auflösung,AREF intern, linksbündig, AD Wandler an PB3
16
    out admux,temp
17
    ldi temp,0b11100011 ;ADC einschalten, freilaufend, Takt=1/4 CPU Takt
18
    out adcsr,temp
19
;-------------------------

Schön finde ich, daß Du Symbole nicht nur als Sprungadresse verwendest, 
sondern auch für Dokumentation. Man findet sofort die Initialisierung 
der Ausgänge.

Ansonsten hättest Du den Potentiometerbetrieb elegant auch mit Hilfe von 
Interrupts lösen können. Den Mikrocontroller hättest Du dann schön 
schlafen gelegt, während AD-Wandler und Timer für Dich arbeiten.

Funktioniert hat es bei mir Einwandfrei, eine schöne Basis, wenn man 
schnell einen PWM-Dimmer benötigt. Ich habe den FET übrigends durch 
einen LED-Treiber mit Enable-Eingang ersetzt: TLE4242.

mfg, Stefan.
Gast #736297
Lesenswert?

Ja, da hast Du recht; Deine Art der Formatierung ist übersichtlicher.
Das werde ich mir annehmen. Es freut mich, daß Du den Code nützlich 
fandest, weil es mir auch Ansp0rn ist, weiter mit Assembler zu arbeiten.

Normalerweise bin ich Bascom - Fan, aber hier "mußte" ich anders ran, 
weil
Bascom bei MC's ohne SRAM keine Variablen anlegen kann. :-(

Schöne Feiertage noch

Paul
Gast #736852
Lesenswert?

Naja, so klein ist der gar nicht. Ist mit jedem ordentlichen 
Elektroniklötkolben zu löten. Schwieriger als DIL-Bauteile ist das gar 
nicht. Ein Nachteil: das Ding ist ein Linearregler, produziert 
entsprechend eine hohe Abwärme.

Dein Ausflug in die Assembler-Welt kann gar nicht schaden. Allerdings 
gehört auch der Tiny15 zu den aussterbenden AVRs und wird ersetzt durch 
den Tiny25 bzw. Tiny45 und Tiny85. Die sind dann auch wieder mit Bascom 
leicht zu programmieren, da sie SRAM besitzen.

mfg, Stefan.
Gast #736911
Lesenswert?

Ich weiß, daß die neueren Typen SRAM haben, weil ich in letzter Zeit wie
ein "armer Irrer" Datenblätter gelesen und mit Übersetzungssoftware das 
Wichtigste in's Deutsche gebracht habe. Die Tiny 15 besaß ich noch und 
sie haben mich so geärgert (Fusebits waren bei den neuen Chips anders 
als im Datenblatt gesetzt Grumpf), daß ich sie unbedingt in Gang 
bringen wollte.

Ich werde mir mal ein paar TLE4242 bestellen, das scheint ja damit gut 
zu gehen. Die Frage ist bei mir immer: Woher weiß man, was es 
überhaupt für Schaltkreise gibt, die einem das Leben leichter machen 
können?

MfG Paul
Gast #992674
Lesenswert?

Hallo Leute.
Ich muss jetzt zu diesen Tread auch ein paar Zeilen kritzeln.
Da ich mich erst seit kurzen mit der Thematik AVR abgebe (bin eigentlich 
aus der Nachbarwelt 8051) habe ich diesen extrem coolen Code gefunden.
Da ich wie gesagt aus der 8051 Ecke komme, ist das schon einen gewisse 
Umstellung auf AVR'S. Wobei ich schon der öffteren mal einen Syntax 
error habe. Ziemlich seltsam ist die Handhabung der FUSE-Bits jetzt habe 
ich schon einige tiny13+V die mal bekanntschaft mit einen HV-Progger 
machen wollen :)
Ich benutze den Code eignetlich um der Programmierung bzw die 
Registereinstellungen ein wenig auf die Spur zu kommen. Learning while 
doing... Damit der Code auch seinen Zweck erfüllt, treibt er zur Zeit 
eine 1Watt Luxor mit Strombegrenrung an einen 7.2V Akku.

Ronnie

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren