From aa6be9199ceeaf6bcd25769aa168d1c25a1cd8cb Mon Sep 17 00:00:00 2001 From: Railz Date: Tue, 5 Mar 2019 13:01:27 +0100 Subject: [PATCH 1/3] Renamed some variables Fixed comments Changed clock-speed to 16MHz (Onboard Oscillator is 16MHz) --- Geigerzaehler/main.c | 52 +++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/Geigerzaehler/main.c b/Geigerzaehler/main.c index 1ad883b..27d0238 100644 --- a/Geigerzaehler/main.c +++ b/Geigerzaehler/main.c @@ -8,7 +8,7 @@ * MController : AtMega328P * Board : Arduino Nano */ -#define F_CPU 20000000UL // Clock speed: 20 MHz - Maximum of AtMega328P +#define F_CPU 16000000UL // Clock speed: 16 MHz - Maximum of AtMega328P // Macros #define bit_get(p,m) ((p) & (m)) @@ -23,33 +23,34 @@ #include #include #include +#include // Global variable declaration uint32_t currTick = 0; // Todo: Method/Interrupt to get the current-tick -bool enable_boost = false; +bool boost_enable = false; bool boost_highVoltage_nextHigh = true; uint32_t boost_highVoltage_nextTick = 0; -bool enable_signalOutput = false; -bool signal_Output_nextHigh = true; -uint32_t signal_Output_nextTick = 0; +bool signalOutput_enable = false; +bool signalOutput_nextHigh = true; +uint32_t signalOutput_nextTick = 0; int main() { - DDRD &= ~(1<<2); // Activate PD2 - DDRD &= ~(1<<3); // Activate PD3 + DDRD &= ~(1<<2); // Activate input PD2 + DDRD &= ~(1<<3); // Activate input PD3 - PORTD |= (1<<2); // Enable pull-up-resistor Pin-D2 - PORTD |= (1<<3); // Enable pull-up-resistor Pin-D3 + PORTD |= (1<<2); // Enable pull-up-resistor D2 + PORTD |= (1<<3); // Enable pull-up-resistor D3 // Interrupt for INT0 Pin-D2 High-voltage check - EICRA |= (0 << ISC01)|(1 << ISC00); // Only at any edge [Code: 01] + EICRA |= (0 << ISC01)|(1 << ISC00); // On at any edge [Code: 01] EIMSK |= (1 << INT0); // Activate Interrupt INT0 // Interrupt for INT1 Pin-D3 Counter-click - EICRA |= (1 << ISC11)|(1 << ISC10); // Only at rising edge [Code: 11] + EICRA |= (1 << ISC11)|(1 << ISC10); // On rising edge [Code: 11] EIMSK |= (1 <= boost_highVoltage_nextTick) // If we are on or after the tick it should be executed { @@ -90,26 +91,26 @@ int main() // Signal output - if(enable_signalOutput) + if(signalOutput_enable) { - if(currTick >= signal_Output_nextTick) // If we are on or after the tick it should be executed + if(currTick >= signalOutput_nextTick) // If we are on or after the tick it should be executed { // Set pin according to next exec - if(signal_Output_nextHigh) // Set it high + if(signalOutput_nextHigh) // Set it high { bit_set(PD5, 1); bit_set(PD6, 1); - signal_Output_nextHigh = false; // Next is low + signalOutput_nextHigh = false; // Next is low } else // Set it low { bit_set(PD5, 0); bit_set(PD6, 0); - signal_Output_nextHigh = true; // Next is high + signalOutput_nextHigh = true; // Next is high } // When the signal should stop - signal_Output_nextTick = currTick + 101 // Todo: Add calculation for signalOutput low time + signalOutput_nextTick = currTick + 101 // Todo: Add calculation for signalOutput low time } } } @@ -119,32 +120,33 @@ int main() * Interrupt-handler * ISR - Interrupt service routine */ -// Address: 0x001 INT0 - Only at any edge [Code: 01] +// Address: 0x001 INT0 - On any edge [Code: 01] // Handles: Over/Below working voltage ISR(INT0_vect) { if(PIND&0x20 == 0x00) // Falling edge { // Below ~400V, activate booster - enable_boost = true; + boost_enable = true; } else // Rising edge { // Reached ~400V, deactivate booster - enable_boost = false; + boost_enable = false; } reti(); // Exit interrupt-handler } -// Address: 0x002 INT1 - Only at rising edge [Code: 11] +// Address: 0x002 INT1 - On rising edge [Code: 11] // Handles: Counter tube "tick" ISR(INT1_vect) { // Tick detected, signalOutput - enable_signalOutput = true; + signalOutput_enable = true; // Execute immediately - signal_Output_nextTick = 0; + signalOutput_nextTick = 0; reti(); // Exit interrupt-handler -} \ No newline at end of file +} + From fb7fafa4be4fb97c9420107cf57e10f5c35b3eb3 Mon Sep 17 00:00:00 2001 From: Railz Date: Tue, 5 Mar 2019 13:15:01 +0100 Subject: [PATCH 2/3] Changed some comments Added clock() Added stop for signalOutput Added calculation for booster and signalOutput for nextTick --- Geigerzaehler/main.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Geigerzaehler/main.c b/Geigerzaehler/main.c index 27d0238..1eed11b 100644 --- a/Geigerzaehler/main.c +++ b/Geigerzaehler/main.c @@ -8,7 +8,7 @@ * MController : AtMega328P * Board : Arduino Nano */ -#define F_CPU 16000000UL // Clock speed: 16 MHz - Maximum of AtMega328P +#define F_CPU 16000000UL // Clock speed: 16 MHz - Speed from onboard oscillator // Macros #define bit_get(p,m) ((p) & (m)) @@ -26,15 +26,15 @@ #include // Global variable declaration -uint32_t currTick = 0; // Todo: Method/Interrupt to get the current-tick +uint16_t boost_frequency = 2000; // 2kHz frequency -bool boost_enable = false; -bool boost_highVoltage_nextHigh = true; -uint32_t boost_highVoltage_nextTick = 0; +bool boost_enable = false; +bool boost_highVoltage_nextHigh = true; +clock_t boost_highVoltage_nextTick = 0; -bool signalOutput_enable = false; -bool signalOutput_nextHigh = true; -uint32_t signalOutput_nextTick = 0; +bool signalOutput_enable = false; +bool signalOutput_nextHigh = true; +clock_t signalOutput_nextTick = 0; int main() @@ -61,7 +61,7 @@ int main() // HighVoltage boosting if(boost_enable) { - if(currTick >= boost_highVoltage_nextTick) // If we are on or after the tick it should be executed + if(clock() >= 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) // Set it high @@ -76,7 +76,7 @@ int main() } // Calculate when next high/low should be set - boost_highVoltage_nextTick = currTick + 101 // Todo: Add calculation for pin high/low time + boost_highVoltage_nextTick = clock() + 1/(boost_frequency/2) // Half of time it should be high/low } }else { @@ -93,7 +93,7 @@ int main() // Signal output if(signalOutput_enable) { - if(currTick >= signalOutput_nextTick) // If we are on or after the tick it should be executed + if(clock() >= signalOutput_nextTick) // If we are on or after the tick it should be executed { // Set pin according to next exec if(signalOutput_nextHigh) // Set it high @@ -107,10 +107,12 @@ int main() bit_set(PD5, 0); bit_set(PD6, 0); signalOutput_nextHigh = true; // Next is high + + signalOutput_enable = false; // Disable signalOutput } // When the signal should stop - signalOutput_nextTick = currTick + 101 // Todo: Add calculation for signalOutput low time + signalOutput_nextTick = clock() + F_CPU * 0.2 // nextTick is in 0.2s } } } From 8919fc632fb72afbb100e941815650680c8931ae Mon Sep 17 00:00:00 2001 From: Railz Date: Tue, 5 Mar 2019 13:17:29 +0100 Subject: [PATCH 3/3] Fixed nextTick calculation for booster --- Geigerzaehler/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Geigerzaehler/main.c b/Geigerzaehler/main.c index 1eed11b..19d59e3 100644 --- a/Geigerzaehler/main.c +++ b/Geigerzaehler/main.c @@ -76,7 +76,7 @@ int main() } // Calculate when next high/low should be set - boost_highVoltage_nextTick = clock() + 1/(boost_frequency/2) // Half of time it should be high/low + boost_highVoltage_nextTick = clock() + F_CPU * 1/(boost_frequency/2) // Half of time it should be high/low } }else {