
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Rene, > Ich gehe - wie immer - davon aus, daß du die Bugs in den Interruptroutinen (siehe die Tolle CC-intern > Sammlung) kennst. ich habe die CC erst seit gut 2 Wochen und konnte mich noch nicht wirklich ausführlich mit den ganzen Infos rundum beschäftigen. Den asm Code habe ich unten mal angefügt, aber wie gesagt, das ist noch sehr suboptimal (aber immerhin dokumentiert :-)). Na ja, habe auch nur etwa 20 Minuten dafür investiert. Insbesondere die PWM für 2 Dimmer ist noch grottenschlecht ;-) aber sie funktioniert. Was mich halt wundert ist, dass das mit der Beep Funktion kollidiert, aber da schaue ich mal in die Buglisten. Danke für den Tipp! Ich werde in den nächsten Tagen den Code sicher nochmal überarbeiten und optimieren. Grüße, Christian p.s. habe gerade gesehen, dass ich Adresse $52 genutzt habe. Ich war mir sicher, dass es 51 sein sollte. Vielleicht hat sich das Problem gerade erledigt... org $101 ; Lade Programm ab Adresse $101 ; installiere nur Port 1 StartP1: lda #TimerP1-StartP1+1 ; Berechne Offset zum Label TimerP1 bset #0,$05 ; Port 1 als Ausgang schalten sta $52 ; installiere TimerP1 als Interrupt-Handler rts ; installiere nur Port 2 StartP2: lda #TimerP2-StartP1+1 ; Berechne Offset zum Label TimerP2 bset #1,$05 ; Port 2 als Ausgang schalten sta $52 ; installiere TimerP2 als Interrupt-Handler rts ; installiere Port 1 und Port 2 zusammen StartP1AND2: lda #TimerP1P2-StartP1+1 ; Berechne Offset zum Label TimerP1P2 bset #0,$05 ; Port 1 als Ausgang schalten bset #1,$05 ; Port 2 als Ausgang schalten sta $52 ; installiere TimerP2 als Interrupt-Handler rts ;----------------------------------------------------------------------------- ; Name: TimerP1P2 ;----------------------------------------------------------------------------- ; Beschreibung: ; Diese Funktion ruft einfach nur die beiden PWM Funktionen für die Ports ; 1 und 2 hinterinander auf. Dadurch werden 2 Dimmer steuerbar. ;----------------------------------------------------------------------------- TimerP1P2: bsr TimerP1 ; Aufruf der PWM für Port 1 bsr TimerP2 ; Aufruf der PWM für Port 2 rts ;----------------------------------------------------------------------------- ; Name: TimerP1 ;----------------------------------------------------------------------------- ; Beschreibung: ; Diese Funktion implementiert die PWM Steuerung von Port 1. Dazu wird ; Port 1 eingeschaltet und eine Schleife läuft N-Mal durch, bis Port 1 ; wieder ausgeschaltet wird. Die Schleife dient nur als Verzögerung ; und ist abhängig von der Geschwindigkeit des Prozessors. Vernünftige ; Werte für die Steuerung sind daher experimentell zu ermitteln. ; Der Wert N für die Schleife ist ein Byte und wird aus dem ersten ; Speicherbyte des Hauptspeichers gelesen. ;----------------------------------------------------------------------------- TimerP1: lda $a1 ; Byte 1 des Hauptspeichers laden bset #0,$01 ; Port 1 einschalten LoopP1: deca ; Wert aus Byte 1 um 1 erniedrigen bne LoopP1 ; und solange wiederholen, bis der Wert 0 erreicht ist bclr #0,$01 ; Port 1 wieder ausschalten lda #$01 ; andere intr ebenfalls ausführen rts ;----------------------------------------------------------------------------- ; Name: TimerP2 ;----------------------------------------------------------------------------- ; Beschreibung: ; Diese Funktion implementiert die PWM Steuerung von Port 2. Dazu wird ; Port 2 eingeschaltet und eine Schleife läuft N-Mal durch, bis Port 2 ; wieder ausgeschaltet wird. Die Schleife dient nur als Verzögerung ; und ist abhängig von der Geschwindigkeit des Prozessors. Vernünftige ; Werte für die Steuerung sind daher experimentell zu ermitteln. ; Der Wert N für die Schleife ist ein Byte und wird aus dem zweiten ; Speicherbyte des Hauptspeichers gelesen. ;----------------------------------------------------------------------------- TimerP2: lda $a2 ; Byte 2 des Hauptspeichers laden bset #1,$01 ; Port 2 einschalten LoopP2: deca ; Wert aus Byte 1 um 1 erniedrigen bne LoopP2 ; und solange wiederholen, bis der Wert 0 erreicht ist bclr #1,$01 ; Port 1 wieder ausschalten lda #$01 ; andere intr ebenfalls ausführen rts end |
| Antwort schreiben |