Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: CAPCOM2, PWM, Wer kennt sich mit Interrupt aus? Kategorie: Progr. Assembler, TaskingTools, OS (von TManiac - 25.01.2007 23:07)
Als Antwort auf CAPCOM2, PWM, Wer kennt sich mit Interrupt aus? von Markus P. - 4.01.2007 3:05

Hallo,

der Timer muss nicht unbedingt von 0h an laufen. Es gibt ein Reload Register. Bei einem √?berlauf
wird der Wert welcher darin steht als neuer Startwert genommen. Somit bestimmst du also mit dem
Reload wie lang eine Periode deines PWM Signals ist.
Es gibt vier Varianten wie der C164 auf ein Compare reagiert:
-> Mode 0 (in deinem Bsp CCMOD16=100b)
Es wird nur in die Interruptroutine verzweigt. Das hei√?t auch das entsprechende Pin wird nicht getogglt.
Es sind in diesem Mode abe mehrere Interupts pro Durchlauf erlaubt. Du kannst also das zB CC16
in der Interuptroutine ändern damit es zu einem erneuten Auslösen kommt.
Der Timer Overflow wird hier nicht weiter ausgewertet, es kommt nur um reload.
{Mode 0 unterst√ľtzt noch den Douple Register Mode, aber der ist erst der n√§chste Schritt. Wenn du das
auch das was noch kommt verstanden hast, können wir weiter machen}
-> Mode 1 (CCMODxx=101b)
Funktioniert eigentlich wie Mode 0, plus das Hardwaretogglen des Pins gleichzeitig zum Interupt.
-> Mode 2 (CCMODxx=110b)
ist wie Mode 0. Nur das jetzt nur ein Compare pro Durchlauf einen Interupt auslöst.
! es wird kein Pin getogglte
-> Mode 3 (CCMODxx=111b)
hier kommt jetzt alles zusammen. Es wird nur ein Interupt pro Durchlauf ausgelöst. Es wird gleichzeitig das
Pin gesetzt (nicht getogglte). Und beim Timer √?berlauf wird das Pin gel√∂scht.

Zu den Interupts ist grundsätzlich zu sagen:
Wenn einer auftritt, völlig egal welcher, wird zu der entsprechenden Stelle in der Interupttabelle gesprungen.
Hier sollte ein normaler Sprungbefehl stehen (dieser wird von Tasking automatisch erzeugt), welcher dann
einer fast normalen Routine verzweigt. Die n√∂tigen Register f√ľr den R√ľcksprung werden alle automatisch
gespeichert. Du musst nur deine Interuptroutine mit RETI beenden.

Programmierst du mehr in ASM bzw C oder fast ausschlie√?ich in C2? Dann m√ľsste ich noch einiges
ergänzen (wobei miene C2Kenntisse total vealtet sind)

MfG Tmaniac
FB88



> Hallo
>
> Compare mode:
> So wie ich aus dem Datenblatt erkennen konnte, l√§uft der timer Hoch bis zum √?berlauf(0xFFFFh)
> und f√§ngt dann wieder von vorne an. W√§hrend dessen wird st√§ndig √ľberpr√ľft ob der Timer-stand
> mit dem zuvor festgelegten wert im Register(z.B.: CC16) √ľbereinstimmt.
>
> Es kann ein Compare Mode ausgewählt werden (MODE 1) bei dem mehrere Zähler - Register
> √ľbereinstimmungen erkannt werden. (Toggle des Ausgang vor der n√§chsten Periode -> PWM)
> Dazu sollte allerdings der Wert im Register während der laufenden Periode schnell erhöht werden,
> dass  wenn der Timer weiter hochl√§uft nochmals eine √ľbereinstimmung der Werte zustande kommt.
>
> Frage: Wie kann ich einen Interrupt so einstellen dass, der wert im Capcom Register mit einem Wert
> eines anderen Registers ausgetauscht wird?
>
> Schwierige frage?
>
> Ich verstehe das mit den Interrupt leider noch nicht ganz.
> Es sollte aber laut datenblatt so irgendwie möglich sein.
>
> Danke
>
> Markus P.


    Antwort schreiben


Antworten: