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.
main.cpp@0:d488d550469e, 2014-05-11 (annotated)
- Committer:
- piyamate
- Date:
- Sun May 11 07:39:13 2014 +0000
- Revision:
- 0:d488d550469e
- Child:
- 1:1e577b8befeb
untested first version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
piyamate | 0:d488d550469e | 1 | #include "mbed.h" |
piyamate | 0:d488d550469e | 2 | |
piyamate | 0:d488d550469e | 3 | DigitalInOut PDIO(p30); |
piyamate | 0:d488d550469e | 4 | DigitalOut CSn(p21); |
piyamate | 0:d488d550469e | 5 | Serial pc(USBTX, USBRX); |
piyamate | 0:d488d550469e | 6 | |
piyamate | 0:d488d550469e | 7 | int read_temperature(I2C i2c, int addr, float *temperature) |
piyamate | 0:d488d550469e | 8 | { |
piyamate | 0:d488d550469e | 9 | char data[5]; |
piyamate | 0:d488d550469e | 10 | int status = i2c.read(addr, data, 5); |
piyamate | 0:d488d550469e | 11 | *temperature = data[4]*0.667-75; |
piyamate | 0:d488d550469e | 12 | return status; |
piyamate | 0:d488d550469e | 13 | } |
piyamate | 0:d488d550469e | 14 | |
piyamate | 0:d488d550469e | 15 | void OTP_setup() |
piyamate | 0:d488d550469e | 16 | { |
piyamate | 0:d488d550469e | 17 | DigitalOut CLK(p27); |
piyamate | 0:d488d550469e | 18 | PDIO.output(); |
piyamate | 0:d488d550469e | 19 | PDIO = 1; |
piyamate | 0:d488d550469e | 20 | CLK = 0; |
piyamate | 0:d488d550469e | 21 | CSn = 0; |
piyamate | 0:d488d550469e | 22 | wait_ms(1); |
piyamate | 0:d488d550469e | 23 | CSn = 1; |
piyamate | 0:d488d550469e | 24 | wait_us(30); |
piyamate | 0:d488d550469e | 25 | CSn = 0; |
piyamate | 0:d488d550469e | 26 | wait_us(30); |
piyamate | 0:d488d550469e | 27 | CLK = 1; |
piyamate | 0:d488d550469e | 28 | wait_us(30); |
piyamate | 0:d488d550469e | 29 | CLK = 0; |
piyamate | 0:d488d550469e | 30 | wait_us(30); |
piyamate | 0:d488d550469e | 31 | } |
piyamate | 0:d488d550469e | 32 | |
piyamate | 0:d488d550469e | 33 | void OTP_exit() |
piyamate | 0:d488d550469e | 34 | { |
piyamate | 0:d488d550469e | 35 | DigitalOut CLK(p27); |
piyamate | 0:d488d550469e | 36 | CLK = 0; |
piyamate | 0:d488d550469e | 37 | CSn = 0; |
piyamate | 0:d488d550469e | 38 | PDIO = 1; |
piyamate | 0:d488d550469e | 39 | wait_us(30); |
piyamate | 0:d488d550469e | 40 | CLK = 1; |
piyamate | 0:d488d550469e | 41 | wait_us(30); |
piyamate | 0:d488d550469e | 42 | CLK = 0; |
piyamate | 0:d488d550469e | 43 | wait_us(30); |
piyamate | 0:d488d550469e | 44 | CLK = 1; |
piyamate | 0:d488d550469e | 45 | wait_us(30); |
piyamate | 0:d488d550469e | 46 | CSn = 1; |
piyamate | 0:d488d550469e | 47 | wait_us(30); |
piyamate | 0:d488d550469e | 48 | |
piyamate | 0:d488d550469e | 49 | } |
piyamate | 0:d488d550469e | 50 | |
piyamate | 0:d488d550469e | 51 | void OTP_read(char *data, int length) |
piyamate | 0:d488d550469e | 52 | { |
piyamate | 0:d488d550469e | 53 | DigitalOut CLK(p27); |
piyamate | 0:d488d550469e | 54 | CLK = 1; |
piyamate | 0:d488d550469e | 55 | PDIO = 0; |
piyamate | 0:d488d550469e | 56 | wait_us(30); |
piyamate | 0:d488d550469e | 57 | CSn = 1; |
piyamate | 0:d488d550469e | 58 | wait_us(30); |
piyamate | 0:d488d550469e | 59 | CLK = 0; |
piyamate | 0:d488d550469e | 60 | wait_us(30); |
piyamate | 0:d488d550469e | 61 | |
piyamate | 0:d488d550469e | 62 | //generate two CLK pulses |
piyamate | 0:d488d550469e | 63 | for(int i=0; i<2; i++) |
piyamate | 0:d488d550469e | 64 | { |
piyamate | 0:d488d550469e | 65 | CLK = 1; |
piyamate | 0:d488d550469e | 66 | wait_us(30); |
piyamate | 0:d488d550469e | 67 | CLK = 0; |
piyamate | 0:d488d550469e | 68 | wait_us(15); |
piyamate | 0:d488d550469e | 69 | |
piyamate | 0:d488d550469e | 70 | //switch PDIO to input on first faling edge of CLK |
piyamate | 0:d488d550469e | 71 | if(i==0) |
piyamate | 0:d488d550469e | 72 | PDIO.input(); |
piyamate | 0:d488d550469e | 73 | wait_us(15); |
piyamate | 0:d488d550469e | 74 | } |
piyamate | 0:d488d550469e | 75 | |
piyamate | 0:d488d550469e | 76 | uint32_t factory_section = 0; |
piyamate | 0:d488d550469e | 77 | uint8_t I2C_A = 0; //I2C address <5:1> |
piyamate | 0:d488d550469e | 78 | uint8_t CCW = 0; //change increasing/decreasing code with encoder movement |
piyamate | 0:d488d550469e | 79 | uint16_t Z = 0; //zero position |
piyamate | 0:d488d550469e | 80 | |
piyamate | 0:d488d550469e | 81 | //read all parameters |
piyamate | 0:d488d550469e | 82 | read_bits(&factory_section, 29); |
piyamate | 0:d488d550469e | 83 | read_bits(&I2C_A, 5); |
piyamate | 0:d488d550469e | 84 | read_bits(&CCW, 1); |
piyamate | 0:d488d550469e | 85 | read_bits(&Z, 12); |
piyamate | 0:d488d550469e | 86 | } |
piyamate | 0:d488d550469e | 87 | |
piyamate | 0:d488d550469e | 88 | int scan_NSE5310() |
piyamate | 0:d488d550469e | 89 | { |
piyamate | 0:d488d550469e | 90 | CSn = 0; |
piyamate | 0:d488d550469e | 91 | I2C i2c(p28, p27); |
piyamate | 0:d488d550469e | 92 | int device_count = 0; |
piyamate | 0:d488d550469e | 93 | for(int addr=0x80; addr<0xFE; addr+=2) |
piyamate | 0:d488d550469e | 94 | { |
piyamate | 0:d488d550469e | 95 | float temperature; |
piyamate | 0:d488d550469e | 96 | //pc.printf("addr:0x%02X\n", addr); |
piyamate | 0:d488d550469e | 97 | if(read_temperature(i2c, addr, &temperature)==0) |
piyamate | 0:d488d550469e | 98 | { |
piyamate | 0:d488d550469e | 99 | pc.printf("Found device: 0x%02X, Temperature: %2.1fC\n", addr, temperature); |
piyamate | 0:d488d550469e | 100 | device_count++; |
piyamate | 0:d488d550469e | 101 | } |
piyamate | 0:d488d550469e | 102 | } |
piyamate | 0:d488d550469e | 103 | return device_count; |
piyamate | 0:d488d550469e | 104 | } |
piyamate | 0:d488d550469e | 105 | |
piyamate | 0:d488d550469e | 106 | int main() { |
piyamate | 0:d488d550469e | 107 | pc.baud(115200); |
piyamate | 0:d488d550469e | 108 | pc.printf("Scanning for NSE5310 devices...\n"); |
piyamate | 0:d488d550469e | 109 | int device_count = scan_NSE5310(); |
piyamate | 0:d488d550469e | 110 | //pc.printf("device_count=%d\n", device_count); |
piyamate | 0:d488d550469e | 111 | if(device_count==0) |
piyamate | 0:d488d550469e | 112 | pc.printf("No device found. Completed.\n"); |
piyamate | 0:d488d550469e | 113 | else if(device_count>1) |
piyamate | 0:d488d550469e | 114 | pc.printf("Found more than one device. Completed.\n"); |
piyamate | 0:d488d550469e | 115 | else if(device_count==1) |
piyamate | 0:d488d550469e | 116 | { |
piyamate | 0:d488d550469e | 117 | pc.printf("Entering programming mode...\n"); |
piyamate | 0:d488d550469e | 118 | OTP_setup(); |
piyamate | 0:d488d550469e | 119 | } |
piyamate | 0:d488d550469e | 120 | while(1); |
piyamate | 0:d488d550469e | 121 | } |