Andrés Quesada
/
Esclavo
main.cpp@0:5285a0479338, 2017-03-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |