Removed check if state is set, instead now it will use nextTick itself
Added switch-case to set timer1-bits according to prescaler Fixed calculations for nextTick to match chaned code
This commit is contained in:
		
							parent
							
								
									64280423fa
								
							
						
					
					
						commit
						f50a14ccef
					
				@ -17,17 +17,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Global variable declaration
 | 
					// Global variable declaration
 | 
				
			||||||
uint16_t boost_frequency = 2000;		// 2kHz frequency
 | 
					uint16_t boost_frequency = 2000;		// 2kHz frequency
 | 
				
			||||||
 | 
					uint16_t signalOutput_time = 200;		// 200ms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t boost_enable	=	0;
 | 
					 | 
				
			||||||
uint8_t boost_highVoltage_nextHigh	=	1;
 | 
					uint8_t boost_highVoltage_nextHigh	=	1;
 | 
				
			||||||
uint16_t boost_highVoltage_nextTick	=	0;
 | 
					uint16_t boost_highVoltage_nextTick	=	0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Todo [CRITICAL]: Clock does not exist! Use timer.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
uint8_t signalOutput_enable	=	0;
 | 
					 | 
				
			||||||
uint8_t signalOutput_nextHigh	=	1;
 | 
					uint8_t signalOutput_nextHigh	=	1;
 | 
				
			||||||
uint16_t signalOutput_nextTick	=	0;
 | 
					uint16_t signalOutput_nextTick	=	0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t timer1_prescaler = 256;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main()
 | 
					int main()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -59,42 +57,34 @@ int main()
 | 
				
			|||||||
	// Endless loop
 | 
						// Endless loop
 | 
				
			||||||
    while (1) 
 | 
					    while (1) 
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
		// HighVoltage boosting
 | 
							/*
 | 
				
			||||||
		if(boost_enable == 1)
 | 
							 * HighVoltage boosting
 | 
				
			||||||
		{
 | 
							 */
 | 
				
			||||||
			if(TCNT1 >= boost_highVoltage_nextTick)	// If we are on or after the tick it should be executed
 | 
							if(boost_highVoltage_nextTick > 0 && TCNT1 >= boost_highVoltage_nextTick)	// If we are on or after the tick it should be executed
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// Set pin according to next exec
 | 
								// Set pin according to next exec
 | 
				
			||||||
				if(boost_highVoltage_nextHigh == 1)		// Set it high
 | 
								if(boost_highVoltage_nextHigh == 1)		
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
									// Set it high
 | 
				
			||||||
				PORTD |= (1 << PORTD4);
 | 
									PORTD |= (1 << PORTD4);
 | 
				
			||||||
				boost_highVoltage_nextHigh = 0;	// Next is low
 | 
									boost_highVoltage_nextHigh = 0;	// Next is low
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
				else  								// Set it low
 | 
								else  								
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 | 
									// Set it low
 | 
				
			||||||
				PORTD |= (0 << PORTD4);
 | 
									PORTD |= (0 << PORTD4);
 | 
				
			||||||
				boost_highVoltage_nextHigh = 1;	// Next is high
 | 
									boost_highVoltage_nextHigh = 1;	// Next is high
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
			// Calculate when next high/low should be set
 | 
								// Calculate when next high/low should be set
 | 
				
			||||||
				boost_highVoltage_nextTick = TCNT1 + F_CPU/256 * 1/(boost_frequency/2);		// Half of time it should be high/low
 | 
								boost_highVoltage_nextTick = TCNT1 + F_CPU/timer1_prescaler * 1/(boost_frequency/2);		// Half of time it should be high/low
 | 
				
			||||||
			}
 | 
								if(boost_highVoltage_nextTick == 0) boost_highVoltage_nextTick++;		// If its 0, it stops, we dont want that
 | 
				
			||||||
		}else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if(boost_highVoltage_nextTick > 0)		// If boosting is deactivated, but the nextTick was not reset yet
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				// Reset boost-state
 | 
					 | 
				
			||||||
				PORTD |= (0 << PORTD4);
 | 
					 | 
				
			||||||
				boost_highVoltage_nextHigh = 1;
 | 
					 | 
				
			||||||
				boost_highVoltage_nextTick = 0;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		
 | 
							/*
 | 
				
			||||||
		// Signal output
 | 
							 * Signal output
 | 
				
			||||||
		if(signalOutput_enable)
 | 
							 */
 | 
				
			||||||
		{
 | 
							if(signalOutput_nextTick > 0 && TCNT1 >= signalOutput_nextTick)	// If we are on or after the tick it should be executed
 | 
				
			||||||
			if(TCNT1 >= signalOutput_nextTick)	// If we are on or after the tick it should be executed
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// Set pin according to next exec
 | 
								// Set pin according to next exec
 | 
				
			||||||
			if(signalOutput_nextHigh == 1)		// Set it high
 | 
								if(signalOutput_nextHigh == 1)		// Set it high
 | 
				
			||||||
@ -109,37 +99,51 @@ int main()
 | 
				
			|||||||
				PORTD |= (0 << PORTD6);
 | 
									PORTD |= (0 << PORTD6);
 | 
				
			||||||
				signalOutput_nextHigh = 1;	// Next is high
 | 
									signalOutput_nextHigh = 1;	// Next is high
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
					signalOutput_enable = 0;	// Disable signalOutput
 | 
									signalOutput_nextTick = 0;	// Disable signalOutput
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			// When the signal should stop
 | 
								// When the signal should stop
 | 
				
			||||||
				signalOutput_nextTick = TCNT1 + F_CPU/256 * 0.2; 		// nextTick is in 0.2s
 | 
								signalOutput_nextTick = TCNT1 + F_CPU/timer1_prescaler * signalOutput_time/1000; 		// nextTick is in signalOutput_time in ms
 | 
				
			||||||
			}
 | 
								if(signalOutput_nextTick == 0) signalOutput_nextTick++;		// If its 0, it stops, we dont want that
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					 * Init timer1 (16-bit) in "normal mode"
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
void timer1_init()
 | 
					void timer1_init()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// set up timer with prescaler = 256
 | 
						// set up timer with speed: cpu-clock / prescaler
 | 
				
			||||||
 | 
						switch(timer1_prescaler){		// [CS12	CS11	CS10]
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
								TCCR1B |= (1 << CS10);	// [0		0		1	]
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							case 8:
 | 
				
			||||||
 | 
								TCCR1B |= (1 << CS11);	// [0		1		0	]
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							case 64:
 | 
				
			||||||
 | 
								TCCR1B |= (1 << CS10);	// [0		1		1	]
 | 
				
			||||||
 | 
								TCCR1B |= (1 << CS11);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							case 256:
 | 
				
			||||||
 | 
								TCCR1B |= (1 << CS12);	// [1		0		0	]
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							case 1024:
 | 
				
			||||||
 | 
								TCCR1B |= (1 << CS10);	// [1		0		1	]
 | 
				
			||||||
			TCCR1B |= (1 << CS12);
 | 
								TCCR1B |= (1 << CS12);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	// initialize counter
 | 
						// initialize counter
 | 
				
			||||||
	TCNT1 = 0;
 | 
						TCNT1 = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ISR(TIMER1_COMPA_vect){
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	//Code Kanal A Timer 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ISR(TIMER1_COMPB_vect){
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	//Code Kanal B Timer 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Interrupt-handler
 | 
					 * Interrupt-handler
 | 
				
			||||||
@ -152,12 +156,16 @@ ISR(INT0_vect)
 | 
				
			|||||||
	if(!(PIND & (1 << PORTD2)))	// Falling edge
 | 
						if(!(PIND & (1 << PORTD2)))	// Falling edge
 | 
				
			||||||
	{	
 | 
						{	
 | 
				
			||||||
		// Below ~400V, activate booster
 | 
							// Below ~400V, activate booster
 | 
				
			||||||
		boost_enable = 1;
 | 
							boost_highVoltage_nextTick = 1;	//  Run as soon as possible
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else					// Rising edge
 | 
						else					// Rising edge
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Reached ~400V, deactivate booster
 | 
							// Reached ~400V, deactivate booster
 | 
				
			||||||
		boost_enable = 0;
 | 
							boost_highVoltage_nextTick = 0;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// reset state
 | 
				
			||||||
 | 
							PORTD |= (0 << PORTD4);			// pin on low
 | 
				
			||||||
 | 
							boost_highVoltage_nextHigh = 1;	// next is high
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	reti();		// Exit interrupt-handler
 | 
						reti();		// Exit interrupt-handler
 | 
				
			||||||
@ -168,9 +176,7 @@ ISR(INT0_vect)
 | 
				
			|||||||
ISR(INT1_vect)
 | 
					ISR(INT1_vect)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// Tick detected, signalOutput
 | 
						// Tick detected, signalOutput
 | 
				
			||||||
	signalOutput_enable = 1;
 | 
						signalOutput_nextTick = 1;	//  Run as soon as possible
 | 
				
			||||||
	// Execute immediately
 | 
					 | 
				
			||||||
	signalOutput_nextTick = 0;
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	reti();		// Exit interrupt-handler
 | 
						reti();		// Exit interrupt-handler
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user