Labmbed device drivers

Dependencies:   TextLCD mbed

Committer:
malcolmlear
Date:
Wed Jan 11 11:19:03 2017 +0000
Revision:
0:416329806e55
Child:
1:04e1ee8faa04
Early Labmbed test program.; LCD working; LED's working; Temperature working; ; Priority to do: read keypad, read switches; Other to do: read accelerometer, PWM out, servo out; ;

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 0:416329806e55 6 TextLCD lcd(p15, p16, p17, p18, p19, p20); // LCD: RS, E, D4-D7
malcolmlear 0:416329806e55 7 SPI spi(p5, p6, p7); // SPI: MOSI, MISO, SCLK (MISO not used with LCD)
malcolmlear 0:416329806e55 8 DigitalOut lat(p8);
malcolmlear 0:416329806e55 9 I2C i2c(p9, p10); // I2C: SDA, SCL
malcolmlear 0:416329806e55 10
malcolmlear 0:416329806e55 11 int led_bits = 0; // global LED status used for readback
malcolmlear 0:416329806e55 12 const int tmp102addr = 0x92; // TMP102 temperature I2C address
malcolmlear 0:416329806e55 13
malcolmlear 0:416329806e55 14
malcolmlear 0:416329806e55 15 void initleds() {
malcolmlear 0:416329806e55 16 lat = 0; // latch must start low
malcolmlear 0:416329806e55 17 spi.format(16,0); // SPI 16 bit data, low state, high going clock
malcolmlear 0:416329806e55 18 spi.frequency(1000000); // 1MHz clock rate
malcolmlear 0:416329806e55 19 }
malcolmlear 0:416329806e55 20
malcolmlear 0:416329806e55 21 void setleds(int ledall) {
malcolmlear 0:416329806e55 22 led_bits = ledall;
malcolmlear 0:416329806e55 23 spi.write((led_bits & 0x03ff) | ((led_bits & 0xa800) >> 1) | ((led_bits & 0x5400) << 1));
malcolmlear 0:416329806e55 24 lat = 1; // latch pulse start
malcolmlear 0:416329806e55 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 0:416329806e55 29 ledno = ((ledno - 1) & 0x0007) + 1; // limit led number
malcolmlear 0:416329806e55 30 ledno = (8 - ledno) * 2; // offset of led state in 'led_bits'
malcolmlear 0:416329806e55 31 ledstate = ledstate & 0x0003; // limit led state
malcolmlear 0:416329806e55 32 ledstate = ledstate << ledno;
malcolmlear 0:416329806e55 33 int statemask = 0x0003;
malcolmlear 0:416329806e55 34 statemask = ((statemask << ledno) ^ 0xffff);
malcolmlear 0:416329806e55 35 led_bits = ((led_bits & statemask) | ledstate);
malcolmlear 0:416329806e55 36 setleds(led_bits);
malcolmlear 0:416329806e55 37 }
malcolmlear 0:416329806e55 38
malcolmlear 0:416329806e55 39 int readled(int ledno) {
malcolmlear 0:416329806e55 40 ledno = ((ledno - 1) & 0x0007) + 1; // limit led number
malcolmlear 0:416329806e55 41 ledno = (8 - ledno) * 2; // offset of led state in 'led_bits'
malcolmlear 0:416329806e55 42 int ledstate = led_bits;
malcolmlear 0:416329806e55 43 ledstate = ledstate >> ledno;
malcolmlear 0:416329806e55 44 return (ledstate & 0x0003);
malcolmlear 0:416329806e55 45 }
malcolmlear 0:416329806e55 46
malcolmlear 0:416329806e55 47 int readleds() {
malcolmlear 0:416329806e55 48 return led_bits;
malcolmlear 0:416329806e55 49 }
malcolmlear 0:416329806e55 50
malcolmlear 0:416329806e55 51 //int readswitch(int switchno) {
malcolmlear 0:416329806e55 52 //}
malcolmlear 0:416329806e55 53
malcolmlear 0:416329806e55 54 //int readswitches(int switchno) {
malcolmlear 0:416329806e55 55 //}
malcolmlear 0:416329806e55 56
malcolmlear 0:416329806e55 57 //int readkey(int keyno) {
malcolmlear 0:416329806e55 58 //}
malcolmlear 0:416329806e55 59
malcolmlear 0:416329806e55 60 //int readkeyrow(int keyrow) {
malcolmlear 0:416329806e55 61 //}
malcolmlear 0:416329806e55 62
malcolmlear 0:416329806e55 63 //int readkeys() {
malcolmlear 0:416329806e55 64 //}
malcolmlear 0:416329806e55 65
malcolmlear 0:416329806e55 66 float readtemp() {
malcolmlear 0:416329806e55 67 char cmd[2];
malcolmlear 0:416329806e55 68 cmd[0] = 0x01;
malcolmlear 0:416329806e55 69 cmd[1] = 0x00;
malcolmlear 0:416329806e55 70 i2c.write(tmp102addr, cmd, 2);
malcolmlear 0:416329806e55 71 wait(0.5);
malcolmlear 0:416329806e55 72 cmd[0] = 0x00;
malcolmlear 0:416329806e55 73 i2c.write(tmp102addr, cmd, 1);
malcolmlear 0:416329806e55 74 i2c.read(tmp102addr, cmd, 2);
malcolmlear 0:416329806e55 75 return (float((cmd[0]<<8)|cmd[1]) / 256.0);
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 0:416329806e55 83
malcolmlear 0:416329806e55 84 setled (5,2);
malcolmlear 0:416329806e55 85 setled (6,1);
malcolmlear 0:416329806e55 86 setled (7,3);
malcolmlear 0:416329806e55 87
malcolmlear 0:416329806e55 88 int led = readled(6);
malcolmlear 0:416329806e55 89 lcd.printf(" \n");
malcolmlear 0:416329806e55 90 lcd.printf("LED6 = %d\n", led);
malcolmlear 0:416329806e55 91 wait(3);
malcolmlear 0:416329806e55 92
malcolmlear 0:416329806e55 93 setleds(0x5555);
malcolmlear 0:416329806e55 94 led = readleds();
malcolmlear 0:416329806e55 95 lcd.printf(" \n");
malcolmlear 0:416329806e55 96 lcd.printf("LEDs = %d\n", led);
malcolmlear 0:416329806e55 97 wait(3);
malcolmlear 0:416329806e55 98
malcolmlear 0:416329806e55 99 float temp = readtemp();
malcolmlear 0:416329806e55 100 lcd.printf(" \n");
malcolmlear 0:416329806e55 101 lcd.printf("Temp = %f\n", temp);
malcolmlear 0:416329806e55 102 wait(3);
malcolmlear 0:416329806e55 103
malcolmlear 0:416329806e55 104 }
malcolmlear 0:416329806e55 105 }