Protocolos de comunicación serie

Dependencies:   TextLCD mbed

Committer:
AndresQuesada
Date:
Fri Mar 17 08:14:43 2017 +0000
Revision:
0:3d07e16d44b2
Protocolos de comunicaci?n serie;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndresQuesada 0:3d07e16d44b2 1 /*CONFIGURACION MAESTRO
AndresQuesada 0:3d07e16d44b2 2 Mediante las palancas(1,2,3) seleccionamos el modo de comunicacion
AndresQuesada 0:3d07e16d44b2 3 La cuarta palanca sirve para hacer un or con 1 o 2 al uart
AndresQuesada 0:3d07e16d44b2 4 SPI y uart estan preparados para 10 segundos de demo mediante timer
AndresQuesada 0:3d07e16d44b2 5 SPI Maestro transmite la lectura del sensor de temperatura conectado a l pin 20
AndresQuesada 0:3d07e16d44b2 6 al equipo esclavo
AndresQuesada 0:3d07e16d44b2 7
AndresQuesada 0:3d07e16d44b2 8 */
AndresQuesada 0:3d07e16d44b2 9 #include "mbed.h"
AndresQuesada 0:3d07e16d44b2 10 #include "TextLCD.h"
AndresQuesada 0:3d07e16d44b2 11 TextLCD lcd(p21, p22, p23, p24, p25, p26); // rs, rw, d4, d5, d6, d7
AndresQuesada 0:3d07e16d44b2 12 //------CONFIGURACION PINES DE TR/RE-----------------
AndresQuesada 0:3d07e16d44b2 13 SPI ser_port(p5, p6, p7); //mosi, miso, sclk
AndresQuesada 0:3d07e16d44b2 14 I2C i2c_port(p9, p10);//SDA,SCL
AndresQuesada 0:3d07e16d44b2 15 Serial async_port(p13, p14); //CAMBIADOS AL 13 Y 14///set up TX and RX on pins 28 and 27
AndresQuesada 0:3d07e16d44b2 16 //-------CONFIGURACION LEDS--------------------------------
AndresQuesada 0:3d07e16d44b2 17 DigitalOut red_led(p19); //red led
AndresQuesada 0:3d07e16d44b2 18 DigitalOut green_led(p28); //green led
AndresQuesada 0:3d07e16d44b2 19 DigitalOut strobe(p11); //a strobe to trigger the scope
AndresQuesada 0:3d07e16d44b2 20 DigitalOut cs(p12); //this acts as “slave select”
AndresQuesada 0:3d07e16d44b2 21 //----------------SELECT SPI----AL P8 DEL ESCLAVO
AndresQuesada 0:3d07e16d44b2 22 DigitalOut selec(p27);//para seleccionar CONECTAR AL PIN8 DEL ESCLAVO
AndresQuesada 0:3d07e16d44b2 23 //-------CONFIGURACION INTERRUPTORES
AndresQuesada 0:3d07e16d44b2 24 DigitalIn pulsa15(p15);//palanca PARA 1 o 2
AndresQuesada 0:3d07e16d44b2 25 InterruptIn buttonp16(p16);//palanca para modos de transmision
AndresQuesada 0:3d07e16d44b2 26 InterruptIn buttonp17(p17);
AndresQuesada 0:3d07e16d44b2 27 InterruptIn buttonp18(p18);
AndresQuesada 0:3d07e16d44b2 28 //---------VAARIABLE CONVERSION VOLTAJE
AndresQuesada 0:3d07e16d44b2 29 float milivolts;
AndresQuesada 0:3d07e16d44b2 30 //-----Entrada termometro
AndresQuesada 0:3d07e16d44b2 31 AnalogIn tem(p20);
AndresQuesada 0:3d07e16d44b2 32 //---------TIMER-------------------------
AndresQuesada 0:3d07e16d44b2 33 Timer t2; // define Timer with name “t”
AndresQuesada 0:3d07e16d44b2 34 //-------CARACTERES DE INTERCAMBIO
AndresQuesada 0:3d07e16d44b2 35 char switch_word ; //word we will send
AndresQuesada 0:3d07e16d44b2 36 char recd_val; //value return from slave
AndresQuesada 0:3d07e16d44b2 37 const int addr = 0x52; //the I2C slave address, an arbitrary even number <-- ojo con esto
AndresQuesada 0:3d07e16d44b2 38 //--------FUNCIONES------------------
AndresQuesada 0:3d07e16d44b2 39 void comprueba(){
AndresQuesada 0:3d07e16d44b2 40 red_led=0; //preset both to 0
AndresQuesada 0:3d07e16d44b2 41 green_led=0;
AndresQuesada 0:3d07e16d44b2 42 lcd.cls();//limpiamos el charco
AndresQuesada 0:3d07e16d44b2 43 recd_val=recd_val & 0x03; //AND out unwanted bits
AndresQuesada 0:3d07e16d44b2 44 if (recd_val==1)
AndresQuesada 0:3d07e16d44b2 45 { red_led=1;
AndresQuesada 0:3d07e16d44b2 46 lcd.printf("LLega %c \n\r",recd_val);
AndresQuesada 0:3d07e16d44b2 47 wait(0.5);
AndresQuesada 0:3d07e16d44b2 48 }//no debe de salir
AndresQuesada 0:3d07e16d44b2 49 if (recd_val==2)
AndresQuesada 0:3d07e16d44b2 50 { green_led=1;
AndresQuesada 0:3d07e16d44b2 51 lcd.printf("El valor enviado es 2");
AndresQuesada 0:3d07e16d44b2 52 wait(0.5);}
AndresQuesada 0:3d07e16d44b2 53 if (recd_val==3){
AndresQuesada 0:3d07e16d44b2 54 red_led=1;
AndresQuesada 0:3d07e16d44b2 55 green_led=1;
AndresQuesada 0:3d07e16d44b2 56 lcd.printf("El valor enviado es 3");
AndresQuesada 0:3d07e16d44b2 57 wait(0.5);
AndresQuesada 0:3d07e16d44b2 58 }
AndresQuesada 0:3d07e16d44b2 59
AndresQuesada 0:3d07e16d44b2 60 }
AndresQuesada 0:3d07e16d44b2 61 void i2cpP(){
AndresQuesada 0:3d07e16d44b2 62
AndresQuesada 0:3d07e16d44b2 63 /*Remember, you will need a pull-up resistor on sda and scl.
AndresQuesada 0:3d07e16d44b2 64 All drivers on the I2C bus are required to be open collector, and
AndresQuesada 0:3d07e16d44b2 65 so it is necessary for pull up resistors to be used on the two signals.
AndresQuesada 0:3d07e16d44b2 66 A typical value for the pullup resistors is around 2.2k ohms,
AndresQuesada 0:3d07e16d44b2 67 connected between the pin and 3v3. https://developer.mbed.org/handbook/I2C*/
AndresQuesada 0:3d07e16d44b2 68 lcd.printf("Prueba i2cp");
AndresQuesada 0:3d07e16d44b2 69 wait(2);
AndresQuesada 0:3d07e16d44b2 70 lcd.cls();
AndresQuesada 0:3d07e16d44b2 71 lcd.printf("COMIENZO ");
AndresQuesada 0:3d07e16d44b2 72 //send a single byte of data, in correct I2C package
AndresQuesada 0:3d07e16d44b2 73 i2c_port.start(); //force a start condition
AndresQuesada 0:3d07e16d44b2 74 i2c_port.write(addr); //send the address
AndresQuesada 0:3d07e16d44b2 75 i2c_port.write(switch_word); //send one byte of data, ie switch_word
AndresQuesada 0:3d07e16d44b2 76 i2c_port.stop(); //force a stop condition
AndresQuesada 0:3d07e16d44b2 77 wait(0.002);
AndresQuesada 0:3d07e16d44b2 78 lcd.printf("POST WAIT");
AndresQuesada 0:3d07e16d44b2 79 //receive a single byte of data, in correct I2C package
AndresQuesada 0:3d07e16d44b2 80 i2c_port.start();
AndresQuesada 0:3d07e16d44b2 81 i2c_port.write(addr | 0x01); //send address, with R/W bit set to Read <-- ojo con esto
AndresQuesada 0:3d07e16d44b2 82 recd_val=i2c_port.read(addr); //Read and save the received byte
AndresQuesada 0:3d07e16d44b2 83 i2c_port.stop(); //force a stop condition
AndresQuesada 0:3d07e16d44b2 84 comprueba();
AndresQuesada 0:3d07e16d44b2 85
AndresQuesada 0:3d07e16d44b2 86
AndresQuesada 0:3d07e16d44b2 87 }
AndresQuesada 0:3d07e16d44b2 88 void spiP(){
AndresQuesada 0:3d07e16d44b2 89 lcd.printf("Prueba spi");
AndresQuesada 0:3d07e16d44b2 90 wait(2);
AndresQuesada 0:3d07e16d44b2 91 lcd.cls();
AndresQuesada 0:3d07e16d44b2 92 t2.reset();// reseteamos el timer
AndresQuesada 0:3d07e16d44b2 93 t2.start(); //start the timer
AndresQuesada 0:3d07e16d44b2 94 while(t2.read()<10)
AndresQuesada 0:3d07e16d44b2 95 {
AndresQuesada 0:3d07e16d44b2 96 milivolts = (tem / 1023.0) * 500;// /5000*10
AndresQuesada 0:3d07e16d44b2 97 cs = 0; //select slave
AndresQuesada 0:3d07e16d44b2 98 ser_port.write(milivolts);
AndresQuesada 0:3d07e16d44b2 99 cs = 1;
AndresQuesada 0:3d07e16d44b2 100 }
AndresQuesada 0:3d07e16d44b2 101 /*
AndresQuesada 0:3d07e16d44b2 102 cs = 0; //select slave
AndresQuesada 0:3d07e16d44b2 103 recd_val=ser_port.write(switch_word); //send switch_word and receive data
AndresQuesada 0:3d07e16d44b2 104 cs = 1;
AndresQuesada 0:3d07e16d44b2 105 wait(0.01);
AndresQuesada 0:3d07e16d44b2 106 //set leds according to incoming word from slave
AndresQuesada 0:3d07e16d44b2 107
AndresQuesada 0:3d07e16d44b2 108 */
AndresQuesada 0:3d07e16d44b2 109 // comprueba();
AndresQuesada 0:3d07e16d44b2 110
AndresQuesada 0:3d07e16d44b2 111 }
AndresQuesada 0:3d07e16d44b2 112 void uartP(){
AndresQuesada 0:3d07e16d44b2 113 lcd.printf("Prueba uart");
AndresQuesada 0:3d07e16d44b2 114 wait(2);
AndresQuesada 0:3d07e16d44b2 115 lcd.cls();
AndresQuesada 0:3d07e16d44b2 116 t2.reset();// reseteamos el timer
AndresQuesada 0:3d07e16d44b2 117 t2.start(); //start the timer
AndresQuesada 0:3d07e16d44b2 118 while(t2.read()<10)
AndresQuesada 0:3d07e16d44b2 119 {
AndresQuesada 0:3d07e16d44b2 120 strobe =1; //short strobe pulse
AndresQuesada 0:3d07e16d44b2 121 wait_us(10);
AndresQuesada 0:3d07e16d44b2 122 strobe=0;
AndresQuesada 0:3d07e16d44b2 123 // lcd.printf("POST STROBE");
AndresQuesada 0:3d07e16d44b2 124 wait(2);
AndresQuesada 0:3d07e16d44b2 125 async_port.putc(switch_word); //transmit switch_word
AndresQuesada 0:3d07e16d44b2 126 if (async_port.readable()==1) //is there a character to be read?
AndresQuesada 0:3d07e16d44b2 127 recd_val=async_port.getc(); //if yes, then read it
AndresQuesada 0:3d07e16d44b2 128 // lcd.printf("PRECOMPRUEBA");
AndresQuesada 0:3d07e16d44b2 129 wait(2);
AndresQuesada 0:3d07e16d44b2 130 comprueba();
AndresQuesada 0:3d07e16d44b2 131 // lcd.printf("POSTCOMPRUEBA");
AndresQuesada 0:3d07e16d44b2 132 wait(2);
AndresQuesada 0:3d07e16d44b2 133 }
AndresQuesada 0:3d07e16d44b2 134 t2.stop();//paramos el timer
AndresQuesada 0:3d07e16d44b2 135 }
AndresQuesada 0:3d07e16d44b2 136
AndresQuesada 0:3d07e16d44b2 137 int main() {
AndresQuesada 0:3d07e16d44b2 138 lcd.printf("Prueba ");
AndresQuesada 0:3d07e16d44b2 139 async_port.baud(9600);
AndresQuesada 0:3d07e16d44b2 140 while(1) {
AndresQuesada 0:3d07e16d44b2 141 switch_word=0xa0; //set up a recognizable output pattern
AndresQuesada 0:3d07e16d44b2 142 if (pulsa15==1)
AndresQuesada 0:3d07e16d44b2 143 switch_word=switch_word | 0x01; //OR in lsb
AndresQuesada 0:3d07e16d44b2 144 if (pulsa15==0)
AndresQuesada 0:3d07e16d44b2 145 switch_word=switch_word | 0x02; //OR in next lsb
AndresQuesada 0:3d07e16d44b2 146 buttonp16.rise(&i2cpP);
AndresQuesada 0:3d07e16d44b2 147 buttonp17.rise(&spiP);
AndresQuesada 0:3d07e16d44b2 148 buttonp18.rise(&uartP);
AndresQuesada 0:3d07e16d44b2 149
AndresQuesada 0:3d07e16d44b2 150 }
AndresQuesada 0:3d07e16d44b2 151
AndresQuesada 0:3d07e16d44b2 152
AndresQuesada 0:3d07e16d44b2 153 }