Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: PWM-Frequenz erhöhen und Echtzeituhr nutzen Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Tommy - 8.08.2006 0:04)
 Als Antwort auf PWM-Frequenz erhöhen und Echtzeituhr nutzen von Dietmar - 6.08.2006 22:33
Tommy nutzt:  Open-Micro, Open-Mini
Hallo Dietmar!

Ich fürchte, ich hab von dem Code nur die hälfte verstanden, da mein Chinesisch eindeutig besser ist als mein Assembler, Aaaaalso, Wenn ich den unten Stehenden Code in mein Programm einbinde, dann wird der PWM-Takt auf 200Hz erhöht und die Uhr geht trotzdem, richtig? Kann ich die PWM-Routinen ganz normal einbinden oder muß da was gemacht werden? Könntest du den code wohl noch ein bischen kommentieren? Ich will mein Assembler ja verbessern.

> Hallo Tommy!
>
> Wenn Du die Echtzeituhr und gleichzeitig eine PWM mit höherer Frequenz benötigst, würde ich den PWM-Takt auf z.B. 200 Hz erhöhen und nur jeden vierten Timer-Overflow-Interrupt an das Betriebssystem weiterleiten. Auf der OM kannst Du in jeden Systeminterrupt eine eigene Assembler-Interruptroutine (IIAR) einbinden und am Ende dieser Routine durch Setzen oder Löschen des Carry-Flags bestimmen, ob das Betriebssystem den aktuellen Interrupt auswerten soll oder nicht. Wenn Du nur jeden vierten Interrupt durchläßt, läuft die Echtzeituhr trotz höherem Timer-Overflow-Takt ganz normal weiter. Der folgende Code demonstriert das...
>
> INCLUDE "OM.DEF"
>
> DEFINE TOflZaehler FREERAM2
>
> ' --- Die Assembler-Interruptroutine ----------------------------------------
>
> ' Das Schluesselwort INLASM kennzeichnet die folgende PROCEDURE als
> ' Inline-Assemblerroutine (IAR). Dadurch, und dass sie unmittelbar
> ' am Anfang des Programms steht, wird sie zu einer IIAR, also zu einer
> ' Interrupt-Inline-Assemblerroutine, die bei einem aktivierten User-
> ' Interrupt gestartet wird. Der OCBASIC-Compiler setzt automatisch ein
> ' "GOTO main" vor die Routine.
>
> PROC TOFL_iiar INLASM
>
> ! cbeqa #iTOFL,TOFL_iiar_1
> ! jmp TOFL_iiar_end+2
>
> #TOFL_iiar_1
> ! inc TOflZaehler
> ! lda TOflZaehler
> ! cmp #4
> ! bne TOFL_iiar_2
> ! clr TOflZaehler
> ! clc
> ! rts
>
> #TOFL_iiar_2
> ! sec
> ! rts
>
> END PROC
>
> #TOFL_iiar_end    'Direkt hier hinter muss die naechste IIAR folgen
>
> ' --- Das Hauptprogramm -----------------------------------------------------
>
> #main
>
> TOflZaehler=0     'Zaehler auf Null setzen
> UIRTofl=ON        'IIAR bei Timer-Overflow-Interrupt aufrufen
> TSC=&b01000100    '200 Hz PWM-, gleich TOFL-Takt
>
> WHILE TRUE
>   WAIT TIMER=0
>   PRINT second
>   WAIT TIMER<>0
> WEND
>
> Viele Grüße
> Dietmar

 Antwort schreiben

Bisherige Antworten:

Re: PWM-Frequenz erhöhen und Echtzeituhr nutzen (von Dietmar - 10.08.2006 1:00)