Welcome to my week 14

Networking And Communications

Learning Outcomes:

  • Learnt serial bus.
  • Learnt how to Interfacing
  • Learnt programming my board.

    Brief

    Data communications refers to the transmission of this digital data between two or more computers and a computer network or data network is a telecommunications network that allows computers to exchange data. The physical connection between networked computing devices is established using either cable media or wireless media. The best-known computer network is the Internet.

    Getting started with Networking And Communications

    My Assignment:-

    In this week literly I dont know what to interface in the board so I got help from youtube and then I started understanding and then.

    so I started making re design of board and node.

    Steps :

    i have designed this bridge and node on eagle

    There are two boards, (one node) and (one bridge). The only difference is that the bridge board has FTDI pin headers connected on the bus to allow the computer to communicate with the boards. So when the boards receive a special character that matches its identifier it toggles the led and send to the computer its name. this can be generalized to be a talking system between the boards, which means when one board calls another board, that board only responds and the other don't which will be useful in many ways , that's the importance of making addressing in the code.

    I printed the boards and the programed them.

    Bridge

    Node

    NodeThe used code

    In the first trial I used Neil's Code

    Code
    	
    //
    // hello.bus.45.c
    //
    // 9600 baud serial bus hello-world
    //
    // Neil Gershenfeld
    // 11/24/10
    //
    // (c) Massachusetts Institute of Technology 2010
    // Permission granted for experimental and personal use;
    // license for commercial sale available from MIT.
    //
    
    #include 
    #include 
    #include 
    #include 
    
    #define output(directions,pin) (directions |= pin) // set port direction for output
    #define input(directions,pin) (directions &= (~pin)) // set port direction for input
    #define set(port,pin) (port |= pin) // set port pin
    #define clear(port,pin) (port &= (~pin)) // clear port pin
    #define pin_test(pins,pin) (pins & pin) // test for port pin
    #define bit_test(byte,bit) (byte & (1 << bit)) // test for bit set
    #define bit_delay_time 100 // bit delay for 9600 with overhead
    #define bit_delay() _delay_us(bit_delay_time) // RS232 bit delay
    #define half_bit_delay() _delay_us(bit_delay_time/2) // RS232 half bit delay
    #define led_delay() _delay_ms(100) // LED flash delay
    
    #define led_port PORTB
    #define led_direction DDRB
    #define led_pin (1 << PB0)
    
    #define serial_port PORTB
    #define serial_direction DDRB
    #define serial_pins PINB
    #define serial_pin_in (1 << PB3)
    #define serial_pin_out (1 << PB4)
    
    #define node_id '0'
    
    void get_char(volatile unsigned char *pins, unsigned char pin, char *rxbyte) {
       //
       // read character into rxbyte on pins pin
       //    assumes line driver (inverts bits)
       //
       *rxbyte = 0;
       while (pin_test(*pins,pin))
          //
          // wait for start bit
          //
          ;
       //
       // delay to middle of first data bit
       //
       half_bit_delay();
       bit_delay();
       //
       // unrolled loop to read data bits
       //
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 0);
       else
          *rxbyte |= (0 << 0);
       bit_delay();
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 1);
       else
          *rxbyte |= (0 << 1);
       bit_delay();
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 2);
       else
          *rxbyte |= (0 << 2);
       bit_delay();
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 3);
       else
          *rxbyte |= (0 << 3);
       bit_delay();
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 4);
       else
          *rxbyte |= (0 << 4);
       bit_delay();
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 5);
       else
          *rxbyte |= (0 << 5);
       bit_delay();
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 6);
       else
          *rxbyte |= (0 << 6);
       bit_delay();
       if pin_test(*pins,pin)
          *rxbyte |= (1 << 7);
       else
          *rxbyte |= (0 << 7);
       //
       // wait for stop bit
       //
       bit_delay();
       half_bit_delay();
       }
    
    void put_char(volatile unsigned char *port, unsigned char pin, char txchar) {
       //
       // send character in txchar on port pin
       //    assumes line driver (inverts bits)
       //
       // start bit
       //
       clear(*port,pin);
       bit_delay();
       //
       // unrolled loop to write data bits
       //
       if bit_test(txchar,0)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       if bit_test(txchar,1)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       if bit_test(txchar,2)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       if bit_test(txchar,3)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       if bit_test(txchar,4)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       if bit_test(txchar,5)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       if bit_test(txchar,6)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       if bit_test(txchar,7)
          set(*port,pin);
       else
          clear(*port,pin);
       bit_delay();
       //
       // stop bit
       //
       set(*port,pin);
       bit_delay();
       //
       // char delay
       //
       bit_delay();
       }
    
    void put_string(volatile unsigned char *port, unsigned char pin, PGM_P str) {
       //
       // send character in txchar on port pin
       //    assumes line driver (inverts bits)
       //
       static char chr;
       static int index;
       index = 0;
       do {
          chr = pgm_read_byte(&(str[index]));
          put_char(&serial_port, serial_pin_out, chr);
          ++index;
          } while (chr != 0);
       }
    
    void flash() {
       //
       // LED flash delay
       //
       clear(led_port, led_pin);
       led_delay();
       set(led_port, led_pin);
       }
    
    int main(void) {
       //
       // main
       //
       static char chr;
       //
       // set clock divider to /1
       //
       CLKPR = (1 << CLKPCE);
       CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0);
       //
       // initialize output pins
       //
       set(serial_port, serial_pin_out);
       input(serial_direction, serial_pin_out);
       set(led_port, led_pin);
       output(led_direction, led_pin);
       //
       // main loop
       //
       while (1) {
          get_char(&serial_pins, serial_pin_in, &chr);
          flash();
          if (chr == node_id) {
             output(serial_direction, serial_pin_out);
             static const char message[] PROGMEM = "node ";
             put_string(&serial_port, serial_pin_out, (PGM_P) message);
             put_char(&serial_port, serial_pin_out, chr);
             put_char(&serial_port, serial_pin_out, 10); // new line
             led_delay();
             flash();
             input(serial_direction, serial_pin_out);
             }
          }
       }
    	
    
    >

    I uploaded the code to the boards using the fab ISP using Arduino IDE as shown in the picture.

    Video in this video you will see the 2 boards are working that when I press '0' the first board (the bridge) flashes twice and the other flash only once the other do the same when their id is called

    I have given additional power supply from arduino

    Download files

    Conclusion

    By the same way you can connect many microcontrollers (each one has its on address) together and make them communicate easily and they may be distant and communicate by bluetooth or wi-fi and do different functions which enables us of more great ideas.