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@4:fc56fa8aa794, 2012-09-29 (annotated)
- Committer:
- liangzhen
- Date:
- Sat Sep 29 19:22:38 2012 +0000
- Revision:
- 4:fc56fa8aa794
- Parent:
- 3:764ccaf29ce9
- Child:
- 7:b98d752b7b95
With power sensing and leakage sensing codes
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 | 4:fc56fa8aa794 | 98 | data_read = new char [64*5+12]; |
| liangzhen | 4:fc56fa8aa794 | 99 | for(int i=0; i<64*5+12; 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 | 4:fc56fa8aa794 | 104 | master.read(SLAVEADDR|1, data_read, 64*5+12, 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 | 4:fc56fa8aa794 | 119 | ro_reading[64] = data_read[64*5]+data_read[64*5+1]*0x100; |
| liangzhen | 4:fc56fa8aa794 | 120 | ro_reading[65] = data_read[64*5+2]+data_read[64*5+3]*0x100; |
| liangzhen | 4:fc56fa8aa794 | 121 | ro_reading[66] = data_read[64*5+4]+data_read[64*5+5]*0x100; //RVTP |
| liangzhen | 4:fc56fa8aa794 | 122 | ro_reading[67] = data_read[64*5+6]+data_read[64*5+7]*0x100; //HVTP |
| liangzhen | 4:fc56fa8aa794 | 123 | ro_reading[68] = data_read[64*5+8]+data_read[64*5+9]*0x100; //RVTN |
| liangzhen | 4:fc56fa8aa794 | 124 | ro_reading[69] = data_read[64*5+10]+data_read[64*5+11]*0x100; //HVTN |
| liangzhen | 1:acf14b6dd1be | 125 | } |