First quick attempt at an oscilloscope demo for the stampdock software of http://stampdock.com/ it demonstrates how to use the stampdock software from an mbed
Diff: main.cpp
- Revision:
- 0:6a0d5fb13029
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Nov 02 15:30:43 2010 +0000 @@ -0,0 +1,1357 @@ + + +// mbed demo program (needs stampdock software) +// by apspijkerman ap@apsdev.com + + +#include "mbed.h" + +//Serial pc(USBTX, USBRX); // tx, rx +Serial serial(USBTX, USBRX); // tx, rx default 9600 8N1 + +AnalogIn xa(p15); +AnalogIn ya(p16); + +DigitalOut myled1(LED1); +DigitalOut myled2(LED2); +DigitalOut myled3(LED3); +DigitalOut myled4(LED4); + + +void SetLed(int led, int mode) +{ + if (led == 0) myled1 = mode; + if (led == 1) myled2 = mode; + if (led == 2) myled3 = mode; + if (led == 3) myled4 = mode; +} + + +void Blink(int led) +{ + if (led == 0) myled1 = 1; + if (led == 1) myled2 = 1; + if (led == 2) myled3 = 1; + if (led == 3) myled4 = 1; + wait(0.1); + if (led == 0) myled1 = 0; + if (led == 1) myled2 = 0; + if (led == 2) myled3 = 0; + if (led == 3) myled4 = 0; +} + + + +void SetLeds(void) +{ + int t; + +// flash all leds +/* + for (t = 0; t < 4; t++){ + SetLed(t, 1); + } + wait(1); + for (t = 0; t < 4; t++){ + SetLed(t, 0); + } +*/ +// kitt led test + for (t = 0; t < 4; t++){ + SetLed(t, 1); + wait(0.2); + SetLed(t, 0); + } +} + + + +void ToggleLed(int led) +{ + if (led == 0) myled1 = !myled1; + if (led == 1) myled2 = !myled2; + if (led == 2) myled3 = !myled3; + if (led == 3) myled4 = !myled4; + wait(0.25); +} + +//public class demo { + + // seems we need to write commands in one go, so have a buffer + //static StringBuffer buf = new StringBuffer(128); + + // check if the system has events for us + // if value greater then zero then thats the ID number of + // the gui element or the event number + + +void InitStampdock(void) +{ +// serial.begin( 9600 ); +// serial.baud(19200); +// serial.format(8,None,1); + SetLeds(); + +} + + + + static int GetEvent() + { + int e = 0, ready = 0, cnt = 0; + char v; + // DEBUG "?Q;" 'query for events .. also sync with PC + // SERIN 16, Baud, [x] '16468 + // PAUSE 1 ' millisecs .. let serial bus settle + + //serial.printf("\n"); // test .. purge buffer ? + serial.printf("?Q;"); // query for event + //wait(0.11); //CPU.delay(1); // ?? + do{ + if (serial.readable()){ + //v = Serial.read(); + v = serial.getc(); + + e = v; + if (e < 0) e += 256; // signed char to int ? + + //e = (255-v) + 1; // 2's complement + + //serial.printf("EVENT:"); + //serial.printf(e); + //serial.printf("<-"); + ready = 1; + }else{ + //serial.printf("no event"); + wait(0.0001); + cnt++; + if (cnt == 1000) ready = 1; + Blink(0); + } + }while(!ready); + //CPU.delay(10); + + // .. flush out of sync events .. + //while (serial.readable()){ + if (serial.readable()){ + // Serial.read(); + serial.getc(); + Blink(1); + } + + if (serial.readable()){ + // Serial.read(); + serial.getc(); + Blink(2); + } + + return e; + } + + // request the state of GUI element i + + static int GetValue(int i) + { + int e = 0, ready = 0, cnt = 0; + char v; + //StringBuffer buf=new StringBuffer(12); + + // DEBUG "?i",DEC x,";" 'get state of gui element x + // SERIN 16, Baud, [s] '16468 + // PAUSE 1 ' millisecs + + //serial.printf("?i"); // query for event + //serial.printf(i); + //serial.printf(";"); + + //buf.clear(); + //buf.append("?i"); + //buf.append( i ); + //buf.append(";"); + //System.out.print(buf.toString()); + + serial.printf("?i%d;", i ); + + //wait(0.1); //CPU.delay(1); // ?? + do { + if (serial.readable()){ + //v = Serial.read(); + v = serial.getc(); + + e = v; + if (e < 0) e += 256; // signed char to int ? + + //e = (255-v) + 1; // 2's complement + ready = 1; + }else{ + wait(0.0001); + cnt++; + if (cnt == 1000) ready = 1; + } + //CPU.delay(10); + }while(!ready); + return e; + } + + // set the state (v) of gui element i + + static void SetValue(int i, int v) + { + //StringBuffer buf=new StringBuffer(16); + + // DEBUG "?i",DEC x,";" 'get state of gui element x + // SERIN 16, Baud, [s] '16468 + // PAUSE 1 ' millisecs + + //serial.printf("!i"); // set value + //serial.printf(i); + //serial.printf(",") + //serial.printf(v); + //serial.printf(";"); + + //buf.clear(); // slow ascii method to allow values > 255 + if (i <= 255){ + //buf.append("!ib"); // fast binary way + //buf.append((char) 2 ); // write 2 bytes + //buf.append((char) i ); // write id + //buf.append((char) v ); // always smaller als 256 + + serial.printf("!ib%c%c%c;", 2 , i , v ); + }else{ + //buf.append("!i"); // slow ascii way + //buf.append( i ); // in case ID greater as 255 + //buf.append(","); + //buf.append( v ); + + serial.printf("!i%d,%d;", i, v); + } + //buf.append(";"); + //System.out.print(buf.toString()); + + //CPU.delay(1); // ?? + } + + + static char ReadByte() + { + char v = 0, ready = 0, cnt = 0; + + //wait(0.1); + do { + if (serial.readable()){ + //v = Serial.read(); + v = serial.getc(); + + //e = v; + //if (e < 0) e += 256; // signed char to int ? + ready = 1; + }else{ + wait(0.0001); + cnt++; + if (cnt == 1000) ready = 1; + } + }while(!ready); + return v; + } + + + static void SetColor(int r, int g, int b) + { + // StringBuffer buf=new StringBuffer(12); + + if (r == 0 && g == 0 && b == 0){ + serial.printf("!s;"); // black + }else{ + //buf.clear(); + //buf.append("!sb"); // fast binary method .. so values <= 255 + //buf.append((char) 3 ); // write 3 bytes + //buf.append((char) r ); + //buf.append((char) g ); + //buf.append((char) b ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!sb%c%c%c%c;", 3, r, g, b ); + } + //CPU.delay(1); // ?? + } + + + static void SetGrey(int g) + { + // StringBuffer buf=new StringBuffer(12); + + // DEBUG "!fb", 1, dat, ";" + + if (g == 0){ + //System.out.print("!f;"); // black + serial.printf("!f;"); // black + }else{ + //buf.clear(); + //buf.append("!fb"); // fast binary method .. so values <= 255 + //buf.append((char) 1 ); // write 3 bytes + //buf.append((char) g ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + + serial.printf("!sf%c%c;", 1, g ); + } + //CPU.delay(1); // ?? + } + + + + static void SetLED(int i, int r, int g, int b) + { + // StringBuffer buf=new StringBuffer(12); + + //buf.clear(); + //buf.append("!jb"); // fast binary method .. so values <= 255 + //buf.append((char) 4 ); // write 4 bytes + //buf.append((char) i ); + //buf.append((char) r ); + //buf.append((char) g ); + //buf.append((char) b ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!jb%c%c%c%c%c;", 4, i, r, g, b ); + + //CPU.delay(1); // ?? + } + + static void DrawLine(int x1, int y1, int x2, int y2) + { + //StringBuffer buf=new StringBuffer(36); + + //if (x1 < 0) x1 = 0; + //if (y1 < 0) y1 = 0; + //if (x2 < 0) x2 = 0; + //if (y2 < 0) y2 = 0; + + //buf.clear(); + if (x1 >= 0 && x1 <= 255 && y1 >= 0 && y1 <= 255 && x2 >= 0 && x2 <= 255 && y2 + +>= 0 && x2 <= 255){ + //buf.append("!lb"); // fast binary method + //buf.append((char) 4 ); // write 4 bytes + //buf.append((char) x1 ); + //buf.append((char) y1 ); + //buf.append((char) x2 ); + //buf.append((char) y2 ); + + serial.printf("!lb%c%c%c%c%c;", 4, x1, y1, x2, y2 ); + }else{ + //buf.append("!l"); // slow method .. so values > 255 + //buf.append( x1 ); + //buf.append("," ); + //buf.append( y1 ); + //buf.append("," ); + //buf.append( x2 ); + //buf.append("," ); + //buf.append( y2 ); + + serial.printf("!l%d,%d,%d,%d;", x1, y1, x2, y2); + } + //buf.append(";" ); + //System.out.print(buf.toString()); + + //CPU.delay(1); // ?? + } + + static void Plot(int x, int y) + { + //StringBuffer buf=new StringBuffer(16); + + //if (x < 0) x = 0; + //if (y < 0) y = 0; + + //buf.clear(); + if (x >= 0 && x <= 255 && y >= 0 && y <= 255){ + //buf.append("!pb"); // fast method .. so values <= 255 + //buf.append((char) 2 ); // write 2 bytes + //buf.append((char) x ); + //buf.append((char) y ); + + serial.printf("!pb%c%c%c;", 2, x, y); + }else{ + //buf.append("!p"); // slow method .. so values > 255 + //buf.append( x ); + //buf.append("," ); + //buf.append( y ); + + serial.printf("!p%d,%d;", x, y); + } + //buf.append(";" ); + //System.out.print(buf.toString()); + + //CPU.delay(1); // ?? + } + + + static void DrawGrid(int a, int b, int c, int d, int e, int f) + { + //StringBuffer buf=new StringBuffer(36); + + //buf.clear(); + //buf.append("!ab"); // fast binary method + //buf.append((char) 6 ); // write 6 bytes + //buf.append((char) a ); // xspace + //buf.append((char) b ); // yspace + //buf.append((char) c ); // xlines + //buf.append((char) d ); // ylines + //buf.append((char) e ); // xoffset + //buf.append((char) f ); // yoffset + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!ab%c%c%c%c%c%c%c;", 6, a, b, c, d, e, f ); + + //CPU.delay(1); // ?? + } + + static void ClearScreen() + { + serial.printf("!c;"); + } + + // shortcut: Cmd("!c;"); or Cmd("?O;"); + + static void Cmd(char *p) + { + serial.printf(p); + } + + // for "!nSpeech;" or "!Llog file;" + + static void CmdStr(char cmd, char *p ) + { + //buf.clear(); + //buf.append("!"); + //buf.append( cmd ); + //buf.append( p ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!%c%s;", cmd, p); + } + + // cmd with no argument so Cmd0('s'); = "!s;" + + static void Cmd0(char cmd ) + { + //buf.clear(); + //buf.append("!"); + //buf.append( cmd ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!%c;", cmd); + } + + // request with no arguments + // Req0( 'm' ); = "?m;" + + static void Req0(char req ) + { + //buf.clear(); + //buf.append("?"); + //buf.append( req ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("?%c;", req ); + } + + // cmd with 1 arg Cmd1('a' , 1 ); = "!a1;" + + static void Cmd1(char cmd, int arg1 ) + { + //buf.clear(); + //buf.append("!"); + //buf.append( cmd ); + if (arg1 < 256){ + //buf.append( 'b' ); // binary mode + //buf.append((char) 1 ); // 1 argument + //buf.append((char) arg1 ); + + serial.printf("!%cb%c%c;", cmd, 1, arg1 ); + }else{ + //buf.append( arg1 ); // slow ascii mode + + serial.printf("!%c%d;", cmd, arg1 ); + } + //buf.append(";" ); + //System.out.print(buf.toString()); + } + + // cmd with 2 args Cmd2('G', 20, 1); = "!G20,1;" + // plot = Cmd2( 'p', x, y ); + + static void Cmd2(char cmd, int arg1, int arg2 ) + { + //buf.clear(); + //buf.append("!" ); // ! + //buf.append( cmd ); + if (arg1 < 255 && arg2 < 255){ + //buf.append( 'b' ); // binary mode + //buf.append((char) 2 ); // 2 arguments + //buf.append((char) arg1 ); + //buf.append((char) arg2 ); + + serial.printf("!%cb%c%c%c;", cmd, 2, arg1, arg2 ); + }else{ + //buf.append( arg1 ); // slow ascii mode + //buf.append("," ); + //buf.append( arg2 ); + + serial.printf("!%c%d,%d;", cmd, arg1, arg2 ); + } + //buf.append(";" ); + //System.out.print(buf.toString()); + } + + // cmd with 3 args + // setcolor = Cmd3( 's', r, g, b ); + + static void Cmd3(char cmd, int arg1, int arg2, int arg3 ) + { + //buf.clear(); + //buf.append("!" ); // ! + //buf.append( cmd ); + if (arg1 < 255 && arg2 < 255 && arg3 < 255){ + //buf.append( 'b' ); // binary mode + //buf.append((char) 3 ); // 3 arguments + //buf.append((char) arg1 ); + //buf.append((char) arg2 ); + //buf.append((char) arg3 ); + + serial.printf("!%cb%c%c%c%c;", cmd, 3, arg1, arg2, arg3 ); + }else{ + //buf.append( arg1 ); // slow ascii mode + //buf.append("," ); + //buf.append( arg2 ); + //buf.append("," ); + //buf.append( arg3 ); + + serial.printf("!%c%d,%d,%d;", cmd, arg1, arg2, arg3 ); + } + //buf.append(";" ); + //System.out.print(buf.toString()); + } + + // cmd with 4 args + // line = Cmd4( 'l', x1, y1, x2, y2); + + static void Cmd4(char cmd, int arg1, int arg2, int arg3, int arg4 ) + { + //buf.clear(); + //buf.append("!" ); // ! + //buf.append( cmd ); + if (arg1 < 255 && arg2 < 255 && arg3 < 255 && arg4 < 255){ + //buf.append( 'b' ); // binary mode + //buf.append((char) 4 ); // 4 arguments + //buf.append((char) arg1 ); + //buf.append((char) arg2 ); + //buf.append((char) arg3 ); + //buf.append((char) arg4 ); + + serial.printf("!%cb%c%c%c%c%c;", cmd, 4, arg1, arg2, arg3, arg4 ); + }else{ + //buf.append( arg1 ); // slow ascii mode + //buf.append("," ); + //buf.append( arg2 ); + //buf.append("," ); + //buf.append( arg3 ); + //buf.append("," ); + //buf.append( arg4 ); + + serial.printf("!%c%d,%d,%d,%d;", cmd, arg1, arg2, arg3, arg4 ); + } + //buf.append(";" ); + //System.out.print(buf.toString()); + } + + // play video, mp3 or picture + + static void Media(char *p) + { + //buf.clear(); + //buf.append("!V"); + //buf.append( p ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!V%s;", p); + } + + static void Speech(char *p) + { + //buf.clear(); + //buf.append("!n"); + //buf.append( p ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!n%s;", p); + } + + static void Log(char *p) + { + //buf.clear(); + //buf.append("!L"); + //buf.append( p ); + //buf.append(";" ); + //System.out.print(buf.toString()); + + serial.printf("!L%s;", p); + } + + static void ScrollLeft() + { + serial.printf("!G20,1;"); + } + +/* + static void DrawGrid(int a, int b, int c, int d, int e, int f) + { + //StringBuffer buf=new StringBuffer(36); + + //buf.clear(); + //buf.append("!ab"); // fast binary method + //buf.append((char) 6 ); // write 6 bytes + //buf.append((char) a ); // xspace + //buf.append((char) b ); // yspace + //buf.append((char) c ); // xlines + //buf.append((char) d ); // ylines + //buf.append((char) e ); // xoffset + //buf.append((char) f ); // yoffset + //buf.append(";" ); + + //System.out.print(buf.toString()); + + serial.printf("!ab%c%c%c%c%c%c%c;", 6, a, b, c, d, e, f ); + + //CPU.delay(1); // ?? + } +*/ + + /* + static void initpins() { + // OUTPUT dischargecap 'capacitor reset p 15 + // LOW dischargecap 'disable p 15 + + // OUTPUT chargecap 'capacitor charge p 14 + // HIGH chargecap 'disable p 14 + + // INPUT chanblow 'channel b p 12 + // INPUT chanalow 'channel a p 13 + // INPUT chanbhigh 'channel b high p 10 + // INPUT chanahigh 'channel a high p 11 + + CPU.setInput (CPU.pins[10]); // chan b high opamp + CPU.setInput (CPU.pins[11]); // chan a high opamp + CPU.setInput (CPU.pins[12]); // chan b low opamp + CPU.setInput (CPU.pins[13]); // chan a low opamp + + CPU.setOutput(CPU.pins[14]); // charge cap pin + CPU.setOutput(CPU.pins[15]); // discarge cap pin + + CPU.writePin (CPU.pins[15] , false ); + CPU.writePin (CPU.pins[14] , true ); + } + + + // interface with ltc1298 chip + + // static int gEnablePin; // speedup ? + // static int gClockPin; + // static int gDataPin; + + static void initadc(int dataPin, int clockPin, int enablePin){ + + //gEnablePin = CPU.pins[enablePin]; // speedup ? + //gClockPin = CPU.pins[clockPin]; + //gDataPin = CPU.pins[dataPin]; + + CPU.writePin(CPU.pins[enablePin],false); // init the bus + CPU.writePin(CPU.pins[clockPin ],false); + CPU.delay(100); // settle down + CPU.writePin(CPU.pins[enablePin],false); + CPU.writePin(CPU.pins[enablePin],true ); + + //CPU.writePin(CPU.pins[dataPin ],false ); // test + //Serial.print(CPU.pins[ 1 ]); // just adds one ? + } + + static int readadc(int dataPin, int clockPin, int enablePin, int channel, int + +mode){ + + int command, readSize; + int clockIn; + + if (channel == 0) command = 0x1a; // %11010 read ch0 (pin2) + else command = 0x1e; // %11110 read ch1 (pin3) + + readSize = 12; // Bytes to Read on the LTC1298 + //resolution = 4096; // Range of the LTC1298 + //clockIn = 1000; + + CPU.writePin(CPU.pins[enablePin],false); + // set port + CPU.shiftOut(CPU.pins[dataPin],CPU.pins[clockPin],5,CPU.SHIFT_MSB,(command << + +11)); + // read the value + clockIn = + +CPU.shiftIn(CPU.pins[dataPin],CPU.pins[clockPin],readSize,CPU.PRE_CLOCK_MSB); + CPU.writePin(CPU.pins[enablePin],true); + + //CPU.delay(100); + //CPU.writePin(CPU.pins[dataPin],false ); // test + //CPU.setInput(dataPin); + + + if (mode == 0){ // low + clockIn = clockIn - (2048-128); + }else{ + if (mode == 1){ // high + //clockIn = clockIn / 16; // make 8 bits from 12 + clockIn = clockIn >> 4; // make 8 bits from 12 + }else{ // gnd + clockIn = 128; + } + } + + // Serial.print("v:"); + // Serial.print(channel); + // Serial.print(","); + // Serial.print(clockIn); + // Serial.println(""); + + return clockIn; + } + */ + + + /* + static int measure(int channel, int mode) { + int e, time; + + if (channel == 0){ // chan a + if (mode == 0){ + e = 13; // a low + }else{ + if (mode == 1){ + e = 11; // a high + }else{ + return 128; // gnd + } + } + }else{ // chan b + if (mode == 0){ + e = 12; // b low + }else{ + if (mode == 1){ + e = 10; // b high + }else{ + return 128; // gnd + } + } + } + + // PULSOUT dischargecap, 10 '2uS units -> 20uS + + //CPU.writePin(CPU.pins[15] , 1 ); // discharge cap + //CPU.delay( 1 ); + //CPU.writePin(CPU.pins[15] , 0 ); + CPU.pulseOut(2, CPU.pins[15] ); // 2 x 8.7 = 17 uS + + // LOW chargecap 'start charge + // RCTIME chanahigh, 0 , val 'PULSIN + // HIGH chargecap 'stop charge + + CPU.writePin(CPU.pins[14] , false ); + time = CPU.rcTime( 1000 ,CPU.pins[ e ], true ); // 8.68 uS units (0-200uS) + CPU.writePin(CPU.pins[14] , true ); + + //CPU.readPin( CPU.pins[e]); // switch back to input + time = time << 3; // resolution 8 times lower as basic stamp + + return time; + } + */ + + + +/* + val = readadc(2,1,0, 0, ChanAMode ); + val = readadc(2,1,0, 1, ChanBMode ); ; +*/ +// mode0 = low , mode1 = high + +int readadc(int p1, int p2, int p3, int chan, int mode) +{ + int ret; + + if (mode == 0){ + if (chan == 0) ret = xa * 4096; + if (chan == 1) ret = ya * 4096; + } + if (mode == 1){ + if (chan == 0) ret = xa * 256; + if (chan == 1) ret = ya * 256; + } + + return ret; +} + +int measure( int chan, int mode) +{ + int ret; + + if (mode == 0){ + if (chan == 0) ret = xa * 4096; + if (chan == 1) ret = ya * 4096; + } + if (mode == 1){ + if (chan == 0) ret = xa * 256; + if (chan == 1) ret = ya * 256; + } + + return ret; +} +#define boolean int + + // ChanXMode '0=off, 1=low, 2=high, 3=gnd ? + // Mode '0=scope, 1=XY, 2=record (3=off ?) + + + + + +int main() { + boolean UseChanA = true, UseChanB = true; // Bit + boolean ready, grid = true, adc = false; // Bit + int ChanAMode = 0, ChanBMode = 0, mode = 0; // Nib + int PosA = 128, PosB = 128; + + int val, valb, ecnt = 0; // Word + int pval = 0, pvalb = 0; // Bytes + int x, s, cnt = 0, ptr, speed = 0; // Byte + + boolean trigMode = true, trigEdge = false, trigSrc = false; // Bit + int trigLevel = 127; // Byte (128 results in 127 !) + int mem[100]; // [] mem; + + //StringBuffer serbuf = new StringBuffer(80); + + //mem = new int [100]; + + InitStampdock(); + + + //initpins(); + //initadc(2,1,0); + + //for (s = 0; s < 100; s++) System.out.print((char) 127 ); + //System.out.print((char) 127 ); + //System.out.print("scope running .. "); + serial.printf("scope running .. "); + + // reset value of gui buttons if reset + SetValue(1, mode); // System.out.print("!i1,0;"); // mode, 0 is xt scope + + SetValue(102,0); // System.out.print("!i102,1;"); // on/off switch on + if (grid) SetValue(103,1); else SetValue(103,0); // System.out.print("!i103,1;"); // grid switch on + if (adc) SetValue(104,1); else SetValue(104,0); // System.out.print("!i104,0;"); // ltc1298 off + + SetValue(30, speed); // System.out.print("!i30,0;"); // speed switch 0 + SetValue(40, trigLevel); // System.out.print("!i40,128;"); // trigger level 128 + if (trigMode) SetValue(41,1); else SetValue(41,0); // System.out.print("!i41,1;"); // trigger on + if (trigEdge) SetValue(42,1); else SetValue(42,0); // System.out.print("!i42,1;"); // trigger edge + if (trigSrc) SetValue(43,1); else SetValue(43,0); // System.out.print("!i43,0;"); // trigger source + + SetValue(10, PosA); // System.out.print("!i10,128;"); // pos chan a + SetValue(12, ChanAMode); // System.out.print("!i12,0;"); // chan a mode + if (UseChanA) SetValue(11,1); else SetValue(11,0); // System.out.print("!i11,1;"); // channel a on + + SetValue(20, PosB); // System.out.print("!i20,128;"); // pos chan b + SetValue(22, ChanBMode); // System.out.print("!i22,0;"); // chan b mode + if (UseChanB) SetValue(21,1); else SetValue(21,0); // System.out.print("!i21,1;"); // channel b on + + while (true){ + if (ecnt == 2){ // test speed up + x = GetEvent(); + ecnt = 0; + }else{ + ecnt++; + x = 0; + } + + if (x != 0){ // do we have a gui click or event ? + ecnt = 0; // just had an event, so max wait + s = GetValue(x); // get value of gui element x + + // now handle GUI element x with value/state s + if (x == 1){ //mode 0=scope, 1=xy, 2=rec(,3 =off ?) + mode = s; + // clear graph + //'DEBUG "!s100,100,200;!c;" 'set blue color , clear screen 17c + //DEBUG "!sb",3, 100,100,200, ";!c;" 'fast binary way to set color 11c + //System.out.print("!s100,100,200;!c;"); + SetColor(100,100,200); + ClearScreen(); + } else + if (x == 102){ // on/off switch ?? + // mode = s; + } else + if (x == 100){ // turnknob for recorder + // mode = s; + } else + if (x == 103){ // grid on/off switch + //grid = s; + if (s == 0) grid = false; else grid = true; + } else + if (x == 104){ // ltc1298 on/off switch + //grid = s; + if (s == 0) adc = false; else adc = true; + } else + if (x == 30){ // speed 0,1,2,3 + speed = s; + } else + + + + + if (x == 40){ // trigger level + trigLevel = 255 - s; + } else + if (x == 41){ // trigger on/off + //trigMode = s; + if (s == 0) trigMode = false; else trigMode = true; + } else + if (x == 42){ // trigger edge + //trigEdge = s; + if (s == 0) trigEdge = false; else trigEdge = true; + } else + if (x == 43){ // trigger source + //trigSrc = s; + if (s == 0) trigSrc = false; else trigSrc = true; + } else + + if (x == 10){ // pos chan a + PosA = s; + } else + if (x == 11){ // chan a on/off + //UseChanA = s; + if (s == 0) UseChanA = false; else UseChanA = true; + } else + if (x == 12){ // chan a mode (0=1.5v, 1=15v, 2=gnd) + ChanAMode = s; + } else + + if (x == 20){ // pos chan b + PosB = s; + } else + if (x == 21){ // chan b on/off + //UseChanB = s; + if (s == 0) UseChanB = false; else UseChanB = true; + } else + if (x == 22){ // chan b mode (0=1.5v, 1=15v, 2=gnd) + ChanBMode = s; + } + } // if event + + + if (mode == 0){ // xt scope mode + // trigger + if (trigMode){ + + if (trigEdge == false){ + pval = 255; + }else{ + pval = 0; + } + cnt = 0; + ready = false; + do { + cnt++; + if (cnt == 20) ready = true; + + if (adc){ // ltc 1298 mode + if (trigSrc == false){ // chan a + val = readadc(2,1,0, 0, ChanAMode ); + }else{ // chan b + val = readadc(2,1,0, 1, ChanBMode ); ; + } + }else{ // opamp/transistor mode + + if (trigSrc == false){ // chan a + val = measure(0, ChanAMode ); + }else{ // chan b + val = measure(1, ChanBMode ); + } + + } + // now val is the value we want to check trigger on + + if (trigEdge == false) { + if (trigLevel < val && trigLevel >= pval) ready = true; + }else{ + if (trigLevel > val && trigLevel <= pval) ready = true; + } + pval = val; + + }while (!ready); + } // trigMode + + ptr = 0; // mem counter + if (adc){ // ltc 1298 mode + for (cnt = 0; cnt <= 29; cnt++){ + if (UseChanA){ + //val = readadc(2,1,0, 0, ChanAMode ); + //if (ChanAMode == 0){ + // val = val - (2048-128); + //}else{ + // val = val >> 4; + //} + //mem[ptr] = val; + mem[ptr] = readadc(2,1,0, 0, ChanAMode ); + } + ptr++; + + if (UseChanB){ + //val = readadc(2,1,0, 1, ChanBMode ); + //if (ChanBMode == 0){ + // val = val - (2048-128); + //}else{ + // val = val >> 4; + //} + //mem[ptr] = val; + mem[ptr] = readadc(2,1,0, 1, ChanBMode ); + } + ptr++; + + if (speed > 0){ + if (speed == 1) wait(0.001); // CPU.delay(speed); + if (speed == 2) wait(0.01 ); // CPU.delay(speed); + if (speed == 3) wait(0.1 ); // CPU.delay(speed); + } + } // for + }else{ // opamp/transistor mode + for (cnt = 0; cnt <= 29; cnt++){ + if (UseChanA){ + //val = measure(0, ChanAMode ); + //mem[ptr] = val; + mem[ptr] = measure(0, ChanAMode ); + } + ptr++; + + if (UseChanB){ + //val = measure(1, ChanBMode ); + //mem[ptr] = val; + mem[ptr] = measure(1, ChanBMode ); + } + ptr++; + + if (speed > 0){ + if (speed == 1) wait(0.001); // CPU.delay(speed); + if (speed == 2) wait(0.01 ); // CPU.delay(speed); + if (speed == 3) wait(0.1 ); // CPU.delay(speed); + } + } // for + } // !adc + + // ' clear graph + // 'DEBUG "!s100,100,200;!c;" 'set blue color , clear screen 17c + // DEBUG "!sb",3, 100,100,200, ";!c;" 'fast binary way to set color 11c + //System.out.print("!s100,100,200;!c;"); + SetColor(100,100,200); + ClearScreen(); + + if (grid){ + //'DEBUG "!s128,128,228;" 'set lighter color 14c + // DEBUG "!sb",3,128,128,228,";" 'fast binary way to set color 8c + //System.out.print("!s128,128,228;"); + SetColor(128,128,228); + + //'DEBUG "!a20,20,29,19,55,12;" 'slow ascii way draw grid 20c + //DEBUG "!ab",6,20,20,29,19,55,12,";" 'fast binary way to draw grid 11c + //System.out.print("!a20,20,29,19,55,12;"); + DrawGrid(20,20,29,19,55,12); + + if (trigMode){ + cnt = trigLevel; + if (trigSrc == false){ + cnt = 255 - cnt + PosA - 128; + }else{ + cnt = 255 - cnt + PosB - 128; + } + + // 'DEBUG "!l", DEC 1,",", DEC cnt,",", DEC 40,",", DEC cnt, ";" 'slow + //DEBUG "!lb", 4,1,cnt,40,cnt,";" ' fast + //System.out.print("!l1,"); + //System.out.print( cnt); + //System.out.print(",40,"); + //System.out.print( cnt ); + //System.out.print(";"); + DrawLine(1,cnt,40,cnt); + } // end trigMode + } // end grid + + + if (UseChanA){ + // draw channel a + // 'set color black + // 'DEBUG "!s0,0,0;" 'slow ascii way to set color 8c + // DEBUG "!sb",3, 0,0,0, ";" 'fast binary way to set color 8c + //System.out.print("!s0,0,0;"); + SetColor(0,0,0); + + ptr = 0; + s = mem[ ptr ]; + s = 255 - s + PosA - 128; + ptr = ptr + 2; + s -= 60; + + //DEBUG "!Pb", 33,20, 0,60 , s ' init poly line cmd in binary mode 38c + //' 33 is number of bytes we are going to send + //' 20=dx , 0=dy (which means we only send y values) + //' 0,60 = start x,y + + //System.out.print("!P20,0,60,"); + //System.out.print( s ); +/* + serbuf.clear(); + serbuf.append("!Pb"); // poly line, binary mode + serbuf.append((char)33); // 33 values follow + serbuf.append((char)20); // dx=20 + serbuf.append((char) 0); // dy=0 .. so only y values + serbuf.append((char)60); // x start + serbuf.append((char) s); // y start +*/ + serial.printf("!Pb"); + serial.printf("%c%c%c%c%c", 33, 20, 0, 60, s); + + for (cnt = 0; cnt <= 28; cnt++){ + x = mem[ ptr ]; + x = 255 - x + PosA - 128; + ptr = ptr + 2; + + //'' --- slow line --- + //''val = cnt * 20 + //''DEBUG "!l",DEC val,",",DEC s,",", DEC val+20,",", DEC x,";" ' chars 18 + //'' --- faster line --- + //''val = cnt * 8 + //''DEBUG "!lb", 4 , val , s, val+8 , x , ";" 'chars 8 + //'' --- fastest line --- + //DEBUG x 'chars 1 (poly line cmd with constant dx) + + //System.out.print( "," ); + //System.out.print( x ); + + x -= 60; + if (x > 127) x -= 256; // int to char ? + //serbuf.append((char) x ); // y value of next line + serial.printf("%c", x ); // y value of next line + + //s = x; + } + //System.out.print(";"); + //serbuf.append(";"); + //System.out.print(serbuf.toString()); + serial.printf(";"); + + } // end UseChanA + + if (UseChanB){ + //' draw channel b + //'set color white + //'DEBUG "!s255,255,255;" 'slow ascii way to set color + //DEBUG "!sb",3,255,255,255,";" 'fast binary way to set color + //System.out.print("!s255,255,255;"); + SetColor(255,255,255); + + ptr = 1; + s = mem[ ptr ]; + s = 255 - s + PosB - 128; + ptr = ptr + 2; + s -= 60; + + //DEBUG "!Pb", 33,20, 0,60 , s ' init poly line cmd in binary mode 38c + //' 33 is number of bytes we are going to send + //' 20=dx , 0=dy (which means we only send y values) + //' 0,60 = start x,y + + //System.out.print("!P20,0,60,"); + //System.out.print( s ); +/* + serbuf.clear(); + serbuf.append("!Pb"); + serbuf.append((char)33); + serbuf.append((char)20); + serbuf.append((char) 0); + serbuf.append((char)60); + serbuf.append((char) s); +*/ + serial.printf("!Pb"); + serial.printf("%c%c%c%c%c", 33, 20, 0, 60, s ); + + for (cnt = 0; cnt <= 28; cnt++){ + x = mem[ ptr ]; + x = 255 - x + PosB - 128; + ptr = ptr + 2; + + //'' --- slow line --- + //''val = cnt * 20 + //''DEBUG "!l",DEC val,",",DEC s,",", DEC val+20,",", DEC x,";" + //'' --- faster line --- + //''val = cnt * 8 + //''DEBUG "!lb", 4 , val , s, val+8 , x , ";" + //'' --- fastest line --- + //DEBUG x 'chars 1 (poly line cmd with constant dx) + + //System.out.print( "," ); + //System.out.print( x ); + + x -= 60; + if (x > 127) x -= 256; // int to char ? + //serbuf.append((char) x ); + serial.printf("%c", x ); + + //s = x; + } + //System.out.print(";"); + //serbuf.append(";"); + //System.out.print(serbuf.toString()); + serial.printf(";"); + + } // end UseChanB + + //CPU.delay(1); + } // end xt scope mode + + if (mode == 2){ // recorder mode + if (adc){ // ltc1298 mode + val = readadc(2,1,0, 0, ChanAMode ); + valb = readadc(2,1,0, 1, ChanBMode ); + }else{ + val = measure(0, ChanAMode ); + valb = measure(1, ChanBMode ); + } + + val = val + PosA - 128; // offset + valb = valb + PosB - 128; + + //' set plot color + //DEBUG "!s0,0,0;" + //System.out.print("!s0,0,0;"); + SetColor(0,0,0); + + //' plot xy + //'DEBUG "!p", DEC 610,",", DEC val, ";" + //' line xy + //DEBUG "!l", DEC 610,",", DEC val,",", DEC 609,",", DEC pval ,";" + + //System.out.print("!l610,"); + //System.out.print( val ); + //System.out.print(",609,"); + //System.out.print( pval ); + //System.out.print(";"); + DrawLine(610,val,609,pval); + + pval = val; + + //' set plot color + //'DEBUG "!s250,250,250;" 'slow ascii way to set color + //DEBUG "!sb",3,250,250,250,";" 'fast binary way to set color + //System.out.print("!s250,250,250;"); + SetColor(250,250,250); + + //' plot xy + //'DEBUG "!p", DEC 610,",", DEC valb, ";" + //' line xy + //DEBUG "!l", DEC 610,",", DEC valb,",", DEC 609,",", DEC pvalb ,";" + + //System.out.print("!l610,"); + //System.out.print( valb ); + //System.out.print(",609,"); + //System.out.print( pvalb ); + //System.out.print(";"); + DrawLine(610,valb,609,pvalb); + + pvalb = valb; + + // ' scrol 1 pixel to the left + //DEBUG "!G20,1;" + //System.out.print("!G20,1;"); + serial.printf("!G20,1;"); + } // end recorder mode + + if (mode == 1){ // xy scope mode + if (adc){ // ltc1298 mode + val = readadc(2,1,0, 0, ChanAMode ); + valb = readadc(2,1,0, 1, ChanBMode ); + }else{ + val = measure(0, ChanAMode ); + valb = measure(1, ChanBMode ); + } + + //' set plot color + //'DEBUG "!s200,200,200;" 'slow ascii way to set color + //DEBUG "!sb",3,200,200,200,";" //fast binary way to set color + //System.out.print("!s,200,200,200;"); + SetColor(200,200,200); + + //' plot xy + //DEBUG "!p", DEC val,",", DEC valb, ";" + //System.out.print("!p"); + //System.out.print( val ); + //System.out.print(","); + //System.out.print( valb ); + //System.out.print(";"); + Plot(val,valb); + + //' line xy + //DEBUG "!l", DEC val,",", DEC valb,",", DEC pval,",",DEC pvalb, ";" + + //System.out.print("!l"); + //System.out.print( val ); + //System.out.print(","); + //System.out.print( valb ); + //System.out.print(","); + //System.out.print( pval ); + //System.out.print(","); + //System.out.print( pvalb ); + //System.out.print(";"); + DrawLine(val, valb, pval, pvalb); + + pval = val; + pvalb = valb; + + cnt = cnt + 1; + if (cnt == 50){ + //' clear graph + //'DEBUG "!s100,100,200;!c;" 'set blue color , clear screen 17c + //DEBUG "!sb",3, 100,100,200, ";!c;" 'fast binary way to set color 11c + //System.out.print("!s,100,100,200;!c;"); + SetColor(100,100,200); + ClearScreen(); + + cnt = 0; + } + + + } // end xy mode scope + + } // end while true + } // end main + + + + +