I am working on PWM click libraries to control servo motor. I am using pic16f1526 microcontroller and PCA9685PW IC. The code I am using.
Code: Select all
#include "Click_PWM_types.h"
#include "Click_PWM_config.h"
void systemInit()
{
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_RST_PIN, _GPIO_OUTPUT );
mikrobus_i2cInit( _MIKROBUS1, &_PWM_I2C_CFG[0] );
mikrobus_logInit( _LOG_USBUART, 9600 );
Delay_ms( 100 );
}
void applicationInit()
{
pwm_i2cDriverInit( (T_PWM_P)&_MIKROBUS1_GPIO, (T_PWM_P)&_MIKROBUS1_I2C, PWM_I2C_ADDRESS );
Delay_ms( 100 );
pwm_outputEnable();
pwm_devConfig( 1, 0, 0, 0, 1, 0 );
pwm_setPreScale( 0x04 );
pwm_devConfig( 1, 0, 0, 0, 0, 1 );
pwm_outputConfig( 0x00, 1, 0, 0 );
Delay_ms( 100 );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
mikrobus_logWrite( " PWM Click ", _LOG_LINE );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
}
void applicationTask()
{
uint16_t rawDc;
uint8_t channId;
uint8_t dutyCycle;
channId = 0;
mikrobus_logWrite( "Channel 0 false state ", _LOG_LINE );
pwm_channelState( channId, 0 );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
Delay_ms( 2000 );
mikrobus_logWrite( "Channel 0 set raw ", _LOG_LINE );
for ( rawDc = 0; rawDc < PWM_MAX_RESOLUTION; rawDc += 256 )
{
pwm_setChannelRaw( channId, 0, rawDc );
mikrobus_logWrite( " >", _LOG_TEXT );
Delay_ms( 500 );
}
mikrobus_logWrite( "", _LOG_LINE );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
Delay_ms( 1000 );
mikrobus_logWrite( "Channel 0 set ", _LOG_LINE );
for ( dutyCycle = 0; dutyCycle < 100; dutyCycle += 10 )
{
pwm_setChannel( channId, 0, dutyCycle );
mikrobus_logWrite( " >", _LOG_TEXT );
Delay_ms( 500 );
}
mikrobus_logWrite( "", _LOG_LINE );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
Delay_ms( 1000 );
mikrobus_logWrite( "All Channels raw set ", _LOG_LINE );
for ( rawDc = 0; rawDc < PWM_MAX_RESOLUTION; rawDc += 256 )
{
pwm_setAllRaw( rawDc );
mikrobus_logWrite( " >", _LOG_TEXT );
Delay_ms( 500 );
}
mikrobus_logWrite( "", _LOG_LINE );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
Delay_ms( 1000 );
mikrobus_logWrite( "All Channels set ", _LOG_LINE );
for ( dutyCycle = 0; dutyCycle < 100; dutyCycle += 10 )
{
pwm_setAll( dutyCycle );
mikrobus_logWrite( " >", _LOG_TEXT );
Delay_ms( 500 );
}
mikrobus_logWrite( "", _LOG_LINE );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
Delay_ms( 1000 );
mikrobus_logWrite( "All Channels false state ", _LOG_LINE );
pwm_allChannState( 0 );
mikrobus_logWrite( "--------------------------", _LOG_LINE );
Delay_ms( 2000 );
}
void main()
{
systemInit();
applicationInit();
while (1)
{
applicationTask();
}
}
Himanshu Kumar