Added comments
Split signalOutput to piezo- and led-part
This commit is contained in:
parent
246ccc8d5f
commit
e81bda822e
@ -15,22 +15,28 @@
|
||||
#include <avr/interrupt.h>
|
||||
#include <stdint.h>
|
||||
|
||||
// Global variable declaration
|
||||
/*
|
||||
* Global variable declaration
|
||||
*/
|
||||
// Set frequencys and general stuff
|
||||
uint16_t boost_frequency = 2000; // 2kHz frequency
|
||||
uint16_t signalOutput_time = 200; // 200ms
|
||||
uint16_t signalOutput_piezo_time = 200; // 200ms
|
||||
uint16_t signalOutput_led_time = 200; // 200ms
|
||||
|
||||
uint8_t boost_highVoltage_nextHigh = 1;
|
||||
uint16_t boost_highVoltage_nextTick = 1;
|
||||
// Used for execution-timing (with timer) [0 = disabled, >0 = nextTimerTick] (1 is next avaible execution)
|
||||
uint16_t boost_highVoltage_nextTick = 1; // Execute at start
|
||||
uint16_t signalOutput_piezo_nextTick = 0;
|
||||
uint16_t signalOutput_led_nextTick = 0;
|
||||
|
||||
uint8_t signalOutput_nextHigh = 1;
|
||||
uint16_t signalOutput_nextTick = 0;
|
||||
|
||||
uint8_t timer1_prescaler = 1;
|
||||
|
||||
uint16_t test = 0;
|
||||
// Prescaling of timer [timer-speed: cpu-clock / prescaler]
|
||||
// Modes: [1, 8, 64, 256, 1024]
|
||||
uint8_t timer1_prescaler = 256;
|
||||
|
||||
int main()
|
||||
{
|
||||
/*
|
||||
* Init
|
||||
*/
|
||||
// Inputs
|
||||
DDRD &= (0 << PORTD2); // Activate input PD2
|
||||
DDRD &= (0 << PORTD3); // Activate input PD3
|
||||
@ -44,40 +50,29 @@ int main()
|
||||
DDRD |= (1 << PORTD6);
|
||||
DDRB |= (1 << PORTB5); // Onboard-Led
|
||||
|
||||
// Interrupt for INT0 Pin-D2 High-voltage check
|
||||
// Interrupts
|
||||
// for INT0 Pin-D2 High-voltage check
|
||||
EICRA |= (0 << ISC01)|(1 << ISC00); // On at any edge [Code: 01]
|
||||
EIMSK |= (1 << INT0); // Activate Interrupt INT0
|
||||
|
||||
// Interrupt for INT1 Pin-D3 Counter-click
|
||||
// for INT1 Pin-D3 Counter-click
|
||||
EICRA |= (1 << ISC11)|(1 << ISC10); // On rising edge [Code: 11]
|
||||
EIMSK |= (1 <<INT1); // Activate Interrupt INT1
|
||||
|
||||
// Init timer1
|
||||
timer1_init();
|
||||
|
||||
sei(); // Activate global interrupts
|
||||
|
||||
// Endless loop
|
||||
while (1)
|
||||
{
|
||||
cli(); // Deactivate global interrupts (before checks)
|
||||
|
||||
/*
|
||||
* 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
|
||||
{
|
||||
// Set pin according to next exec
|
||||
if(boost_highVoltage_nextHigh == 1)
|
||||
{
|
||||
// Set it high
|
||||
PORTD |= (1 << PORTD4);
|
||||
boost_highVoltage_nextHigh = 0; // Next is low
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set it low
|
||||
PORTD |= (0 << PORTD4);
|
||||
boost_highVoltage_nextHigh = 1; // Next is high
|
||||
}
|
||||
// Flip pin state
|
||||
PORTD ^= (1 << PORTD4);
|
||||
|
||||
// Calculate when next high/low should be set
|
||||
boost_highVoltage_nextTick = (uint16_t)TCNT1 + F_CPU/timer1_prescaler * 1/(boost_frequency/2); // Half of time it should be high/low
|
||||
@ -87,29 +82,41 @@ int main()
|
||||
/*
|
||||
* Signal output
|
||||
*/
|
||||
if(signalOutput_nextTick > 0 && (uint16_t)TCNT1 >= signalOutput_nextTick) // If we are on or after the tick it should be executed
|
||||
// Piezo
|
||||
if(signalOutput_piezo_nextTick > 0 && (uint16_t)TCNT1 >= signalOutput_piezo_nextTick) // If we are on or after the tick it should be executed
|
||||
{
|
||||
// Set pin according to next exec
|
||||
if(signalOutput_nextHigh == 1) // Set it high
|
||||
{
|
||||
PORTD |= (1 << PORTD5);
|
||||
PORTD |= (1 << PORTD6);
|
||||
signalOutput_nextHigh = 0; // Next is low
|
||||
// Flip pin state
|
||||
PORTD ^= (1 << PORTD5);
|
||||
|
||||
// When the signal should stop
|
||||
signalOutput_nextTick = (uint16_t)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
|
||||
}
|
||||
else // Set it low
|
||||
if(!(PIND & (1 << PORTD5)))
|
||||
{
|
||||
PORTD |= (0 << PORTD5);
|
||||
PORTD |= (0 << PORTD6);
|
||||
signalOutput_nextHigh = 1; // Next is high
|
||||
// We are on low (again), disable further execution
|
||||
signalOutput_piezo_nextTick = 0;
|
||||
}
|
||||
|
||||
signalOutput_nextTick = 0; // Disable signalOutput
|
||||
}
|
||||
// When the signal should next flip
|
||||
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
|
||||
{
|
||||
// Flip pin state
|
||||
PORTD ^= (1 << PORTD6);
|
||||
|
||||
if(!(PIND & (1 << PORTD6)))
|
||||
{
|
||||
// We are on low (again), disable further execution
|
||||
signalOutput_led_nextTick = 0;
|
||||
}
|
||||
|
||||
// When the signal should next flip
|
||||
signalOutput_led_nextTick = (uint16_t)TCNT1 + F_CPU/timer1_prescaler * signalOutput_led_time/1000; // Calculate nextTick based on time in ms
|
||||
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]
|
||||
}
|
||||
|
||||
/*
|
||||
@ -149,7 +156,6 @@ void timer1_init()
|
||||
|
||||
|
||||
/*
|
||||
* Interrupt-handler
|
||||
* ISR - Interrupt service routine
|
||||
*/
|
||||
// Address: 0x001 INT0 - On any edge [Code: 01]
|
||||
|
Loading…
x
Reference in New Issue
Block a user