Benutzername:   Noch nicht registriert?
Passwort:   Passwort vergessen?
iB Code Einmal klicken um den Tag zu öffnen, nochmal klicken zum Schliessen

Top Smilies
Beitrag

HTML ist on für dieses Forum

IkonCode ist on für dieses Forum

SMILIES LEGENDE ansehen

Beitragsoptionen

Möchten Sie Ihre Signatur hinzufügen?
Wollen Sie per Email über Antworten informiert werden?
Wollen Sie Emoticons in Ihrem Beitrag aktivieren?
 

Beitragsrückblick für Gemoddet wird: Mein Zimmer :D (die neuesten Beiträge zuerst)
nubbi Erstellt: 11:18 am 23. Okt. 2005
habe schon seit über nem monat 300€ vonner stadt ausstehend, aber die sch**** bürokraten kommen einfach nich mit meiner kohle rüber. deshalb is im moment stillstand. das programm ist fertig, funzt auch so weit inner simulation, aber testen kann ichs noch net, da ich weder µC noch passende LEDs habe im Moment melde mich, sobald es neues gibt!
insider99 Erstellt: 10:14 am 23. Okt. 2005
und wie schauts jetzt aus? irgentwas neues
nubbi Erstellt: 23:23 am 3. Okt. 2005
über einen monat später gibts das erste update ^^
könnte ja sein, dass irgendjemand über google nach was ähnlichem sucht =)

hier der bisherige quellcode in avr-assembler:

Code

.include "tn2313def.inc"

.def temp = r16
.def temp2 = r17
.def pwm_r = r21
.def pwm_g = r22
.def pwm_b = r23

; Eigene Flags zur Vereinfachung des Farbübergangs bei Farbänderung
.def flags = r24
.equ r_reached = 0
.equ g_reached = 1
.equ b_reached = 2

.equ wait_length = 50;
; Interrupt Vectors

.org 0x00; Reset
rjmp init; Initroutine aufrufen

pwm_activate:
ldi temp, (1<<PB2) | (1<<PB3) | (1<<PB4); PB2-4 (OCnx) als
out DDRB, temp; Ausgang deklarieren
ret; -> PWM-Signal

pwm_deactivate:
ldi temp, 0x00; PB2-4 (OCnx) als
out DDRB, temp; Eingang deklarieren
ret; -> Kein PWM-Signal

pwm_setvalues:
out OCR0A, pwm_r; Compare-Register auf
out OCR0B, pwm_g; entsprechende Werte
out OCR1AL, pwm_b; setzen
ret

changecolor:
push temp; Temp sichern
change_loop:
; ------[rot]-------
in temp, OCR0A; OCR0A in temp laden
cp temp, pwm_r; temp mit pwm_r vergleichen
breq set_r_reached; wenn temp = pwm_r mit gruen weiter
brlo inc_r; wenn temp < pwm_r OCR0A erhöhen

dec_r:
dec temp; temp verringern und in OCR0A speichern
out OCR0A, temp
rjmp change_g; inc-Routine skippen

inc_r:
inc temp; temp erhöhen und in OCR0A speichern
out OCR0A, temp; ------[/rot]-------

change_g:; ------[gruen]------
in temp, OCR0B; OCR0B in temp laden
cp temp, pwm_g; temp mit pwm_g vergleichen
breq set_g_reached; wenn temp = pwm_g mit blau weiter
brlo inc_g; wenn temp < pwm_g OCR0B erhöhen

dec_g:
dec temp; temp verringern und in OCR0B speichern
out OCR0B, temp
rjmp change_b; inc-Routine skippen

inc_g:
inc temp; temp erhöhen und in OCR0B speichern
out OCR0B, temp; ------[/gruen]------

change_b:; -------[blau]-------
in temp, OCR1AL; OCR1AL in temp laden
cp temp, pwm_b; temp mit pwm_b vergleichen
breq set_b_reached; wenn temp = pwm_b warten
brlo inc_b; wenn temp < pwm_b OCR1AL erhöhen

dec_b:
dec temp; temp verringern und in OCR1AL speichern
out OCR1AL, temp
rjmp check_if_all_reached; inc-Routine skippen

inc_b:
inc temp; temp erhöhen und in OCR1AL speichern
out OCR1AL, temp; -------[/blau]------

check_if_all_reached:
sbrs flags, r_reached; wenn x_reached = false, check abbrechen
rjmp check_negative; und nächsten Durchlauf starten
sbrs flags, g_reached
rjmp check_negative
sbrs flags, b_reached
rjmp check_negative
ldi flags, 0x00; Statusbits wieder auf false setzen.
ret; Routine verlassen

check_negative:
rjmp wait_long
rjmp change_loop

init:
ldi temp, (1<<CS00); TCNT0 Prescaler = 1
out TCCR0B, temp

