Added the Mega version for processing and arduino,

New navigation features added too.
This commit is contained in:
sancho11
2019-01-12 01:02:23 -06:00
parent a4ad3c34e1
commit 0b87ec4e7a
2 changed files with 1017 additions and 112 deletions

View File

@@ -1,21 +1,14 @@
/*
* MEGA.ino
* LA.cpp
*
* Created: 11/12/2016 19.35.51
* Author : Vincenzo / sancho
* Modificaciones agregadas para funcionar con ArduinoMega2560 por Enmanuel Sancho Quintanilla
* La unidad minima en tiempo para este sistema es de 8 micro segundos lo que idealmente permitiria
* observar clocks con periodos de 62 kHz sin embargo para poder apreciar las señales logicas con suficiente
* resolucion se recomienda no superar los 30 kHz en el clock del sistema.
*/
* Author : Vincenzo
*/
#define baudrate 115200 // check if it is the same in processing
#define samples 200 // the number of samples you want to take
#define pin_used
#define baudrate 115200 //check if it is the same in processing
#define samples 400
#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>
@@ -30,32 +23,27 @@ uint8_t pinChanged3[samples];
uint32_t timer[samples];
uint32_t timefix;
uint16_t event = 0;
uint8_t cambio = 0;
void init_board()
{
// PORTC = (0 << 0); DDRC |= (1 << 0); // led A0
DDRB = 0x00;
DDRC = 0x00;
uint8_t cambio=0;
void init_board() {
// PORTC = (0 << 0); DDRC |= (1 << 0); // led A0
DDRB = 0x00;
DDRC = 0x00;
DDRL = 0x00;
if (PULLUP)
{
PORTA = B11111111; // pull-up
PORTC = B11111111; // Activamos el pull-up para que de no conectarse nada a puerto lea un uno siempre
PORTL = B11111111;
}
else
{
PORTA = B00000000;
PORTC = B00000000;
PORTL = B00000000;
if (PULLUP){
PORTA = B11111111; // pull-up
PORTC = B11111111; // Activamos el pull-up para que de no conectarse nada a puerto lea un uno siempre
PORTL = B11111111;
}
else{
PORTA = B00000000;
PORTC = B00000000;
PORTL = B00000000;
}
}
void init_timer()
{
void init_timer() {
//clear
TCCR1A = 0b00000000;
TCCR1B = 0b00000000;
@@ -63,43 +51,40 @@ void init_timer()
//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
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)
{
ISR(TIMER1_OVF_vect) {
timer1_overflow_count++;
}
void reset_timer1()
{
void reset_timer1 () {
TCNT1 = 0;
timer1_overflow_count = 0;
}
uint32_t myMicros()
{
uint32_t myMicros () {
cli();
if (TIFR1 & (1 << TOV1))
{
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()
{
void start() {
_delay_ms(1000);
// Serial.print("hi");
// Serial.print("hi");
reset_timer1();
event = 0;
@@ -110,58 +95,50 @@ void start()
state1 = initial1;
state2 = initial2;
state3 = initial3;
for (int i = 0; i < samples; i++)
{
pinChanged1[i] = 0;
pinChanged2[i] = 0;
pinChanged3[i] = 0;
//Serial.print(pinChanged1[i]); Serial.print(','); Serial.print(pinChanged2[i]); Serial.print(','); Serial.println(pinChanged3[i]); //debug
}
for (int i=0; i < samples; i++) {
pinChanged1[i]=0;
pinChanged2[i]=0;
pinChanged3[i]=0;
//Serial.print(pinChanged1[i]); Serial.print(','); Serial.print(pinChanged2[i]); Serial.print(','); Serial.println(pinChanged3[i]);
}
}
void sendData()
{
void sendData() {
//PORTC = (0 << 0); //turn off led
//initial data
Serial.println("S");
Serial.print(initial1);
Serial.print(',');
Serial.print(initial2);
Serial.print(',');
Serial.print(initial3);
Serial.print(":");
Serial.println(samples);
timefix = -timer[0] + timezerooffset;
for (int i = 0; i < samples; i++)
{
timer[i] = timer[i] + timefix;
Serial.print(initial1); Serial.print(','); Serial.print(initial2); Serial.print(','); Serial.print(initial3); 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(pinChanged1[i]);
Serial.print(',');
Serial.print(pinChanged2[i]);
Serial.print(',');
Serial.print(pinChanged3[i]);
Serial.print(":");
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]);
}
Serial.print(B11111111);Serial.print(','); Serial.print(B11111111); Serial.print(','); Serial.print(B11111111); Serial.print(":");
Serial.println((timer[samples-1]+400));
}
int main(void)
{
int main(void) {
Serial.begin(baudrate);
init_board();
init_timer();
start();
while (1)
{
cambio = 0;
while (1) {
cambio=0;
old_state1 = state1;
old_state2 = state2;
old_state3 = state3;
@@ -169,36 +146,28 @@ int main(void)
state2 = PINL;
state3 = PINC;
//Serial.print(state1);Serial.print(" , ");Serial.print(state2);Serial.print(" , ");Serial.print(state3);Serial.print(" : ");Serial.println(event);
if (old_state1 != state1)
{
pinChanged1[event] = state1 ^ old_state1;
cambio = 1;
if (old_state1 != state1 ) {
pinChanged1[event] = state1 ^ old_state1;
cambio=1;
}
if (old_state2 != state2)
{
pinChanged2[event] = state2 ^ old_state2;
cambio = 1;
if (old_state2 != state2 ) {
pinChanged2[event] = state2 ^ old_state2;
cambio=1;
}
if (old_state3 != state3)
{
pinChanged3[event] = state3 ^ old_state3;
cambio = 1;
if (old_state3 != state3 ) {
pinChanged3[event] = state3 ^ old_state3;
cambio = 1;
}
if (cambio == 1)
{
timer[event] = myMicros();
event++;
}
if (event == samples)
{
if (cambio == 1) {
timer[event] = myMicros();
event++;
}
if (event == samples) {
sendData();
while (Serial.read() != 'G')
{
;
} //wait for the "go"
while (Serial.read() != 'G') ; //wait for the "go"
start();
}
}
}
}