Es ist ein Geschenk an meinen Onkel. Mit einem einfachem Programm. Für umfangreichere Programme sorgt er, porgrammierbegeistert ist er. Programmiert wird mit/für den ATtiny3213. Die Hardware hab ich für ihn aufgebaut.
Im Vorfeld schon mal das Endergebnis. Was ich dafür gebraucht habe:
- -Lochrasterplatine
-Widerstände
+Feste (R 150Ohm, G u.B 100Ohm )
+Einstellbare, um einen Individuelles Mischverhältnis zu bekommen (Jeweils max 500Ohm)
-LED Samsung SLSRGBW815TS
-Hohlbuchse
-Hohlbuchsenstecker
-Draht zum verbinden
-Lötkolben und Lot
-Holz und Acrylglas
-Alleskleber
-Säge
-Stemmeisen (im Notfall geht auch ein Messer)
-Acrylfarbe
-5V Steckernetzteil (es lagen aber 6,5V an)
=>Zwei Dioden zur Spannungsreduziereng
Als LED habe ich die Samsung SLSRGBW815TS genommen, schade dass Lumitronix diese oder eine vergleichbare LED nicht anbietet. Hier der Assembler Code von meinem einfachen Programm. Es ist eine unendliche Schleife ohne Möglichkeit mit das Programm im Betrieb zu verändern. (Außer mit dem Reset es von neuem beginnen zu lassen.) Die An-Zeit Intervalle sind bei allen Farben Gleich. Die Aus-Zeit Intervalle sind unterschiedlich, sodass nach einer gewissen Zeit Mischfarben entstehen. Allerdings laufen die Farben mit voller Spannung oder keiner Spannung, auch ohne schnelles ein-und ausschalten, sodass nur 7 Farben dargestellt werden können.
Fragen hierzu beantworte ich gerne. Allerdings ist das meine erstes Assembler Programm und somit mit viel Hilfe entstanden.
Code: Alles auswählen
.include "2313def.inc"
.def DunkelHellMerkerR=r16
.def DunkelHellMerkerG=r17
.def DunkelHellMerkerB=r18
.def zr0=r19
.def zr1=r20
.def temp=r21
.def ZaehlregisterRot=r22
.def ZaehlregisterGruen=r23
.def ZaehlregisterBlau=r24
.equ ZeitRotHell=100;100x100ms
.equ ZeitRotDunkel=80;8sec
.equ ZeitGruenHell=100;10sec
.equ ZeitGruenDunkel=60;6sec
.equ ZeitBlauHell=100;10sec
.equ ZeitBlauDunkel=40;4sec
.equ Rotleuchtet=$FF
.equ Gruenleuchtet=$FF
.equ Blauleuchtet=$FF
.equ Rotdunkel=$00
.equ Gruendunkel=$00
.equ Blaudunkel=$00
ldi temp, $FF
out ddrd, temp
ldi ZaehlregisterRot, ZeitRotHell
ldi ZaehlregisterGruen, ZeitGruenHell
ldi ZaehlregisterBlau, ZeitBlauHell
Farbschleife:
Rot:
dec ZaehlregisterRot
brne Gruen; Rotzeit noch nicht abgelaufen
;Rotzeit ist abgelaufen
cpi DunkelHellMerkerR, Rotleuchtet
breq RotDunkelSchalten
;zurzeit ist Rot dunkel, rot soll eingeschaltet
;werden und Merker auf Rotleuchtet setzen
cbi portd, 0
ldi DunkelHellMerkerR, Rotleuchtet
ldi ZaehlregisterRot, ZeitRotHell
rjmp Gruen
RotDunkelSchalten:
sbi portd, 0
ldi DunkelHellMerkerR, RotDunkel
ldi ZaehlregisterRot, ZeitRotdunkel
Gruen:
dec ZaehlregisterGruen
brne Blau; Guenzeit noch nicht abgelaufen
;Guenzeit ist abgelaufen
cpi DunkelHellMerkerG, Gruenleuchtet
breq GuenDunkelSchalten
;zurzeit ist Guen dunkel, Guen soll eingeschaltet
;werden und Merker auf Guenleuchtet setzen
cbi portd, 1
ldi DunkelHellMerkerG, Gruenleuchtet
ldi ZaehlregisterGruen, ZeitGruenHell
rjmp Blau
GuenDunkelSchalten:
sbi portd, 1
ldi DunkelHellMerkerG, GruenDunkel
ldi ZaehlregisterGruen, ZeitGruendunkel
Blau:
dec ZaehlregisterBlau
brne Zeitverheizen; Blauzeit noch nicht abgelaufen
;Blauzeit ist abgelaufen
cpi DunkelHellMerkerB, Blauleuchtet
breq BlauDunkelSchalten
;zurzeit ist Blau dunkel, blau soll eingeschaltet
;werden und Merker auf Blauleuchtet setzen
cbi portd, 2
ldi DunkelHellMerkerB, Blauleuchtet
ldi ZaehlregisterBlau, ZeitBlauHell
rjmp Zeitverheizen
BlauDunkelSchalten:
sbi portd, 2
ldi DunkelHellMerkerB, BlauDunkel
ldi ZaehlregisterBlau, ZeitBlaudunkel
Zeitverheizen:
;sechzehn_bit_zaehler:; Unterprogramm das 2^16 no opperation Befehle ausführt
Schleifenbeginn:
;Verheizen von Zeit
nop
nop
nop
inc zr0
brne Schleifenbeginn
inc zr1
brne Schleifenbeginn
rjmp Farbschleife


