» Willkommen auf Gehäusemodifizierung «

nubbi
offline



OC God
21 Jahre dabei !


ü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!

Beiträge gesamt: 2820 | Durchschnitt: 0 Postings pro Tag
Registrierung: Mai 2003 | Dabei seit: 7876 Tagen | Erstellt: 23:23 am 3. Okt. 2005
insider99
aus dem untergrund
offline



OC God
21 Jahre dabei !

AMD Barton
1800 MHz @ 2000 MHz
45°C mit 1.60 Volt


und wie schauts jetzt aus? irgentwas neues


Werbefläche zu Vermieten

Beiträge gesamt: 1747 | Durchschnitt: 0 Postings pro Tag
Registrierung: Dez. 2002 | Dabei seit: 8011 Tagen | Erstellt: 10:14 am 23. Okt. 2005
nubbi
offline



OC God
21 Jahre dabei !


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!

Beiträge gesamt: 2820 | Durchschnitt: 0 Postings pro Tag
Registrierung: Mai 2003 | Dabei seit: 7876 Tagen | Erstellt: 11:18 am 23. Okt. 2005