Read analog value from MCP3201 and send it to serial channel. A vector with 255 pos.
Dependencies: mbed
main.cpp@0:4d02779757de, 2016-05-06 (annotated)
- Committer:
- skelter
- Date:
- Fri May 06 18:52:40 2016 +0000
- Revision:
- 0:4d02779757de
Commit start
Who changed what in which revision?
User | Revision | Line number | New 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 |