Analog Multiplexer using USART SPI, LCD interfacing

Dependencies:   TextLCD mbed

Fork of TextLCD_HelloWorld by Simon Ford

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?

UserRevisionLine numberNew 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 }