Skip to content

Commit 28612db

Browse files
committed
merge dynamic-buffer - processing v1.3 - .ino v1.5
2 parents f740af5 + 3140b3a commit 28612db

File tree

4 files changed

+471
-122
lines changed

4 files changed

+471
-122
lines changed

arduino/oscilloscope_arduino/oscilloscope_arduino.ino

Lines changed: 176 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
// 28/05/2017 => bug v1.5 => qdo aumenta 1 canal dá erro na serial (disabling serial)
2+
// 22/05/2017 => versão 1.5 => dynamic buffer - 1ch=400pt/ch, 2chs=200pt/ch, 3chs=130pt/ch, 4chs=100pt/ch
13
// 21/01/2017 => versão 1.4 => melhorar o trigger: informar valor e sentido (subindo/descendo)
24
// 13/03/2016 => versão 1.3 => alterar o clock do ADC para ler maiores frequencias
35
// 14/09/2015 => implementei TimerOne.h pin9(pwm) e pino10(2*periodo) output
46
// 03/08/2016 => versão 1.2 => ler resistor em A5
57
// 26/07/2015 => versão 1.1 => ler em microsegundos
68
//String versao="1.2"; // versão do programa -
7-
#define versao "1.4"
9+
#define versao "v1.5"
810

911
/* trabalhando com TimerOne
1012
Timer1.initializa(us); // inicializa o timer1 (chamar primeiro)
@@ -40,16 +42,34 @@ boolean pwmOn=true;
4042
unsigned long pwmP=100000; //Periodo 100000u=100m=0.1s => 10Hz
4143
byte pwmPon=25; // % do pwmP em HIGH
4244

43-
byte q=100; // quantidade de leituras
45+
/* -- 07/May/2017 --
4446
int v0[100];
4547
int v1[100];
4648
int v2[100]; // guarda os valores das leituras
4749
int v3[100]; // acrescentei mais um canal em 15/10/2015
48-
int vtrigger=0; // tenssao de trigger
49-
//byte v0[100];
50-
//byte v1[100];
51-
//byte v2[100]; // guarda os valores das leituras
52-
//byte v3[100]; // acrescentei mais um canal em 15/10/2015
50+
*/
51+
/* ------------------------------------------------
52+
/* I changed the 4 buffers (v0[100],v1[],v2[],v3[]) above
53+
* by 1 buffer bellow (vb[408])
54+
* The chq indicates how many channels will use and the buffer
55+
* will be divided by then:
56+
* 4 ch (q=102) => 0-101, 102-203, 204-305, 306-407
57+
* 3 ch (q=136) => 0-135, 136-271, 272-407
58+
* 2 ch (q=204) => 0-203, 204-407
59+
* 1 ch (q=408) => 0-407
60+
* chi[n] indicates the initial position of the buffer
61+
* q indicates the size of channel buffer
62+
------------------------------------------------
63+
*/
64+
int vb[400]; // (100*4=400) buffer stores the measure values of all channels
65+
// (old) int chi[]={0,102,204,306}; // channel init position on buffer vb[]
66+
int chi[]={0,100,200,300}; // channel init position on buffer vb[]
67+
int chq=4; // how many channels are ON
68+
int q=100; // quantidade de leituras
69+
int qmax=100; // qtd maxima permitida para q
70+
// (new) chq-qmax; 4-100; 3-130; 2-200; 1-400
71+
// (old) chq-qmax; 4-102; 3-136; 2-204; 1-408
72+
int vtrigger=0; // tensao de trigger
5373
boolean Ch[]={true,true,true,true}; // ativa/desativa canais
5474
unsigned int dt=4; // 100us a 1000us(1ms) a 3000ms(3s)
5575
char unidade='m'; // unidade: m=milisegundo, u=microsegundo
@@ -59,7 +79,7 @@ char unidade='m'; // unidade: m=milisegundo, u=microsegundo
5979
// 1 canal deve dar 120us
6080

