Fixed execution prior to tick, because of nextTick overflow before timer-overflow
This commit is contained in:
parent
e81bda822e
commit
ccda41769f
@ -31,6 +31,7 @@ uint16_t signalOutput_led_nextTick = 0;
|
||||
// Prescaling of timer [timer-speed: cpu-clock / prescaler]
|
||||
// Modes: [1, 8, 64, 256, 1024]
|
||||
uint8_t timer1_prescaler = 256;
|
||||
uint16_t timer1_overflow_value = (2^16) -1; // Just for info
|
||||
|
||||
int main()
|
||||
{
|
||||
@ -40,9 +41,6 @@ int main()
|
||||
// Inputs
|
||||
DDRD &= (0 << PORTD2); // Activate input PD2
|
||||
DDRD &= (0 << PORTD3); // Activate input PD3
|
||||
//PORTD |= (1 << PORTD2); // Enable pull-up-resistor D2
|
||||
//PORTD |= (1 << PORTD3); // Enable pull-up-resistor D3
|
||||
// Todo [CRITICAL]: External pull-down resistors 10kOhm
|
||||
|
||||
// Outputs
|
||||
DDRD |= (1 << PORTD4);
|
||||
@ -69,7 +67,9 @@ int main()
|
||||
/*
|
||||
* HighVoltage boosting
|
||||
*/
|
||||
if(boost_highVoltage_nextTick > 0 && (uint16_t)TCNT1 >= boost_highVoltage_nextTick) // If we are on or after the tick it should be executed
|
||||
if(boost_highVoltage_nextTick > 0) // If there is a nextTick
|
||||
{
|
||||
if((uint16_t)TCNT1 >= boost_highVoltage_nextTick && ((uint16_t)TCNT1-boost_highVoltage_nextTick) < (timer1_overflow_value/2)) // If we are on or after the tick it should be executed
|
||||
{
|
||||
// Flip pin state
|
||||
PORTD ^= (1 << PORTD4);
|
||||
@ -78,12 +78,15 @@ int main()
|
||||
boost_highVoltage_nextTick = (uint16_t)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
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Signal output
|
||||
*/
|
||||
// Piezo
|
||||
if(signalOutput_piezo_nextTick > 0 && (uint16_t)TCNT1 >= signalOutput_piezo_nextTick) // If we are on or after the tick it should be executed
|
||||
if(signalOutput_piezo_nextTick > 0) // If there is a nextTick
|
||||
{
|
||||
if((uint16_t)TCNT1 >= signalOutput_piezo_nextTick && ((uint16_t)TCNT1-signalOutput_piezo_nextTick) < (timer1_overflow_value/2)) // If we are on or after the tick it should be executed
|
||||
{
|
||||
// Flip pin state
|
||||
PORTD ^= (1 << PORTD5);
|
||||
@ -98,8 +101,11 @@ int main()
|
||||
signalOutput_piezo_nextTick = (uint16_t)TCNT1 + F_CPU/timer1_prescaler * signalOutput_piezo_time/1000; // Calculate nextTick based on time in ms
|
||||
if(signalOutput_piezo_nextTick == 0) signalOutput_piezo_nextTick++; // If its 0, it stops, we dont want that
|
||||
}
|
||||
}
|
||||
// LED
|
||||
if(signalOutput_led_nextTick > 0 && (uint16_t)TCNT1 >= signalOutput_led_nextTick) // If we are on or after the tick it should be executed
|
||||
if(signalOutput_led_nextTick > 0) // If there is a nextTick
|
||||
{
|
||||
if((uint16_t)TCNT1 >= signalOutput_led_nextTick && ((uint16_t)TCNT1-signalOutput_led_nextTick) < (timer1_overflow_value/2)) // If we are on or after the tick it should be executed
|
||||
{
|
||||
// Flip pin state
|
||||
PORTD ^= (1 << PORTD6);
|
||||
@ -115,6 +121,7 @@ int main()
|
||||
if(signalOutput_led_nextTick == 0) signalOutput_led_nextTick++; // If its 0, it stops, we dont want that
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sei(); // Activate global interrupts (after checks) [when an interrupt was fired, it will now be executed]
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user