Den vollständigen Quellcode (für Tiny12/15 oder Tiny13) gibts auf Anfrage.
Mit der RGB-Dimmer-Software sind folgende Funktionen möglich
1 . Drücken Sie den Taster einmal kurz, um die LED’s EIN oder AUS zu schalten.
2. Um eine LED zum Dimmen auszuwählen, drücken Sie den Taster ca 1 Sekunde lang und lassen ihn dann los. Die gewählte LED leuchtet kurz mit maximaler Helligkeit, während die beiden anderen dunkel geschaltet werden. So können Sie die ausgewählte LED leicht identifizieren.
3. Um die Helligkeit der ausgewählten LED zu ändern, halten Sie den Taster dauerhaft gedrückt. Die Helligkeit ändert sich nun langsam Auf und Absteigend zwischen 0% und 100%. Lassen sie den Taster los, sobald die gewünschte Helligkeit erreicht ist.
Wechseln sie nun die LEDs wie unter Punkt 2 beschrieben und stellen für jede LED die Helligkeit entsprechend Ihren Wünschen ein. Dadurch können Sie eine vielzahl von Mischfarben erzeugen.
4. Um die Helligkeitseinstellungen der 3 LED’s dauerhaft abzuspeichern, schalten Sie die LED’s kurz aus und wieder ein, wie unter Punkt 1 beschrieben.
5. Die LED’s können nach dem Anlegen der Betriebsspannung entweder eingeschaltet oder ausgeschaltet sein. Um diesen Zustand umzuschalten, halten Sie den Taster gedrückt, während Sie die Betriebsspannung anlegen.
Alle Funktionen des Modules können über einen einzigen Taster gesteuert werden (PB3/PB4)
| ;RGB Dimmer Software
;(c) 2004 Markus Vohburger ;Gewerbliche Nutzung untersagt. .include "tn12def.inc" .def omod = r29 .def temp1 = r16 .def temp2 = r17 .def output = r18 .def swcount0 = r19 .def output = r20 .def pwmcount = r21 .def pwmvalue_red = r22 .def pwmvalue_green = r23 .def pwmvalue_blue = r24 .def direction = r25 .def colorselect = r26 .def pwmvalue = r27 .def dirty = r28 .equ EE_OSCCAL=$3f .equ EE_PWM_RED=$00 .equ EE_PWM_GREEN=$01 .equ EE_PWM_BLUE=$02 .equ EE_OMOD=$03 .equ timer_value = $80 ;reset handler .org $0000 rjmp main ;timer overflow interrut handler .org OVF0Addr rjmp OVF0Handler .org $0010 main: ;stack setup ;read osccal byte waitstableosccal: sbic eecr,eewe rjmp waitstableosccal ldi temp1,EE_OSCCAL out eear,temp1 sbi eecr,eere in temp1,eedr out osccal,temp1 ;port setup ;port b input with pullups ldi temp1,$00 out ddrb,temp1 ;port b output off, pullups on ldi temp1,$18 out portb,temp1 setstatus: sbic eecr,eewe rjmp setstatus ldi temp1,EE_OMOD out eear,temp1 sbi eecr,eere in temp1,eedr ;Toggle Power On Mode, only onboard-Pushbutton sbic pinb,3 rjmp notoggle toggle: inc temp1 ;aktuellen wert lesen ;und sicherstellen, dass er gültig ist ;neuen status schreiben writeok: sbic eecr,eewe rjmp writeok ldi temp2,EE_OMOD out eear,temp2 out eedr,temp1 sbi eecr,eemwe sbi eecr,eewe notoggle: sbis pinb,pb3 rjmp notoggle sbis pinb,pb4 rjmp notoggle ldi omod,$00 sbrs temp1,1 ldi omod,$07 ldi temp2,$00 sbrs temp1,0 ldi temp2,$07 ldi temp1,$1f eor temp1,omod out portb,temp1 out ddrb,temp2 ;Timer zurücksetzen ldi temp1,timer_value out tcnt0,temp1 ;Timer interrupts an ldi temp1,(1<<toie0) out timsk,temp1 ;Timer starten ldi temp1,$04 out tccr0,temp1 ldi swcount0, $00 ldi pwmcount,$00 rcall readsettings ldi colorselect,$00 ldi direction,$00 ldi dirty,$00 sei loop: ;leds aus ldi output,$1f cp pwmvalue_red,pwmcount brsh check_green ;leds an cbr output,$01 check_green: cp pwmvalue_green,pwmcount brsh check_blue ;leds an cbr output,$02 check_blue: cp pwmvalue_blue,pwmcount brsh writeoutput ;leds an cbr output,$04 writeoutput: eor output,omod out portb,output inc pwmcount sbic ddrb,0 rjmp loop ;wenn LED's aus sein sollen, dann auch die Pullups abschalten ldi output,$18 out portb,output ; warten, bis über Tastendruck die Pullups wieder angeschaltet werden. waiton: sbic ddrb,0 rjmp loop rjmp waiton OVF0Handler: in r1,sreg sbis pinb,4 rjmp pressedhandler sbis pinb,3 rjmp pressedhandler cpi swcount0,$02 brlo exitreleasehandler cpi swcount0,$1f brsh exitreleasehandler cpi swcount0,$08 brsh setcolor ;turn on / Off in temp1,ddrb ldi temp2,$07 eor temp1,temp2 out ddrb,temp1 rcall writesettings rjmp exitreleasehandler setcolor: ;turn on ldi temp1,$07 out ddrb,temp1 inc colorselect cpi colorselect,$03 brne showcolor ldi colorselect,$00 showcolor: ldi temp1,$1e cpi colorselect,$00 breq writecolor ldi temp1,$1d cpi colorselect,$01 breq writecolor ldi temp1,$1b writecolor: eor temp1,omod out portb,temp1 ldi temp2,$00 delay: dec temp1 nop nop nop brne delay dec temp2 brne delay exitreleasehandler: ldi swcount0,$00 exit_ovf0Handler: out sreg,r1 reti ..... Vollständigen Quellcode auf Anfrage. |
Ursprünglich wurde diese Software auf einem Atmel Tiny12 entwickelt, inzwischen gibt es natürlich wesentlich leistungsfähigere Tiny Controller von Atmel. Insbesondere die höhere Taktfrequenz ermöglicht eine schnellere Pulsweitenmodulation, somit wird die PWM praktisch ohne sichtbares Flackern erzeugt. Auch gibt es inzwischen Atmel Controller im sehr kleinen 6 polien SOT Gehäuse, damit lässt sich die Schaltung extrem miniaturisiert aufbauen, was zusätzlich noch weitere Einsatzgebiete erschliesst.
Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen: