Das Open-Control-Projekt - Die Alternative zur C-Control-I


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 

 PWM-Frequenz erhöhen und Echtzeituhr nutzen Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 6.08.2006 22:33)
 Als Antwort auf Re: PWM und 8Mhz? von Tommy - 5.08.2006 23:25
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Mini M-Unit, Open-Mini Station, B-Control, sonstige
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

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

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