Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. Maki Young
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Maki Young

    Banned

    0
    Reputation
    1
    Posts
    228
    Profile views
    1
    Followers
    0
    Following
    Joined Last Online

    Maki Young Follow

    Best posts made by Maki Young

    This user hasn't posted anything yet.

    Latest posts made by Maki Young

    • Convert DS18B20 temperature to string

      I want to convert DS18B20( [link removed by moderator]: )
      temperature (4-bytes code from datasheet) to string with accuracy 0.1°C (like sprintf %.1f). AVR. C language (avr-gcc). I need for small code, so sprintf, floating-point types and round from math.h is bad idea. My following current code is bad also:

      void reverse_string(char *s)
      {
      char *p, c;

      for (p = s + strlen(s) - 1; s <= p; ++s, --p) {
          c = *p;
          *p = *s;
          *s = c;
      }
      

      }

      void ts_to_string(uint16_t ts, char *s)
      {
      int8_t n = (int8_t)(ts >> 4);
      uint8_t neg = n & 0x80;
      char *p = s;
      float f;

      if (neg)
          n = -n-1;
      do {
          *p++ = n % 10 + '0';
      } while ((n /= 10) > 0);
      
      if (neg)
          *p++ = '-';
      
      *p = '\0';
      reverse_string(s);
      *p++ = '.';
      
      f = (float)(ts & 0xf) / 16.0;
      if (neg)
          f = 1.0-f;
      *p++ = (char)round(f * 10.0) + '0';
      *p = '\0';
      posted in Hardware
      Maki Young
      Maki Young