Labmbed device drivers

Dependencies:   TextLCD mbed

Committer:
malcolmlear
Date:
Thu Jan 12 09:16:08 2017 +0000
Revision:
2:caa0e6b2b436
Parent:
1:04e1ee8faa04
Child:
3:8eee79f59b30
Updated temperature register settings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
malcolmlear 0:416329806e55 1 // Demo Program for Labmbed Board
malcolmlear 0:416329806e55 2
malcolmlear 0:416329806e55 3 #include "mbed.h"
malcolmlear 0:416329806e55 4 #include "TextLCD.h"
malcolmlear 0:416329806e55 5
malcolmlear 2:caa0e6b2b436 6 TextLCD lcd(p15, p16, p17, p18, p19, p20); // LCD: RS, E, D4-D7
malcolmlear 2:caa0e6b2b436 7 SPI spi(p5, p6, p7); // SPI: MOSI, MISO, SCLK (MISO not used with LCD)
malcolmlear 2:caa0e6b2b436 8 DigitalOut lat(p8); // data latch for LED driver TLC59281
malcolmlear 2:caa0e6b2b436 9 I2C i2c(p9, p10); // I2C: SDA, SCL
malcolmlear 0:416329806e55 10
malcolmlear 2:caa0e6b2b436 11 int led_bits = 0; // global LED status used for readback
malcolmlear 2:caa0e6b2b436 12 const int tmp102addr = 0x92; // TMP102 temperature I2C address
malcolmlear 0:416329806e55 13
malcolmlear 0:416329806e55 14
malcolmlear 0:416329806e55 15 void initleds() {
malcolmlear 2:caa0e6b2b436 16 lat = 0; // latch must start low
malcolmlear 2:caa0e6b2b436 17 spi.format(16,0); // SPI 16 bit data, low state, high going clock
malcolmlear 2:caa0e6b2b436 18 spi.frequency(1000000); // 1MHz clock rate
malcolmlear 0:416329806e55 19 }
malcolmlear 0:416329806e55 20
malcolmlear 0:416329806e55 21 void setleds(int ledall) {
malcolmlear 2:caa0e6b2b436 22 led_bits = ledall; // update global LED status
malcolmlear 0:416329806e55 23 spi.write((led_bits & 0x03ff) | ((led_bits & 0xa800) >> 1) | ((led_bits & 0x5400) << 1));
malcolmlear 2:caa0e6b2b436 24 lat = 1; // latch pulse start
malcolmlear 2:caa0e6b2b436 25 lat = 0; // latch pulse end
malcolmlear 0:416329806e55 26 }
malcolmlear 0:416329806e55 27
malcolmlear 0:416329806e55 28 void setled(int ledno, int ledstate) {
malcolmlear 2:caa0e6b2b436 29 ledno = ((ledno - 1) & 0x0007) + 1; // limit led number
malcolmlear 2:caa0e6b2b436 30 ledno = (8 - ledno) * 2; // offset of led state in 'led_bits'
malcolmlear 2:caa0e6b2b436 31 ledstate = ledstate & 0x0003; // limit led state
malcolmlear 0:416329806e55 32 ledstate = ledstate << ledno;
malcolmlear 2:caa0e6b2b436 33 int statemask = ((0x0003 << ledno) ^ 0xffff); // mask used to clear led state
malcolmlear 1:04e1ee8faa04 34 led_bits = ((led_bits & statemask) | ledstate); // clear and set led state
malcolmlear 0:416329806e55 35 setleds(led_bits);
malcolmlear 0:416329806e55 36 }
malcolmlear 0:416329806e55 37
malcolmlear 0:416329806e55 38 int readled(int ledno) {
malcolmlear 2:caa0e6b2b436 39 ledno = ((ledno - 1) & 0x0007) + 1; // limit led number
malcolmlear 2:caa0e6b2b436 40 ledno = (8 - ledno) * 2; // offset of led state in 'led_bits'
malcolmlear 0:416329806e55 41 int ledstate = led_bits;
malcolmlear 2:caa0e6b2b436 42 ledstate = ledstate >> ledno; // shift selected led state into ls 2 bits
malcolmlear 2:caa0e6b2b436 43 return (ledstate & 0x0003); // mask out and return led state
malcolmlear 0:416329806e55 44 }
malcolmlear 0:416329806e55 45
malcolmlear 0:416329806e55 46 int readleds() {
malcolmlear 2:caa0e6b2b436 47 return led_bits; // return LED status
malcolmlear 0:416329806e55 48 }
malcolmlear 0:416329806e55 49
malcolmlear 0:416329806e55 50 //int readswitch(int switchno) {
malcolmlear 0:416329806e55 51 //}
malcolmlear 0:416329806e55 52
malcolmlear 0:416329806e55 53 //int readswitches(int switchno) {
malcolmlear 0:416329806e55 54 //}
malcolmlear 0:416329806e55 55
malcolmlear 0:416329806e55 56 //int readkey(int keyno) {
malcolmlear 0:416329806e55 57 //}
malcolmlear 0:416329806e55 58
malcolmlear 0:416329806e55 59 //int readkeyrow(int keyrow) {
malcolmlear 0:416329806e55 60 //}
malcolmlear 0:416329806e55 61
malcolmlear 0:416329806e55 62 //int readkeys() {
malcolmlear 0:416329806e55 63 //}
malcolmlear 0:416329806e55 64
malcolmlear 0:416329806e55 65 float readtemp() {
malcolmlear 2:caa0e6b2b436 66 char cmd[3];
malcolmlear 2:caa0e6b2b436 67 cmd[0] = 0x01; // pointer register value
malcolmlear 2:caa0e6b2b436 68 cmd[1] = 0x60; // byte 1 of the configuration register
malcolmlear 2:caa0e6b2b436 69 cmd[2] = 0xa0; // byte 2 of the configuration register
malcolmlear 2:caa0e6b2b436 70 i2c.write(tmp102addr, cmd, 3); // select configuration register and write 0x60a0 to it
malcolmlear 2:caa0e6b2b436 71 wait(0.5); // wait for conversion
malcolmlear 2:caa0e6b2b436 72 cmd[0] = 0x00; // pointer register value
malcolmlear 2:caa0e6b2b436 73 i2c.write(tmp102addr, cmd, 1); // select temperature register
malcolmlear 2:caa0e6b2b436 74 i2c.read(tmp102addr, cmd, 2); // read 16-bit temperature register
malcolmlear 2:caa0e6b2b436 75 return (float((cmd[0]<<8)|cmd[1]) / 256.0); // divide by 256 and return temperature
malcolmlear 0:416329806e55 76 }
malcolmlear 0:416329806e55 77
malcolmlear 0:416329806e55 78 int main() {
malcolmlear 0:416329806e55 79
malcolmlear 0:416329806e55 80 initleds();
malcolmlear 0:416329806e55 81
malcolmlear 0:416329806e55 82 while(1) {
malcolmlear 1:04e1ee8faa04 83 int a,b;
malcolmlear 1:04e1ee8faa04 84 for (b = 0; b < 4; b++ ) {
malcolmlear 2:caa0e6b2b436 85 for (a = 1; a < 9; a++ ) {
malcolmlear 1:04e1ee8faa04 86 setled (a,b);
malcolmlear 1:04e1ee8faa04 87 wait(.5);
malcolmlear 1:04e1ee8faa04 88 }
malcolmlear 1:04e1ee8faa04 89 }
malcolmlear 2:caa0e6b2b436 90 float temp = readtemp();
malcolmlear 2:caa0e6b2b436 91 lcd.printf(" \n");
malcolmlear 2:caa0e6b2b436 92 lcd.printf("Temp = %f\n", temp);
malcolmlear 2:caa0e6b2b436 93 wait(3);
malcolmlear 0:416329806e55 94 }
malcolmlear 0:416329806e55 95 }