Dependencies:   TextLCD mbed

Committer:
AndresQuesada
Date:
Fri Mar 17 08:16:29 2017 +0000
Revision:
0:5285a0479338
Protocolos de comunicaci?n serie;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndresQuesada 0:5285a0479338 1
AndresQuesada 0:5285a0479338 2 /*CONFIGURACION SLAVE*
AndresQuesada 0:5285a0479338 3 /*Remember, you will need a pull-up resistor on sda and scl.
AndresQuesada 0:5285a0479338 4 All drivers on the I2C bus are required to be open collector, and
AndresQuesada 0:5285a0479338 5 so it is necessary for pull up resistors to be used on the two signals.
AndresQuesada 0:5285a0479338 6 A typical value for the pullup resistors is around 2.2k ohms,
AndresQuesada 0:5285a0479338 7 connected between the pin and 3v3. https://developer.mbed.org/handbook/I2C*/
AndresQuesada 0:5285a0479338 8 #include "mbed.h"
AndresQuesada 0:5285a0479338 9 #include "TextLCD.h"
AndresQuesada 0:5285a0479338 10 TextLCD lcd(p21, p22, p23, p24, p25, p26); // rs, e, d4, d5, d6, d7
AndresQuesada 0:5285a0479338 11 //------CONFIGURACION PINES DE TR/RE-----------------
AndresQuesada 0:5285a0479338 12 SPISlave ser_port(p5, p6, p7, p8); //mosi, miso, sclk, ssel el p8 al digout del master
AndresQuesada 0:5285a0479338 13 I2CSlave slave(p9, p10); //Configure I2C slave
AndresQuesada 0:5285a0479338 14 Serial async_port(p13, p14); //set up TX and RX on pins 28 and 27
AndresQuesada 0:5285a0479338 15 //-------CONFIGURACION LEDS--------------------------------
AndresQuesada 0:5285a0479338 16 DigitalOut red_led(p19); //red led
AndresQuesada 0:5285a0479338 17 DigitalOut green_led(p28); //green led OJO
AndresQuesada 0:5285a0479338 18 DigitalOut strobe(p11); //a strobe to trigger the scope
AndresQuesada 0:5285a0479338 19 DigitalOut cs(p12); //this acts as “slave select”
AndresQuesada 0:5285a0479338 20
AndresQuesada 0:5285a0479338 21
AndresQuesada 0:5285a0479338 22 //-------CONFIGURACION INTERRUPTORES
AndresQuesada 0:5285a0479338 23 DigitalIn pulsa15(p15);//palanca PARA 1 o 2
AndresQuesada 0:5285a0479338 24 InterruptIn buttonp16(p16);//palanca para modos de transmision i2c
AndresQuesada 0:5285a0479338 25 InterruptIn buttonp17(p17); //spi
AndresQuesada 0:5285a0479338 26 InterruptIn buttonp18(p18); //uart
AndresQuesada 0:5285a0479338 27 //-------CARACTERES DE INTERCAMBIO
AndresQuesada 0:5285a0479338 28 char switch_word ; //word we will send
AndresQuesada 0:5285a0479338 29 char recd_val; //value return from slave
AndresQuesada 0:5285a0479338 30 //---------VAARIABLE CONVERSION VOLTAJE
AndresQuesada 0:5285a0479338 31 float milivolts;
AndresQuesada 0:5285a0479338 32 //---------TIMER-------------------------
AndresQuesada 0:5285a0479338 33 Timer t2; // define Timer with name “t”
AndresQuesada 0:5285a0479338 34 //--------FUNCIONES------------------
AndresQuesada 0:5285a0479338 35 void comprueba(){
AndresQuesada 0:5285a0479338 36 red_led=0; //preset both to 0
AndresQuesada 0:5285a0479338 37 green_led=0;
AndresQuesada 0:5285a0479338 38 lcd.cls();//limpiamos el charco
AndresQuesada 0:5285a0479338 39 recd_val=recd_val & 0x03; //AND out unwanted bits
AndresQuesada 0:5285a0479338 40 if (recd_val==1)
AndresQuesada 0:5285a0479338 41 { red_led=1;
AndresQuesada 0:5285a0479338 42 lcd.printf("El valor es 1");
AndresQuesada 0:5285a0479338 43 wait(0.5);
AndresQuesada 0:5285a0479338 44 }//no debe de salir
AndresQuesada 0:5285a0479338 45 if (recd_val==2)
AndresQuesada 0:5285a0479338 46 { green_led=1;
AndresQuesada 0:5285a0479338 47 lcd.printf("El valor es 2");
AndresQuesada 0:5285a0479338 48 wait(0.5);}
AndresQuesada 0:5285a0479338 49 if (recd_val==3){
AndresQuesada 0:5285a0479338 50 red_led=1;
AndresQuesada 0:5285a0479338 51 green_led=1;
AndresQuesada 0:5285a0479338 52 lcd.printf("El valor es 3");
AndresQuesada 0:5285a0479338 53 wait(0.5);
AndresQuesada 0:5285a0479338 54 }
AndresQuesada 0:5285a0479338 55
AndresQuesada 0:5285a0479338 56 }
AndresQuesada 0:5285a0479338 57 void i2cpP(){
AndresQuesada 0:5285a0479338 58 lcd.printf("Prueba i2cp");
AndresQuesada 0:5285a0479338 59 wait(2);
AndresQuesada 0:5285a0479338 60 lcd.cls();
AndresQuesada 0:5285a0479338 61 while(1){
AndresQuesada 0:5285a0479338 62 slave.write(switch_word); //load up word to send
AndresQuesada 0:5285a0479338 63 //test for I2C, and act accordingly
AndresQuesada 0:5285a0479338 64 int i = slave.receive();
AndresQuesada 0:5285a0479338 65 if (i == 3)
AndresQuesada 0:5285a0479338 66 {
AndresQuesada 0:5285a0479338 67 //slave is addressed, Master will write
AndresQuesada 0:5285a0479338 68 lcd.printf("entra en if");
AndresQuesada 0:5285a0479338 69 wait(2);
AndresQuesada 0:5285a0479338 70 recd_val= slave.read();
AndresQuesada 0:5285a0479338 71 comprueba();
AndresQuesada 0:5285a0479338 72 }
AndresQuesada 0:5285a0479338 73 }
AndresQuesada 0:5285a0479338 74
AndresQuesada 0:5285a0479338 75 }
AndresQuesada 0:5285a0479338 76 void spiP(){
AndresQuesada 0:5285a0479338 77 lcd.printf("Prueba spi");
AndresQuesada 0:5285a0479338 78 wait(2);
AndresQuesada 0:5285a0479338 79 lcd.cls();
AndresQuesada 0:5285a0479338 80 t2.reset();// reseteamos el timer
AndresQuesada 0:5285a0479338 81 t2.start(); //start the timer
AndresQuesada 0:5285a0479338 82 while(t2.read()<10){
AndresQuesada 0:5285a0479338 83 if(ser_port.receive()){
AndresQuesada 0:5285a0479338 84 milivolts=ser_port.read();
AndresQuesada 0:5285a0479338 85 }
AndresQuesada 0:5285a0479338 86 lcd.printf("%1.2f",milivolts);
AndresQuesada 0:5285a0479338 87 wait(0.05);
AndresQuesada 0:5285a0479338 88 lcd.cls();
AndresQuesada 0:5285a0479338 89
AndresQuesada 0:5285a0479338 90 }
AndresQuesada 0:5285a0479338 91 /*
AndresQuesada 0:5285a0479338 92 while(1){
AndresQuesada 0:5285a0479338 93 if(ser_port.receive()) { //test if data transfer has occurred
AndresQuesada 0:5285a0479338 94 lcd.printf("entra en if");
AndresQuesada 0:5285a0479338 95 wait(2);
AndresQuesada 0:5285a0479338 96 recd_val = ser_port.read(); // Read byte from master
AndresQuesada 0:5285a0479338 97 ser_port.reply(switch_word); // Make this the next reply
AndresQuesada 0:5285a0479338 98 comprueba();
AndresQuesada 0:5285a0479338 99 }
AndresQuesada 0:5285a0479338 100 */
AndresQuesada 0:5285a0479338 101
AndresQuesada 0:5285a0479338 102
AndresQuesada 0:5285a0479338 103 }
AndresQuesada 0:5285a0479338 104 void uartP(){
AndresQuesada 0:5285a0479338 105 lcd.printf("Prueba uart");
AndresQuesada 0:5285a0479338 106 wait(2);
AndresQuesada 0:5285a0479338 107 lcd.cls();
AndresQuesada 0:5285a0479338 108 t2.reset();// reseteamos el timer
AndresQuesada 0:5285a0479338 109 t2.start(); //start the timer
AndresQuesada 0:5285a0479338 110 while(t2.read()<10){ // le damos 10 segundos de prueba
AndresQuesada 0:5285a0479338 111 strobe =1; //short strobe pulse
AndresQuesada 0:5285a0479338 112 wait_us(10);
AndresQuesada 0:5285a0479338 113 strobe=0;
AndresQuesada 0:5285a0479338 114 async_port.putc(switch_word); //transmit switch_word
AndresQuesada 0:5285a0479338 115 if (async_port.readable()==1) //is there a character to be read?
AndresQuesada 0:5285a0479338 116 {recd_val=async_port.getc(); //if yes, then read it
AndresQuesada 0:5285a0479338 117 lcd.printf("entra en if");
AndresQuesada 0:5285a0479338 118 wait(1);
AndresQuesada 0:5285a0479338 119 lcd.printf("%c \n\r",recd_val);
AndresQuesada 0:5285a0479338 120 wait(1);
AndresQuesada 0:5285a0479338 121 comprueba(); }
AndresQuesada 0:5285a0479338 122 lcd.printf("Postcomprueba");
AndresQuesada 0:5285a0479338 123 wait(1);
AndresQuesada 0:5285a0479338 124 lcd.cls();
AndresQuesada 0:5285a0479338 125
AndresQuesada 0:5285a0479338 126 }
AndresQuesada 0:5285a0479338 127 t2.stop();
AndresQuesada 0:5285a0479338 128 }
AndresQuesada 0:5285a0479338 129
AndresQuesada 0:5285a0479338 130 int main() {
AndresQuesada 0:5285a0479338 131 async_port.baud(9600);
AndresQuesada 0:5285a0479338 132 slave.address(0x52);
AndresQuesada 0:5285a0479338 133 while(1) {
AndresQuesada 0:5285a0479338 134 switch_word=0xa0; //set up a recognizable output pattern
AndresQuesada 0:5285a0479338 135 if (pulsa15==1)
AndresQuesada 0:5285a0479338 136 switch_word=switch_word | 0x01; //OR in lsb
AndresQuesada 0:5285a0479338 137 if (pulsa15==0)
AndresQuesada 0:5285a0479338 138 switch_word=switch_word | 0x02; //OR in next lsb
AndresQuesada 0:5285a0479338 139
AndresQuesada 0:5285a0479338 140 //preparados para acceder a los modos de comunicación
AndresQuesada 0:5285a0479338 141 buttonp16.rise(&i2cpP);
AndresQuesada 0:5285a0479338 142 buttonp17.rise(&spiP);
AndresQuesada 0:5285a0479338 143 buttonp18.rise(&uartP);
AndresQuesada 0:5285a0479338 144
AndresQuesada 0:5285a0479338 145 }
AndresQuesada 0:5285a0479338 146
AndresQuesada 0:5285a0479338 147
AndresQuesada 0:5285a0479338 148
AndresQuesada 0:5285a0479338 149
AndresQuesada 0:5285a0479338 150 }