From 467c0d883e731faff4a7e93478ecb9384b3c19d8 Mon Sep 17 00:00:00 2001 From: aster94 Date: Mon, 12 Dec 2016 20:00:46 +0100 Subject: [PATCH] Update arduino_LA.ino --- arduino_LA.ino | 85 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 33 deletions(-) diff --git a/arduino_LA.ino b/arduino_LA.ino index 20166e2..203e889 100644 --- a/arduino_LA.ino +++ b/arduino_LA.ino @@ -1,17 +1,27 @@ +/* + * LA.cpp + * + * Created: 11/12/2016 19.35.51 + * Author : Vincenzo + */ + +#define F_CPU 16000000UL +#include +#include +#include + #define samples 200 -uint8_t state, old_state, initial; -uint8_t changed[samples]; +uint8_t initial, state, old_state; +uint8_t pinChanged[samples]; uint32_t timer[samples]; uint16_t event = 0; -volatile uint64_t overflow_count = 0; -volatile uint64_t total_count = 0; - - -int main(void) { - Serial.begin(9600); +volatile uint16_t overflow_count = 0; +volatile uint32_t total_count = 0; +void init_board() { + TCCR2B = TCCR2B & 0b11111000 | 0x02; TIMSK2 |= (1 << TIMSK2); // enable Timer2 overflow interrupt TCCR2A &= 0b11111100; // timer2 working parameters @@ -20,39 +30,21 @@ int main(void) { PORTC = (0 << 0); DDRC |= (1 << 0); // led A0 DDRB |= 0x00; // pin 8-13 input PORTB |= 0x3F; // pull-up - - start(); - - while (1) { - old_state = state; - state = PINB; - - if (old_state != state) { - timer[event] = get_time(); - changed[event] = old_state ^ state; - event++; - - if (event == samples) { - sendData(); - while (Serial.read() != 'G') ; //wait for the "go" - start(); - } - } - } + } + void start() { _delay_ms(1000); - TCNT2 = 0; overflow_count = 0; event = 0; + TCNT2 = 0; PORTC = (1 << 0); initial = PINB; state = initial; - //in futuro potrei fare in modo che time[0] รจ impostato qui } @@ -60,13 +52,13 @@ void sendData() { PORTC = (0 << 0); //turn off led //initial data - Serial.print("S"); Serial.println(""); + Serial.println("S"); Serial.print(initial); Serial.print(":"); Serial.println(samples); //data for (int i = 0; i < samples; i++) { - Serial.print(changed[i]); Serial.print(":"); + Serial.print(pinChanged[i]); Serial.print(":"); Serial.println(timer[i]); } } @@ -74,14 +66,15 @@ void sendData() { //timer: uint32_t get_time() { + cli(); uint8_t tcnt2_save = TCNT2; - boolean flag_save = TIMSK2 & (1 << TIFR2); //timer2 overflow flag + uint8_t flag_save = TOV2; //timer2 overflow flag if (flag_save) { tcnt2_save = TCNT2; overflow_count++; //manual increment of the overflow counter - TIFR2 = (1 << TIFR2); //reset overflow flag to prevent execution of the ISR + TIFR2 = (0 << TOV2); //reset overflow flag to prevent execution of the ISR } total_count = (overflow_count * 256 + tcnt2_save) / 2; @@ -92,3 +85,29 @@ uint32_t get_time() { ISR(TIMER2_OVF_vect) { overflow_count++; } + +int main(void) { + Serial.begin(9600); + + init_board(); + + start(); + + while (1) { + + old_state = state; + state = PINB; + + if (old_state != state) { + timer[event] = get_time(); + pinChanged[event] = state ^ old_state; + event++; + + if (event == samples) { + sendData(); + while (Serial.read() != 'G') ; //wait for the "go" + start(); + } + } + } +}