189 of 323
ZBasic System Library 179 ZX Microcontroller Family OpenPWM8 Type Subroutine Invocation OpenPWM8(channel, frequency, mode) OpenPWM8(channel, frequency, mode, stat) Parameter Method Type Description channel ByVal Byte The channel to use for PWM generation. frequency ByVal Single The desired PWM frequency. mode ByVal Byte The desired PWM mode (see discussion below). stat ByRef Boolean The variable to receive the status code. Discussion This subroutine prepares a PWM channel for generating a pulse width modulated (PWM) signal using one of the CPU’s 8-bit timers. The table below indicates the available channels and the corresponding timer used. See the description of PWM8() for additional details on the PWM channels. Note that ZX devices based on ATxmega processors don’t have any 8-bit timers so 8-bit PWM is not supported on those devices. Supported 8-bit PWM Channels ZX Models Timer0 Timer2 ZX-24, ZX-40, ZX-44, ZX-328n, ZX-328l, ZX-32n, ZX-32l, ZX-24e, ZX-128e, ZX-128ne, ZX-328nu - 1 ZX-24a, ZX-24p, ZX-24n, ZX-24r, ZX-24s, ZX-40a, ZX-40p, ZX-40n, ZX-40r, ZX-40s, ZX-44a, ZX-44p, ZX-44n, ZX-44r, ZX-44s, ZX-24ae, ZX-24ne, ZX-24pe ZX-24nu, ZX-24pu, ZX-24ru, ZX-24su - 1, 2 ZX-1281, ZX-1281n, ZX-1280, ZX-1280n, ZX-1281e, ZX-1281ne 1, 2 - It is important to note that the timer used for 8-bit PWM generation is the same one used for generating the timing for the software UARTs (Com3-Com6). Consequently, these two features cannot be used at the same time. The frequency parameter specifies the desired PWM base frequency in Hertz. Since the same frequency and generation mode will be used for all PWM channels based on the same timer, it is only necessary to call OpenPWM8() once to prepare the timer for all of the PWM channels that are based on a that timer. The mode parameter specifies the PWM generation mode. Two modes are supported: Fast PWM mode and Phase/Frequency Correct mode. The constants zxFastPWM and zxCorrectPWM, having the values 0 and 1 respectively, may be used to specify the mode The status parameter, if supplied, receives a value to indicate success or failure of the call. A side effect of calling OpenPWM8() is that the timer busy flag for the underlying timer (e.g. Register.Timer2Busy) will be set to True irrespective of its prior state. It is recommended that the initial call to OpenPWM() be preceded by a call to acquire the semaphore for the timer. This will ensure that an existing timer operation will not be disturbed.