Integration of all boards

Added a way to every board work with a single one processing code.
This commit is contained in:
sancho11
2019-01-16 00:58:54 -06:00
parent df602c7423
commit 66cd99689e
8 changed files with 859 additions and 2149 deletions

View File

@@ -9,6 +9,7 @@
#define baudrate 115200 // check if it is the same in processing
// number of samples to collect
#define timezerooffset 125
static const int N_SAMPLES = 300;
@@ -40,6 +41,7 @@ void setup() {
unsigned long times[N_SAMPLES]; // when did change happen
uint32_t values[N_SAMPLES]; // GPI value at time
uint32_t timefix;
extern void ICACHE_RAM_ATTR collect() {
times[0] = micros();
@@ -73,15 +75,20 @@ int compactValue(uint32_t value) {
void report() {
Serial.println("S");
Serial.print(compactValue(values[0]));
Serial.print(":");
Serial.println(N_SAMPLES - 1);
for (int i = 1; i < N_SAMPLES; ++i) {
Serial.print(compactValue(values[i] ^ values[i - 1]));
Serial.print(":");
Serial.println(times[i] - times[0]);
Serial.print(compactValue(values[0])); Serial.print(','); Serial.print(B00000000); Serial.print(','); Serial.print(B00000000); Serial.print(":");
Serial.println(N_SAMPLES +1);
timefix = -times[0]+timezerooffset;
for (int i = 0; i < N_SAMPLES; i++) {
times[i]=times[i]+timefix;
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");//Este segmento de codigo introduce un cambio en todos los
Serial.println(0);
for (int i = 1; i < N_SAMPLES; ++i) {
Serial.print(compactValue(values[i] ^ values[i - 1])); Serial.print(','); Serial.print(B00000000); Serial.print(','); Serial.print(B00000000); Serial.print(":");
Serial.println(times[i]);
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");
Serial.println((times[N_SAMPLES-1]+400));
}
void loop() {

View File

@@ -1,14 +1,14 @@
/*
* LA.cpp
*
*
* Created: 11/12/2016 19.35.51
* Author : Vincenzo
*/
#define baudrate 115200 //check if it is the same in processing
#define samples 400
#define samples 500
#define timezerooffset 125 //microsegundos
#define PULLUP true //Si queremos entradas con PULLUP lo dejamos activado(true), si queremos dejarlas al "aire" (false), en caso de desactivarlo deberemos aterrizar todos los pines que no utilizemos.
#define PULLUP true//Si queremos entradas con PULLUP lo dejamos activado(true), si queremos dejarlas al "aire" (false), en caso de desactivarlo deberemos aterrizar todos los pines que no utilizemos.
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
@@ -111,16 +111,15 @@ void sendData() {
//initial data
Serial.println("S");
Serial.print(initial1); Serial.print(','); Serial.print(initial2); Serial.print(','); Serial.print(initial3); Serial.print(":");
Serial.println(samples+3);
Serial.println(samples+2);
timefix = -timer[0]+timezerooffset;
for (int i = 0; i < samples; i++) {
timer[i]=timer[i]+timefix;
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");//Este segmento de codigo introduce un cambio en todos los
Serial.println(0); //canales, lo que soluciona un error en el codigo en processing
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");//al final se hace un cambio en todos los canales, lo que soluciona
Serial.println(1); //otro pequeño fallo visual.
//data
//al final se hace un cambio en todos los canales, lo que soluciona //otro pequeño fallo visual.
//data
for (int i = 0; i < samples; i++) {
Serial.print(pinChanged1[i]);Serial.print(','); Serial.print(pinChanged2[i]); Serial.print(','); Serial.print(pinChanged3[i]); Serial.print(":");
Serial.println(timer[i]);

View File

@@ -9,12 +9,13 @@
#define baudrate 115200 // check if it is the same in processing
#define samples 200 // the number of samples you want to take
#define boardLed PB1
#define boardLed PA1
uint8_t initial, state, old_state;
uint8_t pinChanged[samples];
uint16_t initial, state, old_state;
uint16_t pinChanged[samples];
uint8_t initial1, initial2, pinChanged1, pinChanged2;
uint32_t timer[samples];
uint16_t event = 0;
@@ -27,7 +28,18 @@ void setup() {
pinMode (boardLed, OUTPUT);
digitalWrite(boardLed, LOW);
pinMode(PB0, INPUT_PULLUP);
pinMode(PB1, INPUT_PULLUP);
pinMode(PB2, INPUT_PULLUP);
pinMode(PB3, INPUT_PULLUP);
pinMode(PB4, INPUT_PULLUP);
pinMode(PB5, INPUT_PULLUP);
pinMode(PB6, INPUT_PULLUP);
pinMode(PB7, INPUT_PULLUP);
pinMode(PB8, INPUT_PULLUP);
pinMode(PB9, INPUT_PULLUP);
pinMode(PB10, INPUT_PULLUP);
pinMode(PB11, INPUT_PULLUP);
pinMode(PB12, INPUT_PULLUP);
pinMode(PB13, INPUT_PULLUP);
pinMode(PB14, INPUT_PULLUP);
@@ -45,15 +57,20 @@ void startLA() {
digitalWrite(boardLed, HIGH);
reset_timer();
initial = GPIOB->regs->IDR >> 12;
initial = GPIOB->regs->IDR;
state = initial;
for (int i=0; i < samples; i++) {
pinChanged[i]=0;
//Serial.print(pinChanged1[i]); Serial.print(','); Serial.print(pinChanged2[i]); Serial.print(','); Serial.println(pinChanged3[i]);
}
}
void loop() {
old_state = state;
state = GPIOB->regs->IDR >> 12;
state = GPIOB->regs->IDR;
if (old_state != state) {
timer[event] = micros();
@@ -72,15 +89,27 @@ void sendData() {
digitalWrite(boardLed, LOW);
//initial data
initial1=initial;
initial2=initial>>8;
Serial.println("S");
Serial.print(initial); Serial.print(":");
Serial.println(samples);
//data
Serial.print(initial1); Serial.print(','); Serial.print(initial2); Serial.print(','); Serial.print(B00000000); Serial.print(":");
Serial.println(samples+2);
timefix = -timer[0]+timezerooffset;
for (int i = 0; i < samples; i++) {
Serial.print(pinChanged[i]); Serial.print(":");
timer[i]=timer[i]+timefix;
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");//Este segmento de codigo introduce un cambio en todos los
Serial.println(0); //canales, lo que soluciona un error en el codigo en processing
//al final se hace un cambio en todos los canales, lo que soluciona //otro pequeño fallo visual.
//data
for (int i = 0; i < samples; i++) {
pinChanged1=pinChanged;
pinChanged2=pinChanged>>8;
Serial.print(pinChanged1);Serial.print(','); Serial.print(pinChanged2); Serial.print(','); Serial.print(B00000000); Serial.print(":");
Serial.println(timer[i]);
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");
Serial.println((timer[samples-1]+400));
}
void reset_timer() {

View File

@@ -8,7 +8,7 @@
#define baudrate 115200 // check if it is the same in processing
#define samples 200 // the number of samples you want to take
#define timezerooffset 125 //microsegundos
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
@@ -19,6 +19,7 @@ volatile uint16_t timer1_overflow_count;
uint8_t initial, state, old_state;
uint8_t pinChanged[samples];
uint32_t timer[samples];
uint32_t timefix;
uint16_t event = 0;
void init_board() {
@@ -78,7 +79,10 @@ void start() {
PORTC = (1 << 0);
initial = PINB;
state = initial;
for (int i=0; i < samples; i++) {
pinChanged[i]=0;
}
}
@@ -86,15 +90,22 @@ void sendData() {
PORTC = (0 << 0); //turn off led
//initial data
Serial.println("S");
Serial.print(initial); Serial.print(":");
Serial.println(samples);
Serial.println("S");
Serial.print(initial); Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");
Serial.println(samples+2);
timefix = -timer[0]+timezerooffset;
for (int i = 0; i < samples; i++) {
timer[i]=timer[i]+timefix;
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");//Este segmento de codigo introduce un cambio en todos los
Serial.println(0); //canales evita fallo visual.
//data
for (int i = 0; i < samples; i++) {
Serial.print(pinChanged[i]); Serial.print(":");
Serial.print(pinChanged[i]);Serial.print(','); Serial.print(B00000000); Serial.print(','); Serial.print(B00000000); Serial.print(":");
Serial.println(timer[i]);
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");
Serial.println((timer[samples-1]+400));
}

View File

@@ -1,139 +0,0 @@
/*
* UNO.ino
*
* Created: 11/12/2016 19.35.51
* Author : Vincenzo
* Led on A0
*/
#define baudrate 115200 // check if it is the same in processing
#define samples 200 // the number of samples you want to take
#define timezerooffset 125 //microsegundos
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define prescaler 0x02
volatile uint16_t timer1_overflow_count;
uint8_t initial, state, old_state;
uint8_t pinChanged[samples];
uint32_t timer[samples];
uint32_t timefix;
uint16_t event = 0;
void init_board() {
PORTC = (0 << 0); DDRC |= (1 << 0); // led A0
DDRB |= 0x00; // pin 8-13 input
PORTB |= 0x3F; // pull-up
}
void init_timer() {
//clear
TCCR1A = 0b00000000;
TCCR1B = 0b00000000;
TIMSK1 = 0b00000000;
//settings
TCCR1A |= (0 << COM1A1) | (0 << COM1A0) | (0 << COM1B1) | (0 << COM1B0); //normal port operation
TCCR1A |= (0 << WGM11) | (0 << WGM10); //normal operation
TCCR1B |= (0 << WGM13) | (0 << WGM12); //normal operation
TCCR1B |= prescaler; //(0 << CS12) | (0 << CS11) | (1 << CS10); //clock prescaler
sei(); //enable interrupts
TIMSK1 |= (1 << TOIE1); // enable overflow interrupt
}
ISR(TIMER1_OVF_vect) {
timer1_overflow_count++;
}
void reset_timer1 () {
TCNT1 = 0;
timer1_overflow_count = 0;
}
uint32_t myMicros () {
cli();
if (TIFR1 & (1 << TOV1)) {
TIFR1 = (0 << TOV1);
timer1_overflow_count++;
}
uint32_t total_time = (65536 * timer1_overflow_count + TCNT1) / 2;
sei();
return total_time;
}
void start() {
_delay_ms(1000);
reset_timer1();
event = 0;
PORTC = (1 << 0);
initial = PINB;
state = initial;
for (int i=0; i < samples; i++) {
pinChanged[i]=0;
}
}
void sendData() {
PORTC = (0 << 0); //turn off led
//initial data
Serial.println("S");
Serial.print(initial); Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");
Serial.println(samples+3);
timefix = -timer[0]+timezerooffset;
for (int i = 0; i < samples; i++) {
timer[i]=timer[i]+timefix;
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");//Este segmento de codigo introduce un cambio en todos los
Serial.println(0); //canales, lo que soluciona un error en el codigo en processing
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");//al final se hace un cambio en todos los canales, lo que soluciona
Serial.println(1); //otro pequeño fallo visual.
//data
for (int i = 0; i < samples; i++) {
Serial.print(pinChanged[i]);Serial.print(','); Serial.print(B00000000); Serial.print(','); Serial.print(B00000000); Serial.print(":");
Serial.println(timer[i]);
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");
Serial.println((timer[samples-1]+400));
}
int main(void) {
Serial.begin(baudrate);
init_board();
init_timer();
start();
while (1) {
old_state = state;
state = PINB;
if (old_state != state) {
timer[event] = myMicros();
pinChanged[event] = state ^ old_state;
event++;
if (event == samples) {
sendData();
while (Serial.read() != 'G') ; //wait for the "go"
start();
}
}
}
}