6181
boolean varias=false; // v = varias
62-
boolean uma=true; // u = uma
82+
boolean uma=false; // u = uma
6383
boolean fluxo=false; // f = fluxo de dados (envia cada leitura sem guardar na memoria)
6484
// velocidade limitada pela serial 115200
6585
unsigned long dtReal, tIni, tFim; // contador de final de tempo para o fluxo
@@ -103,6 +123,10 @@ void setup() {
103123
//Timer1.stop();
104124

105125
//inicializar A0, A1, A2, A3 com pull_up
126+
// não ficou bom pois qdo não tem nada conectado na porta, ela fica
127+
// com 5v. O melhor é colocar um pull_down com resistor
128+
// A0___|R=20k|___GND
129+
// |__ Vinput
106130
/*
107131
* pinMode(A0,INPUT_PULLUP);
108132
* pinMode(A1,INPUT_PULLUP);
@@ -113,8 +137,10 @@ void setup() {
113137
//Serial.begin(9600);
114138
Serial.begin(115200);
115139
//Serial.begin(250000);
116-
printHelp();
117-
printConfig();
140+
Serial.println();
141+
Serial.print(">init="); Serial.println(versao);
142+
//printHelp();
143+
//printConfig();
118144

119145
//ler Resistor e Capacitor
120146
//pinMode(pinCarga,OUTPUT);
@@ -180,12 +206,13 @@ void lerSerial(){
180206
case 'q': // alterar valor do q.(ponto no final) (quantidade de leituras)
181207
k=Serial.parseInt(); // inteiro de 0 a 32767
182208
c=Serial.read(); // para ir mais rápido colocar um . no final ex: q150.
183-
if (k>=1 && k<=100) {
209+
if (k>=1 && k<=qmax) {
184210
q=k;
185211
}
186-
// Serial.print("=> q="); Serial.println(q);
212+
//calcBuffer(); //não precisa pois será usado o qmax
213+
Serial.print("=> q="); Serial.println(q);
187214
break;
188-
case 'c': //(1)ativa/(0)desativa canal n exemplo: c01, c10
215+
case 'c': //cnm : n=0-3, m=(o)ativa/(x)desativa canal n exemplo: c0x, c2o
189216
delay(100);
190217
c=Serial.read();
191218
delay(100);
@@ -196,6 +223,11 @@ void lerSerial(){
196223
}else if (c2=='x'){
197224
Ch[c-'0']=false;
198225
}
226+
// recalcular o buffer para cada canal e colocar o indice
227+
// inicial para cada canal
228+
//Serial.println("entrar calcBuffer");
229+
calcBuffer();
230+
//Serial.println("saiu calcBuffer");
199231
/* Serial.print("=> Canais: ");
200232
for (k=0; k<3;k++){
201233
Serial.print("Ch"); Serial.print(k); Serial.print("="); Serial.print(Ch[k]);
@@ -223,7 +255,7 @@ void lerSerial(){
223255
// Serial.print("=> canalTrigger="); Serial.println(canalTrigger);
224256
break;
225257
case '?':
226-
printConfig();
258+
printConfig();
227259
break;
228260
case '1': // enviar Uma Amostra (q leituras)
229261
if (!uma) uma=true;
@@ -330,9 +362,61 @@ void lerSerial(){
330362
}
331363
}
332364

365+
void calcBuffer(){
366+
//Serial.println("entrou calcBuffer");
367+
chq=0;
368+
// conta a quantidade de canais ativos
369+
for (int k=0;k<4;k++){
370+
if (Ch[k]) {chq+=1;}
371+
}
372+
// calc size of each channel
373+
switch (chq){
374+
case 0:
375+
qmax=0;
376+
break;
377+
case 1:
378+
qmax=400;
379+
break;
380+
case 2:
381+
qmax=200;
382+
break;
383+
case 3:
384+
qmax=130;
385+
break;
386+
case 4:
387+
qmax=100;
388+
break;
389+
}
390+
/*
391+
if (chq<=0) {
392+
qmax=0;
393+
} else {
394+
qmax=408/chq; // chq-qmax; 4-102; 3-136; 2-204; 1-408
395+
}
396+
*/
397+
if (q>qmax) {
398+
q=qmax;
399+
}
400+
//Serial.print("q=408/chq=");Serial.print("408/");Serial.print(chq);Serial.print("=");Serial.println(q);
401+
// qtdCanais-qmax (chq-qmax) (4-100) (3-130) (2-200) (1-400)
402+
int chInit=0;
403+
for (int k=0; k<4; k++){
404+
if (Ch[k]) {
405+
chi[k]=chInit;
406+
chInit+=qmax;
407+
}
408+
}
409+
410+
// Serial.print("chq="); Serial.print(chq); Serial.print(" q="); Serial.print(q); Serial.print(" qmax="); Serial.println(qmax);
411+
// for (int k=0; k<4; k++){
412+
// Serial.print("k=");Serial.print(k); Serial.print(" chi[k]="); Serial.println(chi[k]);
413+
// }
414+
415+
}
416+
333417
void printHelp(){
334418
Serial.println("-----------------------");
335-
Serial.print("! GaraginOscopio v"); Serial.print(versao); Serial.println(" - RB !");
419+
Serial.print("! BegOscopio "); Serial.print(versao); Serial.println(" - rogerio.bego@hotmail.com !");
336420
Serial.println("-----------------------");
337421
/*
338422
Serial.println("----------- help ---------------------");
@@ -359,15 +443,23 @@ void printHelp(){
359443
*/
360444
}
361445

