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. |
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 |
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. also dann: pimp ur room! |
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.... |
× |