Read analog value from MCP3201 and send it to serial channel. A vector with 255 pos.

Dependencies:   mbed

Committer:
skelter
Date:
Fri May 06 18:52:40 2016 +0000
Revision:
0:4d02779757de
Commit start

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skelter 0:4d02779757de 1 /*
skelter 0:4d02779757de 2 Read analog channel from MCP3201 with SPI interface and send it to the serial interface.
skelter 0:4d02779757de 3 Matlab can be used to evaluate the sampled wave.
skelter 0:4d02779757de 4 */
skelter 0:4d02779757de 5
skelter 0:4d02779757de 6
skelter 0:4d02779757de 7 #include "mbed.h"
skelter 0:4d02779757de 8
skelter 0:4d02779757de 9 #define VOLTAGE_SAMPLES 255
skelter 0:4d02779757de 10
skelter 0:4d02779757de 11 // for samples serial dumping
skelter 0:4d02779757de 12 int samples[255];
skelter 0:4d02779757de 13
skelter 0:4d02779757de 14 #include "mcp3201.h"
skelter 0:4d02779757de 15 #include "VoltageRead.h"
skelter 0:4d02779757de 16
skelter 0:4d02779757de 17 Serial pc(USBTX, USBRX); // tx, rx
skelter 0:4d02779757de 18
skelter 0:4d02779757de 19 int main()
skelter 0:4d02779757de 20 {
skelter 0:4d02779757de 21 pc.baud(115200);
skelter 0:4d02779757de 22 pc.printf("Ola Sr. Matlab!");
skelter 0:4d02779757de 23
skelter 0:4d02779757de 24 while(1)
skelter 0:4d02779757de 25 {
skelter 0:4d02779757de 26 float rms_value=get_voltage_rms();
skelter 0:4d02779757de 27 for(int i=0;i<VOLTAGE_SAMPLES;i++) pc.printf("%i\r\n", samples[i]);
skelter 0:4d02779757de 28 //end of com
skelter 0:4d02779757de 29 pc.printf(" ");
skelter 0:4d02779757de 30
skelter 0:4d02779757de 31 //run Matlab script again to get new sample
skelter 0:4d02779757de 32 char c = pc.getc();
skelter 0:4d02779757de 33 }
skelter 0:4d02779757de 34 }
skelter 0:4d02779757de 35
skelter 0:4d02779757de 36 /*
skelter 0:4d02779757de 37 s=serial('COM6','BAUD',115200,'Terminator',' ','InputBufferSize', 8096,'OutputBufferSize',1024);
skelter 0:4d02779757de 38 fopen(s);
skelter 0:4d02779757de 39 fprintf(s,'c','async');
skelter 0:4d02779757de 40 x=fscanf(s);
skelter 0:4d02779757de 41 y=str2num(x);
skelter 0:4d02779757de 42
skelter 0:4d02779757de 43 ADC_OFFSET=floor(1.7*(4096/3.3));
skelter 0:4d02779757de 44 ADC_SCALE=(2110*sqrt(2))/4096; %Valor de Tensao no pino 3.3/4096
skelter 0:4d02779757de 45 VOLTAGE_SAMPLES=256;
skelter 0:4d02779757de 46
skelter 0:4d02779757de 47 t=linspace(0,inv(60)*VOLTAGE_SAMPLES/256,VOLTAGE_SAMPLES-1);
skelter 0:4d02779757de 48
skelter 0:4d02779757de 49 figure(1);
skelter 0:4d02779757de 50 subplot(2,1,1)
skelter 0:4d02779757de 51 %stem(y.*(3.3/4096),'x.'); grid;
skelter 0:4d02779757de 52 stem(y+ADC_OFFSET,'.'); grid;
skelter 0:4d02779757de 53 title('Sampled Wave from MCP3201');
skelter 0:4d02779757de 54 xlabel('Sample Number [0...255]');
skelter 0:4d02779757de 55 ylabel('Sampled Value [0...4095)');
skelter 0:4d02779757de 56
skelter 0:4d02779757de 57 subplot(2,1,2)
skelter 0:4d02779757de 58 stem(y,'.','b'); grid;
skelter 0:4d02779757de 59 title('Offset Adjustment to RMS calculation');
skelter 0:4d02779757de 60 xlabel('Sample Number [0...255]');
skelter 0:4d02779757de 61 ylabel('Sampled Value [-2048...2047)');
skelter 0:4d02779757de 62
skelter 0:4d02779757de 63 figure(2);
skelter 0:4d02779757de 64 stairs(t,y.*(ADC_SCALE)); grid;
skelter 0:4d02779757de 65 title('Reconstructed wave');
skelter 0:4d02779757de 66 xlabel('time [s]');
skelter 0:4d02779757de 67 ylabel('Voltage [Volts)');
skelter 0:4d02779757de 68 %hold on
skelter 0:4d02779757de 69 %plot(y.*(ADC_SCALE),'--');
skelter 0:4d02779757de 70 %hold off
skelter 0:4d02779757de 71
skelter 0:4d02779757de 72 rms=sqrt(mean((y.^2)))*ADC_SCALE;
skelter 0:4d02779757de 73 disp(' Valor RMS')
skelter 0:4d02779757de 74 disp(rms)
skelter 0:4d02779757de 75
skelter 0:4d02779757de 76 fclose(s);
skelter 0:4d02779757de 77 clear s;
skelter 0:4d02779757de 78 % sometimes the channel remains open, use this
skelter 0:4d02779757de 79 % fclose(instrfind)
skelter 0:4d02779757de 80 */
skelter 0:4d02779757de 81
skelter 0:4d02779757de 82
skelter 0:4d02779757de 83
skelter 0:4d02779757de 84