Home >Class April 25 Assignment

Class April 25 Assignment

Networking and Communications

Made the 'bus' boards and compiled the code.

After that i found that RC-oscillator calibration was off again. The nodes received, but only a garbled responce was received.

I used my logic analyser to find the baud rate they were actually communicating at (10100 instead of 9600)

To fix this i changed the baud-rate in my serial-terminal program. After this i could successfully communicate with my boards.

While i was figuring out the actual communication speed, i noticed that the code was sending an extra byte (0x00) after 'node '

The source of this issue was located in the put_string method. This method checked if the last byte was '0x00' (termination of a string), but only after is was actually send. (see at +7ms below)

I updated this code as below.

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;
   while (1) {
      chr = pgm_read_byte(&(str[index]));
      if (chr==0) break;
      put_char(&serial_port, serial_pin_out, chr);
      ++index;
      }
   }

Now this code loops over the string's chars and only prints them if they are not '0x00' (see captured result below)

^Top