Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
master_i2c.cpp@3:764ccaf29ce9, 2012-09-20 (annotated)
- Committer:
- liangzhen
- Date:
- Thu Sep 20 23:45:05 2012 +0000
- Revision:
- 3:764ccaf29ce9
- Parent:
- 1:acf14b6dd1be
- Child:
- 4:fc56fa8aa794
changes for speed binnning
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| liangzhen | 1:acf14b6dd1be | 1 | //master | 
| liangzhen | 1:acf14b6dd1be | 2 | #include "mbed.h" | 
| liangzhen | 1:acf14b6dd1be | 3 | #include <stdlib.h> | 
| liangzhen | 1:acf14b6dd1be | 4 | |
| liangzhen | 1:acf14b6dd1be | 5 | I2C master(p28, p27); // sda, scl | 
| liangzhen | 1:acf14b6dd1be | 6 | Serial pc_master(USBTX, USBRX); // tx, rx | 
| liangzhen | 1:acf14b6dd1be | 7 | DigitalOut success(LED1); | 
| liangzhen | 1:acf14b6dd1be | 8 | DigitalOut fail(LED2); | 
| liangzhen | 1:acf14b6dd1be | 9 | DigitalIn read(p29); | 
| liangzhen | 1:acf14b6dd1be | 10 | |
| liangzhen | 1:acf14b6dd1be | 11 | const int SLAVEADDR = 0x88; // define the I2C Slave Address (mbed 2) | 
| liangzhen | 1:acf14b6dd1be | 12 | char cmd[2]; | 
| liangzhen | 1:acf14b6dd1be | 13 | char buf[50]; | 
| liangzhen | 1:acf14b6dd1be | 14 | |
| liangzhen | 3:764ccaf29ce9 | 15 | void i2c_write(char * data) | 
| liangzhen | 3:764ccaf29ce9 | 16 | { | 
| liangzhen | 1:acf14b6dd1be | 17 | int ack = master.write(SLAVEADDR, cmd, 2); // Send command string | 
| liangzhen | 1:acf14b6dd1be | 18 | if (ack) | 
| liangzhen | 1:acf14b6dd1be | 19 | fail=!fail; | 
| liangzhen | 1:acf14b6dd1be | 20 | else { | 
| liangzhen | 1:acf14b6dd1be | 21 | pc_master.printf("Master is writing..\n"); | 
| liangzhen | 1:acf14b6dd1be | 22 | success=!success; | 
| liangzhen | 1:acf14b6dd1be | 23 | } | 
| liangzhen | 1:acf14b6dd1be | 24 | } | 
| liangzhen | 1:acf14b6dd1be | 25 | |
| liangzhen | 3:764ccaf29ce9 | 26 | void i2c_read(char * buf) | 
| liangzhen | 3:764ccaf29ce9 | 27 | { | 
| liangzhen | 1:acf14b6dd1be | 28 | /* | 
| liangzhen | 1:acf14b6dd1be | 29 | int ack = master.read(SLAVEADDR, buf, 6); | 
| liangzhen | 1:acf14b6dd1be | 30 | if (ack) | 
| liangzhen | 1:acf14b6dd1be | 31 | fail=!fail; | 
| liangzhen | 1:acf14b6dd1be | 32 | else { | 
| liangzhen | 1:acf14b6dd1be | 33 | pc_master.printf("Slave sent: %s\n", buf); | 
| liangzhen | 1:acf14b6dd1be | 34 | success=!success; | 
| liangzhen | 1:acf14b6dd1be | 35 | } | 
| liangzhen | 1:acf14b6dd1be | 36 | */ | 
| liangzhen | 1:acf14b6dd1be | 37 | int ack, data, scan_counter; | 
| liangzhen | 1:acf14b6dd1be | 38 | scan_counter = 0; | 
| liangzhen | 3:764ccaf29ce9 | 39 | while(1) { | 
| liangzhen | 1:acf14b6dd1be | 40 | data=master.read(ack); | 
| liangzhen | 3:764ccaf29ce9 | 41 | if(data==0xFF) { | 
| liangzhen | 1:acf14b6dd1be | 42 | pc_master.printf("Scan finish..\n"); | 
| liangzhen | 1:acf14b6dd1be | 43 | break; | 
| liangzhen | 3:764ccaf29ce9 | 44 | } else { | 
| liangzhen | 1:acf14b6dd1be | 45 | pc_master.printf("data %d reads %d\n",scan_counter++, data); | 
| liangzhen | 1:acf14b6dd1be | 46 | } | 
| liangzhen | 1:acf14b6dd1be | 47 | } | 
| liangzhen | 1:acf14b6dd1be | 48 | } | 
| liangzhen | 1:acf14b6dd1be | 49 | |
| liangzhen | 3:764ccaf29ce9 | 50 | void i2c_test() | 
| liangzhen | 3:764ccaf29ce9 | 51 | { | 
| liangzhen | 1:acf14b6dd1be | 52 | master.start(); | 
| liangzhen | 1:acf14b6dd1be | 53 | cmd[0] = 'U'; | 
| liangzhen | 1:acf14b6dd1be | 54 | cmd[1] = 'S'; | 
| liangzhen | 1:acf14b6dd1be | 55 | while (1) { | 
| liangzhen | 1:acf14b6dd1be | 56 | if (read) { | 
| liangzhen | 1:acf14b6dd1be | 57 | i2c_read(buf); | 
| liangzhen | 1:acf14b6dd1be | 58 | } else { | 
| liangzhen | 1:acf14b6dd1be | 59 | i2c_write(cmd); | 
| liangzhen | 1:acf14b6dd1be | 60 | } | 
| liangzhen | 1:acf14b6dd1be | 61 | wait(0.07); | 
| liangzhen | 1:acf14b6dd1be | 62 | } | 
| liangzhen | 1:acf14b6dd1be | 63 | } | 
| liangzhen | 1:acf14b6dd1be | 64 | |
| liangzhen | 3:764ccaf29ce9 | 65 | void i2c_test2() | 
| liangzhen | 3:764ccaf29ce9 | 66 | { | 
| liangzhen | 1:acf14b6dd1be | 67 | //send signal to mbed2 and wait for response | 
| liangzhen | 1:acf14b6dd1be | 68 | master.start(); | 
| liangzhen | 1:acf14b6dd1be | 69 | cmd[0] = 'C'; | 
| liangzhen | 1:acf14b6dd1be | 70 | while (master.write(SLAVEADDR, cmd, 2)) { | 
| liangzhen | 1:acf14b6dd1be | 71 | fail=!fail; | 
| liangzhen | 1:acf14b6dd1be | 72 | } | 
| liangzhen | 1:acf14b6dd1be | 73 | int ack = 1; | 
| liangzhen | 1:acf14b6dd1be | 74 | while (1) { | 
| liangzhen | 1:acf14b6dd1be | 75 | if (read) { | 
| liangzhen | 1:acf14b6dd1be | 76 | while (ack) { | 
| liangzhen | 1:acf14b6dd1be | 77 | ack = master.read(SLAVEADDR, buf, 2); | 
| liangzhen | 1:acf14b6dd1be | 78 | } | 
| liangzhen | 1:acf14b6dd1be | 79 | success = 1; | 
| liangzhen | 1:acf14b6dd1be | 80 | //pc_master.printf("Slave sent: $s\n", buf); | 
| liangzhen | 1:acf14b6dd1be | 81 | break; | 
| liangzhen | 1:acf14b6dd1be | 82 | } | 
| liangzhen | 1:acf14b6dd1be | 83 | } | 
| liangzhen | 1:acf14b6dd1be | 84 | } | 
| liangzhen | 1:acf14b6dd1be | 85 | |
| liangzhen | 3:764ccaf29ce9 | 86 | void master_write() | 
| liangzhen | 3:764ccaf29ce9 | 87 | { | 
| liangzhen | 1:acf14b6dd1be | 88 | char cmd[] = "scan"; | 
| liangzhen | 1:acf14b6dd1be | 89 | while (master.write(SLAVEADDR, cmd, 4)) { | 
| liangzhen | 1:acf14b6dd1be | 90 | fail=1; | 
| liangzhen | 1:acf14b6dd1be | 91 | } | 
| liangzhen | 1:acf14b6dd1be | 92 | fail = 0; | 
| liangzhen | 1:acf14b6dd1be | 93 | } | 
| liangzhen | 1:acf14b6dd1be | 94 | |
| liangzhen | 3:764ccaf29ce9 | 95 | void master_read(int* ro_reading) | 
| liangzhen | 3:764ccaf29ce9 | 96 | { | 
| liangzhen | 3:764ccaf29ce9 | 97 | char* data_read; | 
| liangzhen | 3:764ccaf29ce9 | 98 | data_read = new char [64*5+2]; | 
| liangzhen | 3:764ccaf29ce9 | 99 | for(int i=0; i<64*5+2; i++) { | 
| liangzhen | 3:764ccaf29ce9 | 100 | data_read[i]=(char)47; | 
| liangzhen | 3:764ccaf29ce9 | 101 | } | 
| liangzhen | 3:764ccaf29ce9 | 102 | while(data_read[0]==47) { | 
| liangzhen | 3:764ccaf29ce9 | 103 | wait(18); | 
| liangzhen | 3:764ccaf29ce9 | 104 | master.read(SLAVEADDR|1, data_read, 64*5, true); | 
| liangzhen | 1:acf14b6dd1be | 105 | } | 
| liangzhen | 3:764ccaf29ce9 | 106 | for(int i=0; i<64; i++) { | 
| liangzhen | 3:764ccaf29ce9 | 107 | int out = 0; | 
| liangzhen | 3:764ccaf29ce9 | 108 | out += data_read[i*5+4]-48; | 
| liangzhen | 3:764ccaf29ce9 | 109 | out *= 10; | 
| liangzhen | 3:764ccaf29ce9 | 110 | out += data_read[i*5+3]-48; | 
| liangzhen | 3:764ccaf29ce9 | 111 | out *= 10; | 
| liangzhen | 3:764ccaf29ce9 | 112 | out += data_read[i*5+2]-48; | 
| liangzhen | 3:764ccaf29ce9 | 113 | out *= 10; | 
| liangzhen | 3:764ccaf29ce9 | 114 | out += data_read[i*5+1]-48; | 
| liangzhen | 3:764ccaf29ce9 | 115 | out *= 10; | 
| liangzhen | 3:764ccaf29ce9 | 116 | out += data_read[i*5+0]-48; | 
| liangzhen | 3:764ccaf29ce9 | 117 | ro_reading[i] = out; | 
| liangzhen | 1:acf14b6dd1be | 118 | } | 
| liangzhen | 1:acf14b6dd1be | 119 | } |