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:dc93cf7b2b42, 2010-08-01 (annotated)
- Committer:
- matsukawa
- Date:
- Sun Aug 01 13:07:04 2010 +0000
- Revision:
- 0:dc93cf7b2b42
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| matsukawa | 0:dc93cf7b2b42 | 1 | //---------------1------------------------- |
| matsukawa | 0:dc93cf7b2b42 | 2 | |
| matsukawa | 0:dc93cf7b2b42 | 3 | #include "mbed.h" |
| matsukawa | 0:dc93cf7b2b42 | 4 | #include "TextLCD.h" |
| matsukawa | 0:dc93cf7b2b42 | 5 | |
| matsukawa | 0:dc93cf7b2b42 | 6 | TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3 |
| matsukawa | 0:dc93cf7b2b42 | 7 | SPI spi(p5, p6, p7); // mosi, miso, sclk |
| matsukawa | 0:dc93cf7b2b42 | 8 | DigitalOut cs(p8); |
| matsukawa | 0:dc93cf7b2b42 | 9 | |
| matsukawa | 0:dc93cf7b2b42 | 10 | Serial pc(USBTX, USBRX); // tx, rx |
| matsukawa | 0:dc93cf7b2b42 | 11 | |
| matsukawa | 0:dc93cf7b2b42 | 12 | |
| matsukawa | 0:dc93cf7b2b42 | 13 | //-----------------2------------------------ |
| matsukawa | 0:dc93cf7b2b42 | 14 | //Addresses |
| matsukawa | 0:dc93cf7b2b42 | 15 | #define REVID 0x00 //ASIC Revision Number |
| matsukawa | 0:dc93cf7b2b42 | 16 | #define OPSTATUS 0x04 //Operation Status |
| matsukawa | 0:dc93cf7b2b42 | 17 | #define STATUS 0x07 //ASIC Status |
| matsukawa | 0:dc93cf7b2b42 | 18 | #define START 0x0A //Constant Readings |
| matsukawa | 0:dc93cf7b2b42 | 19 | #define PRESSURE 0x1F //Pressure 3 MSB |
| matsukawa | 0:dc93cf7b2b42 | 20 | #define PRESSURE_LSB 0x20 //Pressure 16 LSB |
| matsukawa | 0:dc93cf7b2b42 | 21 | #define TEMP 0x21 //16 bit temp |
| matsukawa | 0:dc93cf7b2b42 | 22 | |
| matsukawa | 0:dc93cf7b2b42 | 23 | //---------------3----------------------- |
| matsukawa | 0:dc93cf7b2b42 | 24 | |
| matsukawa | 0:dc93cf7b2b42 | 25 | float temp_in; |
| matsukawa | 0:dc93cf7b2b42 | 26 | unsigned long pressure_lsb; |
| matsukawa | 0:dc93cf7b2b42 | 27 | unsigned long pressure_msb; |
| matsukawa | 0:dc93cf7b2b42 | 28 | unsigned long temp_pressure; |
| matsukawa | 0:dc93cf7b2b42 | 29 | unsigned long pressure; |
| matsukawa | 0:dc93cf7b2b42 | 30 | |
| matsukawa | 0:dc93cf7b2b42 | 31 | char read_register(char register_name) |
| matsukawa | 0:dc93cf7b2b42 | 32 | { |
| matsukawa | 0:dc93cf7b2b42 | 33 | register_name <<=2; |
| matsukawa | 0:dc93cf7b2b42 | 34 | register_name &= 0xFC; |
| matsukawa | 0:dc93cf7b2b42 | 35 | cs=0; //Select SPI device |
| matsukawa | 0:dc93cf7b2b42 | 36 | spi.write(register_name); //Send register location |
| matsukawa | 0:dc93cf7b2b42 | 37 | char register_value=spi.write(0x00); |
| matsukawa | 0:dc93cf7b2b42 | 38 | cs=1; |
| matsukawa | 0:dc93cf7b2b42 | 39 | return register_value; |
| matsukawa | 0:dc93cf7b2b42 | 40 | } |
| matsukawa | 0:dc93cf7b2b42 | 41 | |
| matsukawa | 0:dc93cf7b2b42 | 42 | |
| matsukawa | 0:dc93cf7b2b42 | 43 | void write_register(char register_name, char register_value) |
| matsukawa | 0:dc93cf7b2b42 | 44 | { |
| matsukawa | 0:dc93cf7b2b42 | 45 | register_name <<= 2; |
| matsukawa | 0:dc93cf7b2b42 | 46 | register_name |= 0x02; //le estamos diciendo que escriba |
| matsukawa | 0:dc93cf7b2b42 | 47 | cs=0; //Select SPI device |
| matsukawa | 0:dc93cf7b2b42 | 48 | spi.write(register_name); //Send register location |
| matsukawa | 0:dc93cf7b2b42 | 49 | spi.write(register_value); //Send value to record into register |
| matsukawa | 0:dc93cf7b2b42 | 50 | cs=1; |
| matsukawa | 0:dc93cf7b2b42 | 51 | } |
| matsukawa | 0:dc93cf7b2b42 | 52 | |
| matsukawa | 0:dc93cf7b2b42 | 53 | float read_register16(char register_name) |
| matsukawa | 0:dc93cf7b2b42 | 54 | { |
| matsukawa | 0:dc93cf7b2b42 | 55 | register_name <<= 2; |
| matsukawa | 0:dc93cf7b2b42 | 56 | register_name &= 0xFC; //Read command |
| matsukawa | 0:dc93cf7b2b42 | 57 | cs=0; //Select SPI Device |
| matsukawa | 0:dc93cf7b2b42 | 58 | spi.write(register_name); //Write byte to device |
| matsukawa | 0:dc93cf7b2b42 | 59 | int in_byte1 = spi.write(0x00); |
| matsukawa | 0:dc93cf7b2b42 | 60 | int in_byte2 = spi.write(0x00); |
| matsukawa | 0:dc93cf7b2b42 | 61 | cs=1; |
| matsukawa | 0:dc93cf7b2b42 | 62 | float in_word= (in_byte1<<=8) | (in_byte2); |
| matsukawa | 0:dc93cf7b2b42 | 63 | return(in_word); |
| matsukawa | 0:dc93cf7b2b42 | 64 | } |
| matsukawa | 0:dc93cf7b2b42 | 65 | |
| matsukawa | 0:dc93cf7b2b42 | 66 | |
| matsukawa | 0:dc93cf7b2b42 | 67 | //-----------------4------------------------ |
| matsukawa | 0:dc93cf7b2b42 | 68 | |
| matsukawa | 0:dc93cf7b2b42 | 69 | int main() { |
| matsukawa | 0:dc93cf7b2b42 | 70 | // configuracion--------------------------------- |
| matsukawa | 0:dc93cf7b2b42 | 71 | cs=1; |
| matsukawa | 0:dc93cf7b2b42 | 72 | spi.frequency(500000); // the fastest of the sensor |
| matsukawa | 0:dc93cf7b2b42 | 73 | spi.format(8, 0); // duda son dos palabras de 8 bits? |
| matsukawa | 0:dc93cf7b2b42 | 74 | wait(0.5); |
| matsukawa | 0:dc93cf7b2b42 | 75 | //------------------------------------------------ |
| matsukawa | 0:dc93cf7b2b42 | 76 | // pc.printf("RESET\r\n"); |
| matsukawa | 0:dc93cf7b2b42 | 77 | write_register(0x06,0x01); |
| matsukawa | 0:dc93cf7b2b42 | 78 | wait(0.5); |
| matsukawa | 0:dc93cf7b2b42 | 79 | |
| matsukawa | 0:dc93cf7b2b42 | 80 | // pc.printf("Initialize High Resolution Constant Reading Mode\r\n"); |
| matsukawa | 0:dc93cf7b2b42 | 81 | write_register(0x03,0x0A); |
| matsukawa | 0:dc93cf7b2b42 | 82 | wait(0.5); |
| matsukawa | 0:dc93cf7b2b42 | 83 | |
| matsukawa | 0:dc93cf7b2b42 | 84 | while (1) { |
| matsukawa | 0:dc93cf7b2b42 | 85 | pressure_msb = read_register(PRESSURE); |
| matsukawa | 0:dc93cf7b2b42 | 86 | pressure_msb &= 0x07; |
| matsukawa | 0:dc93cf7b2b42 | 87 | pressure_lsb = read_register16(PRESSURE_LSB); |
| matsukawa | 0:dc93cf7b2b42 | 88 | pressure = ((pressure_msb<<16)| pressure_lsb); |
| matsukawa | 0:dc93cf7b2b42 | 89 | pressure /= 4; |
| matsukawa | 0:dc93cf7b2b42 | 90 | temp_in = read_register16(TEMP); |
| matsukawa | 0:dc93cf7b2b42 | 91 | lcd.cls(); |
| matsukawa | 0:dc93cf7b2b42 | 92 | if (temp_in > 0x3FFF) { |
| matsukawa | 0:dc93cf7b2b42 | 93 | temp_in = 0x3FFF - temp_in; |
| matsukawa | 0:dc93cf7b2b42 | 94 | lcd.locate(0, 0); |
| matsukawa | 0:dc93cf7b2b42 | 95 | lcd.printf("t:%.2f",temp_in); |
| matsukawa | 0:dc93cf7b2b42 | 96 | temp_in = temp_in / 20; |
| matsukawa | 0:dc93cf7b2b42 | 97 | lcd.locate(0, 1); |
| matsukawa | 0:dc93cf7b2b42 | 98 | lcd.printf("Temp :-"); |
| matsukawa | 0:dc93cf7b2b42 | 99 | lcd.printf("%.1f",temp_in); |
| matsukawa | 0:dc93cf7b2b42 | 100 | // pc.printf("TEMPERATURA: %.2f,PRESION: %.2u\r",temp_in ,pressure); |
| matsukawa | 0:dc93cf7b2b42 | 101 | } else { |
| matsukawa | 0:dc93cf7b2b42 | 102 | lcd.locate(0, 0); |
| matsukawa | 0:dc93cf7b2b42 | 103 | lcd.printf("t:%.2f",temp_in); |
| matsukawa | 0:dc93cf7b2b42 | 104 | lcd.locate(0, 1); |
| matsukawa | 0:dc93cf7b2b42 | 105 | temp_in = temp_in / 20; |
| matsukawa | 0:dc93cf7b2b42 | 106 | lcd.printf("Temp :+"); |
| matsukawa | 0:dc93cf7b2b42 | 107 | lcd.printf("%.1f",temp_in); |
| matsukawa | 0:dc93cf7b2b42 | 108 | // pc.printf("TEMPERATURA: %.2f,PRESION: %.2u\r",temp_in ,pressure); |
| matsukawa | 0:dc93cf7b2b42 | 109 | } |
| matsukawa | 0:dc93cf7b2b42 | 110 | // temp_in = temp_in / 20; |
| matsukawa | 0:dc93cf7b2b42 | 111 | wait(5); |
| matsukawa | 0:dc93cf7b2b42 | 112 | } |
| matsukawa | 0:dc93cf7b2b42 | 113 | |
| matsukawa | 0:dc93cf7b2b42 | 114 | } |