446+
447+
362448
void printConfig(){
363449
Serial.println("------ configuracoes -------");
364450
Serial.print(">? q="); Serial.println(q);
451+
Serial.print(">? qmax="); Serial.println(qmax);
365452
Serial.print(">? dt="); Serial.print(dt); Serial.print(unidade); Serial.println("s");
366453
float t=(float)q * (float)dt;
367454
Serial.print(" -> T=(q*dt)= "); Serial.print(t); Serial.print(unidade); Serial.println("s ");
368455
Serial.print(">? Canais: ");
369456
for (int k=0; k<4; k++){
370-
Serial.print(" Ch"); Serial.print(k); Serial.print("="); Serial.print(Ch[k]);
457+
Serial.print(" Ch"); Serial.print(k); Serial.print("=");
458+
if (Ch[k]) {
459+
Serial.print("o");
460+
} else {
461+
Serial.print("x");
462+
}
371463
}
372464
Serial.println();
373465
Serial.print(">? canalTrigger="); Serial.println(canalTrigger);
@@ -380,6 +472,7 @@ void printConfig(){
380472
Serial.print(">? pwmPon="); Serial.print(pwmPon); Serial.println("%");
381473
}
382474

475+
383476
unsigned long microsOuMillis(){
384477
if (unidade=='u'){
385478
return micros();
@@ -425,25 +518,56 @@ boolean trigger(){ // a variavel canalTrigger indica qual canal fará o trigger:
425518

426519

427520
void lerEnviar(){
521+
522+
/*
523+
// enviar quais canais serao enviados. ex: >ch=1<\t>3<\t>
524+
Serial.print(">chq="); Serial.print(chq); Serial.print("\t");
525+
for (int k=0; k<4; k++){
526+
if (Ch[k]){Serial.print(k); Serial.print("\t");}
527+
}
528+
Serial.println("");
529+
530+
//enviar os valores dos canais
531+
for (int k=0; k<q; k++){
532+
Serial.print(">v="); Serial.print(k); Serial.print("\t");
533+
if (Ch[0]) {Serial.print(chi[0]+k); Serial.print("\t");}
534+
if (Ch[1]) {Serial.print(chi[1]+k); Serial.print("\t");}
535+
if (Ch[2]) {Serial.print(chi[2]+k); Serial.print("\t");}
536+
if (Ch[3]) {Serial.print(chi[3]+k); Serial.print("\t");}
537+
Serial.println("");
538+
}
539+
540+
541+
return;
542+
543+
*/
544+
545+
428546
unsigned long tFim; // contador do tempo Final
429547
unsigned long tTotalReal; // tempo Total da leitura dos valores.
430548
if (canalTrigger>='0' && canalTrigger<='3'){
431549
//Serial.print("canalTrigger=");Serial.println(canalTrigger);
432550
Serial.print("trigger="); Serial.println(trigger());
433551
}
434552
tTotalReal=microsOuMillis();
553+
435554
for (int k=0; k<q; k++){
436555
tFim=microsOuMillis()+dt;
556+
/*
437557
if (Ch[0]) {v0[k]=analogRead(A0);}
438558
if (Ch[1]) {v1[k]=analogRead(A1);}
439559
if (Ch[2]) {v2[k]=analogRead(A2);}
440560
if (Ch[3]) {v3[k]=analogRead(A3);}
441-
// if (Ch[0]) {v0[k]=analogRead(A0)/4;}
442-
// if (Ch[1]) {v1[k]=analogRead(A1)/4;}
443-
// if (Ch[2]) {v2[k]=analogRead(A2)/4;}
444-
// if (Ch[3]) {v3[k]=analogRead(A3)/4;}
561+
*/
562+
563+
if (Ch[0]) {vb[chi[0]+k]=analogRead(A0);}
564+
if (Ch[1]) {vb[chi[1]+k]=analogRead(A1);}
565+
if (Ch[2]) {vb[chi[2]+k]=analogRead(A2);}
566+
if (Ch[3]) {vb[chi[3]+k]=analogRead(A3);}
445567
while (microsOuMillis()<tFim){}
446568
}
569+
570+
447571
tTotalReal=microsOuMillis()-tTotalReal; // total de tempo para ler todas as amostras
448572
dtReal=tTotalReal/q; // calcular o tempo médio de cada leitura
449573
Serial.println();
@@ -455,14 +579,41 @@ void lerEnviar(){
455579
}else if (unidade=='u'){
456580
Serial.println("e-6");
457581
}
582+
583+
// enviar quais canais serao enviados. ex: >ch=1<\t>3<\t>
584+
Serial.print(">chq="); Serial.print(chq); Serial.print("\t");
585+
for (int k=0; k<4; k++){
586+
if (Ch[k]){Serial.print(k); Serial.print("\t");}
587+
}
588+
Serial.println("");
589+
590+
//enviar os valores dos canais
591+
for (int k=0; k<q; k++){
592+
Serial.print(">v="); Serial.print(k); Serial.print("\t");
593+
if (Ch[0]) {Serial.print(vb[chi[0]+k]); Serial.print("\t");}
594+
if (Ch[1]) {Serial.print(vb[chi[1]+k]); Serial.print("\t");}
595+
if (Ch[2]) {Serial.print(vb[chi[2]+k]); Serial.print("\t");}
596+
if (Ch[3]) {Serial.print(vb[chi[3]+k]); Serial.print("\t");}
597+
Serial.println("");
598+
599+
/*
600+
if (Ch[0]) {Serial.print(chi[0]+k); Serial.print("\t");}
601+
if (Ch[1]) {Serial.print(chi[1]+k); Serial.print("\t");}
602+
if (Ch[2]) {Serial.print(chi[2]+k); Serial.print("\t");}
603+
if (Ch[3]) {Serial.print(chi[3]+k); Serial.print("\t");}
604+
Serial.println("");
605+
*/
606+
}
607+
/* -- eliminado em 07/May/2017 - criei buffer dinamico vb[408] --
458608
for (int k=0; k<q; k++){
459609
Serial.print(">v=");
460610
Serial.print(k); Serial.print("\t");
461611
Serial.print(v0[k]); Serial.print("\t");
462612
Serial.print(v1[k]); Serial.print("\t");
463613
Serial.print(v2[k]); Serial.print("\t");
464614
Serial.println(v3[k]);
465-
}
615+
}
616+
*/
466617
Serial.print(">tTotalReal="); Serial.print(tTotalReal); //Serial.print(unidade); Serial.println("s");
467618
if (unidade=='m'){
468619
Serial.println("e-3");
@@ -498,10 +649,10 @@ void lerFluxo(){
498649
Serial.print("e-6");
499650
}
500651
Serial.print("\t");
501-
Serial.print(v0); Serial.print("\t");
502-
Serial.print(v1); Serial.print("\t");
503-
Serial.print(v2); Serial.print("\t");
504-
Serial.println(v3);
652+
if (Ch[0]) {Serial.print(v0);} else {Serial.print("0");} Serial.print("\t");
653+
if (Ch[1]) {Serial.print(v1);} else {Serial.print("0");} Serial.print("\t");
654+
if (Ch[2]) {Serial.print(v2);} else {Serial.print("0");} Serial.print("\t");
655+
if (Ch[3]) {Serial.println(v3);} else {Serial.println("0");}
505656
}
506657
}
507658

0 commit comments

Comments
 (0)