Ausgabe eines PWM-Signales auf dem ASIC von 0%-100% ohne Peaks : ================================================================= Bei der Ausgabe eines PWM-Signales mit Hilfe der CapCom-Treiber auf dem ASIC enthält das augebene Signal bei einer PWM-Rate von 100% kleine Peaks. Dies liegt daran, daß bei der Entwicklung der Treiber von einer maximalen PWM-Rate von 95% ausgegangen wurde. Um nun bei 100% PWM-Rate ein glattes Signal zu erhalten, müssen bei diesem Sonderfall die Treiber ausgeschaltet und direkt auf das Portlatch geschrieben werden. 1.) CapCom-Treiber ausschalten : Ein CapCom-Kanal ist wie folgt definiert : #define ASIC_CCCONNR6I (1<<15| 1<<14| 1<<13| 1<<12| 0<<8| 6<<0) /* LUES1 PWM */ Dabei dient Bit15 für das Ein- bzw. Ausschalten, d.h. um den CapCom-Treiber für diesen Port auszuschalten, muss Bit15 gelöscht werden. 2.) Direkt auf Port-Latch schreiben : Nach dem Ausschalten des Treibers kann direkt auf das Port-Latch geschrieben werden. Das Signal wird nicht invertiert. Komplettes Beipiel aus der HW_AS??.c ------------------------------------- #define DIS_CCCONNR_MASK 0x7FFF /* Mask to disable ASIC-CapCom-driver */ #define ENA_CCCONNR_MASK 0x8000 /* Mask to enable ASIC-CapCom-driver */ #define ASIC_DIS_LUES1_CAPCOM A_ccconnr6 = (A_ccconnr6 & DIS_CCCONNR_MASK) #define ASIC_ENA_LUES1_CAPCOM A_ccconnr6 = (A_ccconnr6 | ENA_CCCONNR_MASK) if (tvlues1 == MAXBYTE) { ASIC_DIS_LUES1_CAPCOM; /* Disable ASIC-CapCom-Driver */ /* Necessary to write direct on Portpin */ #if (GETBIT (SY_LUEKONF, 13)) /* high side switch */ W_P2_6 = TRUE; #else W_P2_6 = FALSE; #endif } else if (tvlues1 == MINBYTE) { ASIC_DIS_LUES1_CAPCOM; /* Disable ASIC-CapCom-Driver */ /* Necessary to write direct on Portpin */ #if (GETBIT (SY_LUEKONF, 13)) /* high side switch */ W_P2_6 = FALSE; #else W_P2_6 = TRUE; #endif } else { /* Normal operation */ ASIC_ENA_LUES1_CAPCOM; /* Enable ASIC-CapCom-driver for PX2.6 */ A_CCPER6 = (Word) LUES1PERIODTIME; /* PWM period time LUES1 */ #if (GETBIT (SY_LUEKONF, 13)) /* high side switch */ A_CCPW6 = mul_R16_U16U16_U16 ((Word) tvlues1 << 8, (Word) A_CCPER6); #else /* low side switch */ A_CCPW6 = mul_R16_U16U16_U16 (MAXWORD - (Word) tvlues1 << 8, (Word) A_CCPER6); #endif }