
Analog Multiplexer using USART SPI, LCD interfacing
Fork of TextLCD_HelloWorld by
main.cpp@3:18ef2e771565, 2014-08-02 (annotated)
- Committer:
- josmy
- Date:
- Sat Aug 02 07:47:48 2014 +0000
- Revision:
- 3:18ef2e771565
- Parent:
- 2:ad0b044d0a10
Analog Multiplexer using USART, SPI and LCD interfacing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
josmy | 3:18ef2e771565 | 1 | //Started USART, LCD Interfacing |
josmy | 3:18ef2e771565 | 2 | //Inerfaced SPI and tested for top and bottom boards |
josmy | 3:18ef2e771565 | 3 | //Keypress and Serial communication tested |
simon | 1:7418a52375a0 | 4 | |
simon | 0:334327d1a416 | 5 | #include "mbed.h" |
simon | 0:334327d1a416 | 6 | #include "TextLCD.h" |
josmy | 3:18ef2e771565 | 7 | #include "string.h" |
josmy | 3:18ef2e771565 | 8 | #include "stdio.h" |
simon | 0:334327d1a416 | 9 | |
josmy | 3:18ef2e771565 | 10 | TextLCD lcd(PA_10, PB_3, PB_5, PB_4, PB_8, PA_8); // rs, e, d4-d7 |
josmy | 3:18ef2e771565 | 11 | |
josmy | 3:18ef2e771565 | 12 | Serial pc(PB_10, PB_11);//TX = PB_10 RX = PB_11 |
josmy | 3:18ef2e771565 | 13 | DigitalIn upbutton(USER_BUTTON);//PC_13 = upkey |
josmy | 3:18ef2e771565 | 14 | DigitalIn downbutton(PB_9);//D14 = downkey |
josmy | 3:18ef2e771565 | 15 | DigitalOut myled(PA_5); |
josmy | 3:18ef2e771565 | 16 | |
josmy | 3:18ef2e771565 | 17 | char SerialAvailable = 0; |
josmy | 3:18ef2e771565 | 18 | char buf[10]; |
josmy | 3:18ef2e771565 | 19 | char buffer[16]; |
josmy | 3:18ef2e771565 | 20 | unsigned incomingByte = 0; |
josmy | 3:18ef2e771565 | 21 | unsigned pointer = 0; |
josmy | 3:18ef2e771565 | 22 | unsigned char ch00,ch01,ch02,ch03,ch04; |
josmy | 3:18ef2e771565 | 23 | int RelaySelected; |
josmy | 3:18ef2e771565 | 24 | |
josmy | 3:18ef2e771565 | 25 | SPI SPIDevice(SPI_MOSI, SPI_MISO, SPI_SCK);//mosi=PA_7, miso=PA_6, sck=PA5 |
josmy | 3:18ef2e771565 | 26 | DigitalOut OE(PA_9);//D8=OE |
josmy | 3:18ef2e771565 | 27 | DigitalOut RCK595(PC_7);//D9=RCK595 |
josmy | 3:18ef2e771565 | 28 | |
josmy | 3:18ef2e771565 | 29 | |
josmy | 3:18ef2e771565 | 30 | |
josmy | 3:18ef2e771565 | 31 | |
josmy | 3:18ef2e771565 | 32 | void RelaySelectFunction( ){ |
josmy | 3:18ef2e771565 | 33 | unsigned uword; |
josmy | 3:18ef2e771565 | 34 | |
josmy | 3:18ef2e771565 | 35 | switch(RelaySelected){ |
josmy | 3:18ef2e771565 | 36 | case 1:uword = 0x0080;lcd.locate(0,1);lcd.printf("CH1 ");break; |
josmy | 3:18ef2e771565 | 37 | case 2:uword = 0x0040;lcd.locate(0,1);lcd.printf("CH2 ");break; |
josmy | 3:18ef2e771565 | 38 | case 3:uword = 0x0020;lcd.locate(0,1);lcd.printf("CH3 ");break; |
josmy | 3:18ef2e771565 | 39 | case 4:uword = 0x0010;lcd.locate(0,1);lcd.printf("CH4 ");break; |
josmy | 3:18ef2e771565 | 40 | case 5:uword = 0x0008;lcd.locate(0,1);lcd.printf("CH5 ");break; |
josmy | 3:18ef2e771565 | 41 | case 6:uword = 0x0004;lcd.locate(0,1);lcd.printf("CH6 ");break; |
josmy | 3:18ef2e771565 | 42 | case 7:uword = 0x0002;lcd.locate(0,1);lcd.printf("CH7 ");break; |
josmy | 3:18ef2e771565 | 43 | case 8:uword = 0x0001;lcd.locate(0,1);lcd.printf("CH8 ");break; |
josmy | 3:18ef2e771565 | 44 | case 9:uword = 0x8000;lcd.locate(0,1);lcd.printf("CH9 ");break; |
josmy | 3:18ef2e771565 | 45 | case 10:uword = 0x4000;lcd.locate(0,1);lcd.printf("CH10 ");break; |
josmy | 3:18ef2e771565 | 46 | case 11:uword = 0x2000;lcd.locate(0,1);lcd.printf("CH11 ");break; |
josmy | 3:18ef2e771565 | 47 | case 12:uword = 0x1000;lcd.locate(0,1);lcd.printf("CH12 ");break; |
josmy | 3:18ef2e771565 | 48 | case 13:uword = 0x0800;lcd.locate(0,1);lcd.printf("CH13 ");break; |
josmy | 3:18ef2e771565 | 49 | case 14:uword = 0x0400;lcd.locate(0,1);lcd.printf("CH14 ");break; |
josmy | 3:18ef2e771565 | 50 | case 15:uword = 0x0200;lcd.locate(0,1);lcd.printf("CH15 ");break; |
josmy | 3:18ef2e771565 | 51 | case 16:uword = 0x0100;lcd.locate(0,1);lcd.printf("CH16 ");break; |
josmy | 3:18ef2e771565 | 52 | default: uword = 0x0000;lcd.locate(0,1);lcd.printf("No CH ");break; |
josmy | 3:18ef2e771565 | 53 | } |
josmy | 3:18ef2e771565 | 54 | RCK595 = 0;SPIDevice.write(uword); wait_ms(2);RCK595 = 1; |
josmy | 3:18ef2e771565 | 55 | wait_ms(200); |
josmy | 3:18ef2e771565 | 56 | } |
josmy | 3:18ef2e771565 | 57 | |
josmy | 3:18ef2e771565 | 58 | void SerialCom(){ |
josmy | 3:18ef2e771565 | 59 | |
josmy | 3:18ef2e771565 | 60 | |
josmy | 3:18ef2e771565 | 61 | if(pc.readable()){ |
josmy | 3:18ef2e771565 | 62 | buffer[0] = buffer[1]; |
josmy | 3:18ef2e771565 | 63 | buffer[1] = buffer[2]; |
josmy | 3:18ef2e771565 | 64 | buffer[2] = buffer[3]; |
josmy | 3:18ef2e771565 | 65 | buffer[3] = buffer[4]; |
josmy | 3:18ef2e771565 | 66 | buffer[4] = buffer[5]; |
josmy | 3:18ef2e771565 | 67 | buffer[5] = pc.getc(); |
simon | 0:334327d1a416 | 68 | |
josmy | 3:18ef2e771565 | 69 | if((buffer[0] == 'A') && (buffer[5] == 'B')){ |
josmy | 3:18ef2e771565 | 70 | SerialAvailable = 1; |
josmy | 3:18ef2e771565 | 71 | } |
josmy | 3:18ef2e771565 | 72 | } |
simon | 0:334327d1a416 | 73 | } |
josmy | 3:18ef2e771565 | 74 | |
josmy | 3:18ef2e771565 | 75 | void Keypress(){ |
josmy | 3:18ef2e771565 | 76 | |
josmy | 3:18ef2e771565 | 77 | if(upbutton == 0){ |
josmy | 3:18ef2e771565 | 78 | RelaySelected++; |
josmy | 3:18ef2e771565 | 79 | if(RelaySelected > 16)RelaySelected = 1; |
josmy | 3:18ef2e771565 | 80 | RelaySelectFunction(); |
josmy | 3:18ef2e771565 | 81 | pc.printf("Relay:%u\n", RelaySelected); |
josmy | 3:18ef2e771565 | 82 | wait_ms(50); |
josmy | 3:18ef2e771565 | 83 | } |
josmy | 3:18ef2e771565 | 84 | if(downbutton == 0){ |
josmy | 3:18ef2e771565 | 85 | RelaySelected--; |
josmy | 3:18ef2e771565 | 86 | if(RelaySelected < 1)RelaySelected = 16; |
josmy | 3:18ef2e771565 | 87 | RelaySelectFunction(); |
josmy | 3:18ef2e771565 | 88 | pc.printf("Relay:%u\n", RelaySelected); |
josmy | 3:18ef2e771565 | 89 | wait_ms(50); |
josmy | 3:18ef2e771565 | 90 | } |
josmy | 3:18ef2e771565 | 91 | } |
josmy | 3:18ef2e771565 | 92 | void SerialFunction(){ |
josmy | 3:18ef2e771565 | 93 | int i; |
josmy | 3:18ef2e771565 | 94 | i = buffer[2]; |
josmy | 3:18ef2e771565 | 95 | switch(i){ |
josmy | 3:18ef2e771565 | 96 | case 48:RelaySelected=1;break; |
josmy | 3:18ef2e771565 | 97 | case 49:RelaySelected=2;break; |
josmy | 3:18ef2e771565 | 98 | case 50:RelaySelected=3;break; |
josmy | 3:18ef2e771565 | 99 | case 51:RelaySelected=4;break; |
josmy | 3:18ef2e771565 | 100 | case 52:RelaySelected=5;break; |
josmy | 3:18ef2e771565 | 101 | case 53:RelaySelected=6;break; |
josmy | 3:18ef2e771565 | 102 | case 54:RelaySelected=7;break; |
josmy | 3:18ef2e771565 | 103 | case 55:RelaySelected=8;break; |
josmy | 3:18ef2e771565 | 104 | case 56:RelaySelected=9;break; |
josmy | 3:18ef2e771565 | 105 | case 57:RelaySelected=10;break; |
josmy | 3:18ef2e771565 | 106 | |
josmy | 3:18ef2e771565 | 107 | case 65:RelaySelected=11;break; |
josmy | 3:18ef2e771565 | 108 | case 66:RelaySelected=12;break; |
josmy | 3:18ef2e771565 | 109 | case 67:RelaySelected=13;break; |
josmy | 3:18ef2e771565 | 110 | case 68:RelaySelected=14;break; |
josmy | 3:18ef2e771565 | 111 | case 69:RelaySelected=15;break; |
josmy | 3:18ef2e771565 | 112 | case 70:RelaySelected=16;break; |
josmy | 3:18ef2e771565 | 113 | default:RelaySelected=1;break; |
josmy | 3:18ef2e771565 | 114 | } |
josmy | 3:18ef2e771565 | 115 | RelaySelectFunction(); |
josmy | 3:18ef2e771565 | 116 | SerialAvailable = 0; |
josmy | 3:18ef2e771565 | 117 | |
josmy | 3:18ef2e771565 | 118 | } |
josmy | 3:18ef2e771565 | 119 | int main() { |
josmy | 3:18ef2e771565 | 120 | |
josmy | 3:18ef2e771565 | 121 | OE = 1; // Deselect device |
josmy | 3:18ef2e771565 | 122 | RCK595 = 1; // Deselect device |
josmy | 3:18ef2e771565 | 123 | SPIDevice.format(16,3); // Setup: bit data, high steady state clock, 2nd edge capture |
josmy | 3:18ef2e771565 | 124 | SPIDevice.frequency(400000); //400kHz |
josmy | 3:18ef2e771565 | 125 | SPIDevice.write(0x0000); |
josmy | 3:18ef2e771565 | 126 | |
josmy | 3:18ef2e771565 | 127 | pc.printf("Analog Multiplexer\n"); |
josmy | 3:18ef2e771565 | 128 | lcd.printf("Analog Multiplexer"); |
josmy | 3:18ef2e771565 | 129 | OE = 0; |
josmy | 3:18ef2e771565 | 130 | downbutton.mode(PullUp); |
josmy | 3:18ef2e771565 | 131 | lcd.locate(0,1);lcd.printf(" "); |
josmy | 3:18ef2e771565 | 132 | RelaySelected = 1; |
josmy | 3:18ef2e771565 | 133 | RelaySelectFunction(); |
josmy | 3:18ef2e771565 | 134 | pc.attach(&SerialCom); |
josmy | 3:18ef2e771565 | 135 | while(1){ |
josmy | 3:18ef2e771565 | 136 | Keypress(); |
josmy | 3:18ef2e771565 | 137 | if(SerialAvailable==1) |
josmy | 3:18ef2e771565 | 138 | SerialFunction(); |
josmy | 3:18ef2e771565 | 139 | } |
josmy | 3:18ef2e771565 | 140 | } |