Beispiel #1
0
void m_Timer_PWM_0(void* Temp)
{
volatile uint8_t i= (uint8_t)Temp;

	if (m_channels[i].m_isOn)
	{
		if (!m_channels[i].m_bState)
		{
			// turn it OFF
				digitalWrite(m_channels[i].m_pin, LOW);

			//Start the timer
				SYSTM002_StopTimer(m_channels[i].m_TimerId_on);
				SYSTM002_StartTimer(m_channels[i].m_TimerId_off);
				m_channels[i].m_bState = true;

		} else {
			// turn it ON
				digitalWrite(m_channels[i].m_pin, HIGH);

			//Start the timer
				SYSTM002_StopTimer(m_channels[i].m_TimerId_off);
				SYSTM002_StartTimer(m_channels[i].m_TimerId_on);
				m_channels[i].m_bState = false;
		}
	}
}
Beispiel #2
0
void SoftPWM_SetPercent(int8_t pin, uint8_t percent)
{
uint8_t i=0;
uint32_t time;

	// If the pin isn't already set ...
	for (i = 0; i < SOFTPWM_MAXCHANNELS; i++)
	{
		if ( (pin >= 0) && (m_channels[i].m_pin == pin) )
		{
			// Kill existing timers ...
				if (m_channels[i].m_TimerId_on != 0) {
					SYSTM002_DeleteTimer(m_channels[i].m_TimerId_on);
					m_channels[i].m_TimerId_on = 0;
				}
				if (m_channels[i].m_TimerId_off != 0) {
					SYSTM002_DeleteTimer(m_channels[i].m_TimerId_off);
					m_channels[i].m_TimerId_off = 0;
				}

			// check percentage setting
			if (percent == 0)
				digitalWrite(pin, LOW);		// 0% is OFF

			else if (percent == 100)
				digitalWrite(pin, HIGH);	// 100% is ON

			else if (m_channels[i].m_pwmvalue != percent)
			{
				// ...We will get a PWM period of approximately 60Hz (~16ms).
				time = ((uint32_t)(percent))*SOFTPWM_TIME;
				m_channels[i].m_TimerId_on =
					SYSTM002_CreateTimer( time,
											SYSTM002_PERIODIC,
											m_Timer_PWM_0,(void*)i);

				time = ((uint32_t)(100-percent))*SOFTPWM_TIME;
				m_channels[i].m_TimerId_off =
					SYSTM002_CreateTimer( time,
											SYSTM002_PERIODIC,
											m_Timer_PWM_0,(void*)i);

				if ( (m_channels[i].m_TimerId_on != 0) &&
					 (m_channels[i].m_TimerId_off != 0) )
				{
					// set the pin (and exit)
						m_channels[i].m_isOn	 = true;
						m_channels[i].m_pwmvalue = percent;

					//Start the timer
						SYSTM002_StopTimer(m_channels[i].m_TimerId_on);
						SYSTM002_StartTimer(m_channels[i].m_TimerId_off);
						m_channels[i].m_bState = true;
				}
			}
			break;
		}
	}
}
void Software_Timers_Init() {
	handle_t TaskTimerId;

	TaskTimerId = SYSTM002_CreateTimer(SYSTM002_SYSTICK_INTERVAL,
			SYSTM002_PERIODIC, &Tick_Handler, NULL);
	if (TaskTimerId != 0) {
//Timer created successfully so start it
		SYSTM002_StartTimer(TaskTimerId);
	}
}