Go Down

Topic: BCD conversion (Read 1 time) previous topic - next topic

JohnSan

Looking to convert a 'long to bcd' to drive 5 led displays.
(HP5082 -7302)

Is there a function in a library somewhere to do this, or will it have to be done from scratch.

I know things have moved on since these were about, but would just like to use them....

TIA.
I'll be glad when I've had enough!

mkwired

I'm sure there's a more efficient way to code this.

Code: [Select]

void BCD (unsigned long b, char* o)
{
   for (int i=10; i; --i)
   {
      *o = b % 10;
      b /= 10;
      o++;
   }
}

PeterH


I'm sure there's a more efficient way to code this.

Code: [Select]

void BCD (unsigned long b, char* o)
{
   for (int i=10; i; --i)
   {
      *o = b % 10;
      b /= 10;
      o++;
   }
}



Shouldn't you be packing two digits per byte (one nibble per digit) if you're outputting BCD?
I only provide help via the forum - please do not contact me for private consultancy.

mkwired



I'm sure there's a more efficient way to code this.

Code: [Select]

void BCD (unsigned long b, char* o)
{
   for (int i=10; i; --i)
   {
      *o = b % 10;
      b /= 10;
      o++;
   }
}



Shouldn't you be packing two digits per byte (one nibble per digit) if you're outputting BCD?


You're probably right, but his wasn't clear what he wanted.

GoForSmoke

And probably should use byte (which is unsigned) instead of char (which is signed).
I find it harder to express logic in English than in Code.
Sometimes an example says more than many times as many words.

mkwired

I thought about that but the stored values are small enough that it doesn't really matter.

robtillaart


the basic BCD packaging:

Code: [Select]
uint8_t dec2bcd(uint8_tdec)
{
  return (dec/10)*16 + (dec%10);
}

uint8_t bcd2dec(uint8_t bcd)
{
  return (bcd/16) * 10 + bcd%16;
}


For longer numbers one need a BCD array
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

JohnSan

Thanks for the info.
The 'data' to be displayed presently, is just a counter.
The solutions are somewhat more simple than i'd anticipated.

Which is great news!

I've found the displays are actually HP5082 -7340
- which means, I can display the number in Decimal or Hex :)
Of course in Hex, I won't need to use the conversion.
I'll be glad when I've had enough!

Go Up