ldi temp, (1<<CS10) | (1<<WGM12); TCNT1 Prescaler = 1
out TCCR1B, temp; TCNT1 TOP = 0x00FF

ldi temp, (1<<COM0A0) | (1<<COM0B0) | (1<<WGM00) | (1<<WGM01); Fast PWM/Set OC0A@Top
out TCCR0A, temp; Fast PWM/Set OC0B@Top
out TCCR1A, temp; Fast PWM/Set OC1A@Top

ldi pwm_r, 0xFF; Alle Farbwerte auf
ldi pwm_g, 0xFF; 0xFF setzen
ldi pwm_b, 0xFF; -> weiß

rjmp pwm_activate; PWM aktivieren

infinite_loop:; Endlosschleife, wenn
nop; nichts zu tun ist
rjmp infinite_loop; NOP damit nichts wegoptimiert wird


wait_long:
push temp; Temp sichern
ldi temp, 0x00; Temp als Zählervariable benutzen

wlloop:
rjmp wait_short; 2. Warteroutine aufrufen
inc temp; Zähler erhöhen
cpi temp, wait_length; Checken ob temp < wait_length
brlo wlloop; wenn ja, zurück springen

pop temp; Temp wiederherstellen
ret; Routine verlassen

wait_short:
push temp; Temp sichern
ldi temp, 0x00; Temp als Zählervariable benutzen

wsloop:
inc temp; Zähler erhöhen
cpi temp, wait_length; Checken ob temp < wait_length
brlo wsloop; wenn ja, zurück springen

pop temp; Temp wiederherstellen
ret; Routine verlassen

set_r_reached:
ldi temp, (1<<r_reached); r_reached-bit in temp laden
or flags, temp; flags mit temp verodern
rjmp change_g; zur change_g-Routine springen

set_g_reached:
ldi temp, (1<<r_reached); g_reached-bit in temp laden
or flags, temp; flags mit temp verodern
rjmp change_b; zur change_b-Routine springen

set_b_reached:
ldi temp, (1<<b_reached); b_reached-bit in temp laden
or flags, temp; flags mit temp verodern
rjmp check_if_all_reached; zur Check-Routine springen


Eine Kommunikation zwischen PC und Controller ist noch nicht implementiert, folgt aber in den nächsten Stunden!
nubbi Erstellt: 20:12 am 26. Aug. 2005
Dann bekomm ich aber keine gleichmäßige Ausleuchtung hin =/ Außer ich beleuchte nur eine Wand...

Andere Frage, was benutze ich am besten als Diffusor?

(Geändert von nubbi um 20:30 am Aug. 26, 2005)
Marodeur Erstellt: 19:51 am 26. Aug. 2005
Musste mal bei ebay fragen.
Aber 500 ultrahelle sind auch für ein großes Zimmer mehr als ausreichend.
Ich würd sagen 100-200 sollten schon ausreichen.
Weniger Antworten Mehr Antworten
nubbi Erstellt: 19:40 am 26. Aug. 2005
Habe mir jetzt überlegt, in die "Stufe" einen trüben Plexiglasboden als Diffusor zu machen und die LEDs seitlich darüber leuchten zu lassen, als quasi senkrecht zur Wand. Hoffe mal, dass das so funktioniert. Kennt jemand eine Möglichkeit, sehr günstig LEDs zu bekommen? Und damit mein ich günstiger als 20Cent/Stück, denke, ich werde für das ganze Zimmer um die 500 pro Farbe benötigen :/

nubbi
nubbi Erstellt: 19:03 am 22. Aug. 2005
naja, der code der µCs ist ja relativ kurz und somit recht schnell erledigt, zumal man das ja alles vorher am PC simulieren kann.
Die Software für die Farbübergänge kann man ja am PC mit ner anständigen Hochsprache programmieren, somit auch kein großer Aufwand. Viel mehr graust mir vor der Löterei :ugly:
maxpayne Erstellt: 18:50 am 22. Aug. 2005
wird bestimmt sehenswert! vorallem, wenn das tatsächlich mit weichen übergängen machbar ist. sowas sollte ja sicher schon riegenwo fertig sein. ich kann mir nur vorstellen, dass es wochen dauert, soetwas selbst zu schreiben. :blubb: also dann: pimp ur room! :lol:
Modding Henus Erstellt: 22:58 am 20. Aug. 2005
Ich stell mir das Sau cool vor....sieht bestimmt Hammermäßig aus....
Marodeur Erstellt: 20:56 am 20. Aug. 2005
Och, den Abstrahlwinkel kann man ja auch anpassen. Einfach oben abschleifen und neu polieren. Da hatte ich auch mal n Tutorial zu, is aber in meiner Linksammlung verschütt gegangen....
×