From 57de283f3a93cf69af75c34258dbdbf6a4de01f1 Mon Sep 17 00:00:00 2001 From: Vincenzo Gibiino Date: Mon, 10 Sep 2018 12:12:09 +0200 Subject: [PATCH] added mega versio --- README.md | 4 +- STM32_LA.ino | 82 -------- UNO_LA.ino | 125 ------------ arduino_testLA.ino | 20 -- processing_LA.pde | 469 --------------------------------------------- 5 files changed, 2 insertions(+), 698 deletions(-) delete mode 100644 STM32_LA.ino delete mode 100644 UNO_LA.ino delete mode 100644 arduino_testLA.ino delete mode 100644 processing_LA.pde diff --git a/README.md b/README.md index 68ce95e..47536f1 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ A few days ago I needed a logic sniffer since I don't have any I thought to writ ## Usage -- upload to your board "UNO_LA.ino" or "MEGA_LA.ino" or "STM32_LA.ino" -- choose your board and serial port on "processing_LA.pde" +- upload to your board "UNO.ino" or "MEGA.ino" or "STM32.ino" +- choose your board and serial port on "processing.pde" - run it and have a good debug :D If you wish you could put a led on the arduino pin A0 to see when the MCU is recording, the number of samples is set to 200 but you could increment it until the memory is full. diff --git a/STM32_LA.ino b/STM32_LA.ino deleted file mode 100644 index d4631db..0000000 --- a/STM32_LA.ino +++ /dev/null @@ -1,82 +0,0 @@ -/* - Author : Vincenzo G - https://www.hackster.io/vincenzo-g/diy-logic-analyzer-f61ee5 - -*/ - -#define samples 300 -#define boardLed PB1 -uint8_t initial, state, old_state; -uint8_t pinChanged[samples]; -uint32_t timer[samples]; -uint16_t event = 0; - -//uncomment it if you want to use the USART1 instead of DFU serial -//#define Serial Serial1 - -void setup() { - - Serial.begin(115200); - - pinMode (boardLed, OUTPUT); - digitalWrite(boardLed, LOW); - - pinMode(PB12, INPUT_PULLUP); - pinMode(PB13, INPUT_PULLUP); - pinMode(PB14, INPUT_PULLUP); - pinMode(PB15, INPUT_PULLUP); - - startLA(); - -} - - -void startLA() { - //delay(1000); - - event = 0; - digitalWrite(boardLed, HIGH); - - reset_timer(); - initial = GPIOB->regs->IDR >> 12; - state = initial; - -} - -void loop() { - - old_state = state; - state = GPIOB->regs->IDR >> 12; - - if (old_state != state) { - timer[event] = micros(); - pinChanged[event] = state ^ old_state; - event++; - - if (event == samples) { - sendData(); - while (Serial.read() != 'G') ; //wait for the "go" - startLA(); - } - } -} - -void sendData() { - digitalWrite(boardLed, LOW); - - //initial data - Serial.println("S"); - Serial.print(initial); Serial.print(":"); - Serial.println(samples); - - //data - for (int i = 0; i < samples; i++) { - Serial.print(pinChanged[i]); Serial.print(":"); - Serial.println(timer[i]); - } -} - -void reset_timer() { - systick_uptime_millis = -1; - SYSTICK_BASE->CNT = 0; -} diff --git a/UNO_LA.ino b/UNO_LA.ino deleted file mode 100644 index 6e62f7d..0000000 --- a/UNO_LA.ino +++ /dev/null @@ -1,125 +0,0 @@ -/* - * LA.cpp - * - * Created: 11/12/2016 19.35.51 - * Author : Vincenzo - */ - -#define baudrate 115200 //check if it is the same in processing -#define samples 200 - -#define F_CPU 16000000UL -#include -#include -#include -#define prescaler 0x02 -volatile uint16_t timer1_overflow_count; - -uint8_t initial, state, old_state; -uint8_t pinChanged[samples]; -uint32_t timer[samples]; -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; - -} - - -void sendData() { - PORTC = (0 << 0); //turn off led - - //initial data - Serial.println("S"); - Serial.print(initial); Serial.print(":"); - Serial.println(samples); - - //data - for (int i = 0; i < samples; i++) { - Serial.print(pinChanged[i]); Serial.print(":"); - Serial.println(timer[i]); - } -} - - -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(); - } - } - } -} diff --git a/arduino_testLA.ino b/arduino_testLA.ino deleted file mode 100644 index cf280b9..0000000 --- a/arduino_testLA.ino +++ /dev/null @@ -1,20 +0,0 @@ -#define led A5 -#define led2 13 - -void setup() { - pinMode(led, OUTPUT); - pinMode(led2, OUTPUT); -} - - -void loop() { - - digitalWrite(led, HIGH); - delayMicroseconds(random(200)); - digitalWrite(led2, HIGH); - delayMicroseconds(random(200)); - digitalWrite(led2, LOW); - delayMicroseconds(random(200)); - digitalWrite(led, LOW); - delayMicroseconds(random(200)); -} diff --git a/processing_LA.pde b/processing_LA.pde deleted file mode 100644 index 81105df..0000000 --- a/processing_LA.pde +++ /dev/null @@ -1,469 +0,0 @@ -import processing.serial.*; -import java.util.Arrays; -Serial p; - -//////////////////////////////////////////////// -/*--------------------SETUP-------------------*/ - -//uncomment the line where your arduino/STM32 is connected -//String LA_port = "/dev/ttyACM0"; //linux DFU -//String LA_port = "/dev/ttyUSB0"; //linux Serial -String LA_port = "COM10"; //windows - -final int baudrate = 115200; //check if it is the same in arduino - -//change it to true if you are using a STM32 instead of arduino -final boolean STM32 = false; - -/*------------------END SETUP-----------------*/ -//////////////////////////////////////////////// - - -//colors: -int white = 255; -int black = 0; -int green = #00FF00; -int grey = 150; - - -// shift, reducer and millisecond view -float reducer = 1.0; -boolean milliseconds = false; -float xShift; - - -// start point in the processing window -int xEdge = 60; -int yEdge = 30; -int xEnd; -float[] xPos = {0, 0, 0, 0, 0, 0}; -int yBottom; -int yDiff; -int yPos = yEdge; -int ySave = yEdge; -boolean textCovered; -boolean drawTimes = true; - - -//Serial from mcu -//initial data -int samples; -int event; -int initialState; -boolean first = false; -boolean dataComplete = false; -//following data -boolean [][] state; -boolean [] isLow = new boolean[6]; -float[] usTime; -float[] xTime; -int[] pinChanged; - - -//buttons and others -int button1X = 8; -int button2X = 8; -int button3X = 80; -int button4X = 200; -int button5X = 270; -int buttonY; -int buttonH = 20; -int smallButtonW = 50; -int bigButtonW = 100; -int graphBoxH; -int textBoxH; -int immage = 1; -int corner = 10; - - -// bar scroll -int handleFill = grey; -float handleX; -float handleY; -float handleW = 20; -float handleH = 15; -boolean isDraggable = false; - - - -void setup () { - //p = new Serial(this, Serial.list()[0], 115200); - p = new Serial(this, LA_port, baudrate); - p.bufferUntil('\n'); - - size(1000, 460); - background(black); - smooth(4); - - graphBoxH = height -50; - textBoxH = height - 35; - yBottom = graphBoxH-20; - buttonY = textBoxH +8; - handleX = xEdge; - handleY = graphBoxH; -} - - -void cleanGraph() { - noStroke(); //no borders - fill(black); - rect(xEdge, 0, width, graphBoxH); //cancel the graph - stroke(green); //green lines - Arrays.fill(xPos, 0); //reset start point of the graph - textCovered = false; -} - - -void draw () { - - if (dataComplete==true) { - cleanGraph(); - pushMatrix(); //move the coordinate reference - translate(xEdge, 0); - for (int i=0; iwidth-handleW) handleX = width-handleW; - - getData(); - xShift = -map(handleX, xEdge, width-handleW, 0, xEnd-900); - } -} - - -void mousePressed() { - if (mouseX>handleX && mouseXhandleY && mouseYyBottom-15 && mouseY button1X && mouseX buttonY && mouseY button2X && mouseX buttonY && mouseY button3X && mouseX buttonY && mouseY button5X && mouseX buttonY && mouseY button4X && mouseX buttonY && mouseY button2X && mouseX buttonY && mouseY button3X && mouseX buttonY && mouseY button5X && mouseX yBottom-15 && mouseY button1X && mouseX handleX && mouseXhandleY && mouseY 0) - { - int i; - boolean drawLine = true; // alternate between dashes and gaps - - /* - Figure out x and y distances for each of the spacing values - I decided to trade memory for time; I'd rather allocate - a few dozen bytes than have to do a calculation every time - I draw. - */ - - for (i = 0; i < spacing.length; i++) - { - xSpacing[i] = lerp(0, (x1 - x0), spacing[i] / distance); - ySpacing[i] = lerp(0, (y1 - y0), spacing[i] / distance); - } - - i = 0; - while (drawn < distance) - { - if (drawLine) - { - line(x0, y0, x0 + xSpacing[i], y0 + ySpacing[i]); - } - x0 += xSpacing[i]; - y0 += ySpacing[i]; - /* Add distance "drawn" by this line or gap */ - drawn = drawn + mag(xSpacing[i], ySpacing[i]); - i = (i + 1) % spacing.length; // cycle through array - drawLine = !drawLine; // switch between dash and gap - } - } -}