
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Dietmar, der Timerinterrupt, den Du vorgeschlagen hast, ist für die Ansteuerung der Conrad-Dimmer nicht geeignet, da die Timerfrequenz dazu viel zu gering ist. Um die Dimmer anzusteuern müsste der Interrupt mit mind. 650Khz laufen, da der positive Puls nur zwischen 0.012 und 0.000075 Sekunden dauern darf (100% - 0% Helligkeit). Meine erste Lösung benötigt nachgerechnet in jeder 50tel Sekunden nur maximal 900 von 80000 Taktzyklen des Prozessors, was max. rund 1% der Gesamtleistung entspricht. Daher ist die Schleifenversion im Interrupt durchaus die bessere Wahl und dazu noch deutlich kürzer, als eine Anprogrammierung des anderen Interrupts. Ebenso wird von diesem Interrupt weder die Beep-Funktion noch die DCF77 Funktionalität noch das Systemtiming beeinflusst und ist damit auch robuster. Grüße, Christian > > Hallo Christian, > > ich finde es sehr gut, daß Du das Problem mit einer Assembler-Interruptroutine lösen willst. Nicht so ideal ist allerdings die Verwendung einer Schleife innerhalb der Routine. Dadurch wird die C-Control sicher stark ausgebremst. > > Der Mikrokontroller, auf dem die C-Control basiert, benutzt für zwei Interrupts (Timer Output Compare 1 und 2) die gleichen Systemressourcen. Wenn Du Deinen Assemblercode in den Interrupthandler eingebunden hast, mußt Du also selbst kontrollieren, ob Du durch den TOC1 oder TOC2 aufgerufen wurdest. TOC2 ist der "20-ms-Interrupt", TOC1 der "BEEP-Interrupt". > > Eine Idee: Vielleicht ist es am sinnvollsten, den BEEP-Interrupt zur Generierung von PWM-Signalen einzusetzen. Dann könnte man vielleicht sogar mit dem normalen BEEP-BASIC-Befehl die Auslösehäufigzeit (Frequenz) des Interrupts frei einstellen. Die normale Funktion von BEEP ginge dann allerdings verloren. Den Ausgabeport toggelst Du bei jedem Interruptaufruf. Die PWM wird durch unterschiedliche Puls/Pausen-Verhältnisse eingestellt, also in diesem Fall dadurch, daß mittels OCR1 innerhalb der Interruptroutine der nächste Toggelzeitpunkt festgelegt wird. > > Der Userpointer für Timer Output Compare 1 und 2 liegt übrigens auf Adresse $52. Den BEEP- und den 20-ms-Interrupt kann man mittels brclr #6,$13,istBEEP unterscheiden. Siehe aber auch "Fehler im Aufrufmechanismus von selbstgeschriebenen Interruptroutinen" in BUGS.TXT der CCintern-Sammlung. Das Speicherlayout findest Du in ADRESSEN.TXT. Zur Untersuchung des Betriebssystems eignet sich am besten das ROM-Listing im HTML-Format (siehe Download Area). Ganz am Ende stehen die Startadressen der verschiedenen Interruptroutinen des Betriebssystems. > > Schaue Dir am besten an, wie der BEEP-Interrupt im Betriebssystem programmiert wurde. Dann kannst Du z.B. dessen Interrupthandler ersetzen und mit gelöschtem Akkumulator ins System zurückkehren. > > Gruß, Dietmar |
| Antwort schreiben |