10kHz ADC which reads from 17,18,19,20 pins and send the result to remote server (multicast now) via UDP

Dependencies:   EthernetNetIf mbed

Committer:
mrcandy
Date:
Tue Mar 13 14:57:54 2012 +0000
Revision:
0:7744cef9f8af
Child:
1:beae6624e569

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mrcandy 0:7744cef9f8af 1
mrcandy 0:7744cef9f8af 2 #define SAMPLE_RATE 1500000
mrcandy 0:7744cef9f8af 3 #include "mbed.h"
mrcandy 0:7744cef9f8af 4 #include "adc.h"
mrcandy 0:7744cef9f8af 5 #include "EthernetNetIf.h"
mrcandy 0:7744cef9f8af 6 #include "UDPSocket.h"
mrcandy 0:7744cef9f8af 7
mrcandy 0:7744cef9f8af 8 EthernetNetIf eth;
mrcandy 0:7744cef9f8af 9 UDPSocket udp;
mrcandy 0:7744cef9f8af 10
mrcandy 0:7744cef9f8af 11 DigitalOut int_led(LED1);
mrcandy 0:7744cef9f8af 12 Serial pc(USBTX,USBRX);
mrcandy 0:7744cef9f8af 13 Host multicast(IpAddr(239, 192, 1, 100), 50000, NULL);
mrcandy 0:7744cef9f8af 14 ADC adc(SAMPLE_RATE, 1);
mrcandy 0:7744cef9f8af 15 Ticker flipper;
mrcandy 0:7744cef9f8af 16 unsigned short samples1,samples2,samples3,samples4;
mrcandy 0:7744cef9f8af 17 int k=0;
mrcandy 0:7744cef9f8af 18 Timer tmr;
mrcandy 0:7744cef9f8af 19 char str[50];
mrcandy 0:7744cef9f8af 20
mrcandy 0:7744cef9f8af 21
mrcandy 0:7744cef9f8af 22 void onUDPSocketEvent(UDPSocketEvent e) { //îáðàáîòêà ïðèõîäÿùåãî ïàêåòà UDP
mrcandy 0:7744cef9f8af 23 switch (e) {
mrcandy 0:7744cef9f8af 24 case UDPSOCKET_READABLE: //The only event for now
mrcandy 0:7744cef9f8af 25 char buf[64] = {0};
mrcandy 0:7744cef9f8af 26 Host host;
mrcandy 0:7744cef9f8af 27 while ( int len = udp.recvfrom( buf, 63, &host ) ) {
mrcandy 0:7744cef9f8af 28 if ( len <= 0 )
mrcandy 0:7744cef9f8af 29 break;
mrcandy 0:7744cef9f8af 30 printf("From %d.%d.%d.%d: %s\n", host.getIp()[0], host.getIp()[1], host.getIp()[2], host.getIp()[3], buf);
mrcandy 0:7744cef9f8af 31 }
mrcandy 0:7744cef9f8af 32 break;
mrcandy 0:7744cef9f8af 33 }
mrcandy 0:7744cef9f8af 34 }
mrcandy 0:7744cef9f8af 35
mrcandy 0:7744cef9f8af 36 void flip() { // èçìåðåíèå ïî ïðåðûâàíèþ è îòïðàâêà â UDP
mrcandy 0:7744cef9f8af 37 int_led = !int_led;
mrcandy 0:7744cef9f8af 38 /* samples1=adc.read(p20);
mrcandy 0:7744cef9f8af 39 samples2=adc.read(p19);
mrcandy 0:7744cef9f8af 40 samples3=adc.read(p18);
mrcandy 0:7744cef9f8af 41 samples4=adc.read(p17);*/
mrcandy 0:7744cef9f8af 42 k++; //ñ÷åò÷èê êîëè÷åñòâà öèêëîâ
mrcandy 0:7744cef9f8af 43 sprintf(str, "1=%04u 2=%04u 3=%04u 4=%04u",adc.read(p17),adc.read(p18),adc.read(p19),adc.read(p20));
mrcandy 0:7744cef9f8af 44 udp.sendto( str, strlen(str), &multicast );
mrcandy 0:7744cef9f8af 45 }
mrcandy 0:7744cef9f8af 46
mrcandy 0:7744cef9f8af 47
mrcandy 0:7744cef9f8af 48 int main() {
mrcandy 0:7744cef9f8af 49 pc.baud(57600);
mrcandy 0:7744cef9f8af 50 //óñòàíîâêà Ethernet
mrcandy 0:7744cef9f8af 51 printf("Setting up...\n");
mrcandy 0:7744cef9f8af 52 EthernetErr ethErr = eth.setup();
mrcandy 0:7744cef9f8af 53 if (ethErr) {
mrcandy 0:7744cef9f8af 54 printf("Error %d in setup.\n", ethErr);
mrcandy 0:7744cef9f8af 55 return -1;
mrcandy 0:7744cef9f8af 56 }
mrcandy 0:7744cef9f8af 57 printf("Setup OK\n");
mrcandy 0:7744cef9f8af 58 // Host multicast(IpAddr(239, 192, 1, 100), 50000, NULL); //Join multicast group on port 50000
mrcandy 0:7744cef9f8af 59 udp.setOnEvent(&onUDPSocketEvent);
mrcandy 0:7744cef9f8af 60 udp.bind(multicast);
mrcandy 0:7744cef9f8af 61
mrcandy 0:7744cef9f8af 62 Net::poll();
mrcandy 0:7744cef9f8af 63
mrcandy 0:7744cef9f8af 64 tmr.start();
mrcandy 0:7744cef9f8af 65
mrcandy 0:7744cef9f8af 66 //âêëþ÷àåì ADC íà ïèíàõ 17,18,19,20
mrcandy 0:7744cef9f8af 67 adc.startmode(0,0);
mrcandy 0:7744cef9f8af 68 adc.burst(1);
mrcandy 0:7744cef9f8af 69 adc.setup(p20,1);
mrcandy 0:7744cef9f8af 70 adc.setup(p19,1);
mrcandy 0:7744cef9f8af 71 adc.setup(p18,1);
mrcandy 0:7744cef9f8af 72 adc.setup(p17,1);
mrcandy 0:7744cef9f8af 73
mrcandy 0:7744cef9f8af 74 printf("start\n");
mrcandy 0:7744cef9f8af 75
mrcandy 0:7744cef9f8af 76 flipper.attach_us(&flip, 100); // âêëþ÷àåì ïðåðûâàíèå
mrcandy 0:7744cef9f8af 77 wait(10); // ìåðÿåì 10 ñåêóíä
mrcandy 0:7744cef9f8af 78 flipper.detach();
mrcandy 0:7744cef9f8af 79
mrcandy 0:7744cef9f8af 80 adc.burst(0); //âûêëþ÷àåì ADC
mrcandy 0:7744cef9f8af 81 adc.setup(p20,0);
mrcandy 0:7744cef9f8af 82 adc.setup(p19,0);
mrcandy 0:7744cef9f8af 83 adc.setup(p18,0);
mrcandy 0:7744cef9f8af 84 adc.setup(p17,0);
mrcandy 0:7744cef9f8af 85
mrcandy 0:7744cef9f8af 86
mrcandy 0:7744cef9f8af 87 printf("number of cycles= %d\n",k);
mrcandy 0:7744cef9f8af 88 printf("End: %f\n",tmr.read());
mrcandy 0:7744cef9f8af 89
mrcandy 0:7744cef9f8af 90 }