12 Replies Latest reply on Jul 19, 2012 6:18 AM by DaKn_263916

    24 bits a 8 bits



      I made a SPI communication between PSoC5 and a microconversor, the goal of my project is to display microconversor data on a PC . The problem with this is that the microconversor is 24-bit resolution and to send them to the PC I need to convert that data to a size 8-bit. 


      Does anyone know how to do this in PSoC Creator 2.0 ?...





        • 1. Re: 24 bits a 8 bits

          double dataunk = 0;




          lowbyte = dataunk & 0x0000FF;


          midbyte = ( dataunk >> 8 ) & 0x0000FF;


          highbyte = ( dataunk >> 16 ) & 0x0000FF;                      // & probably not needed, but to be safe.




          The above could be done with an array and a for loop, I was just lazy.




          You would reverse on receive side.




          Or send as an ascii string, using sprintf() to convert to string, and convert back on PC side if you need


          to use it as a numeric. If only to display just print it on PC side.




          Regards, Dana.

          • 2. Re: 24 bits a 8 bits

            Or using the "union" statement


            union TwentyFourToEightbit {


               BYTE EightBit[3];


               uint24 TwentyFour;


            } MyUnion;




               MyUnion.TwentyFour = 0x112233;


               if (MyUnion.EightBit[0] != 0x11) Help();





            • 3. Re: 24 bits a 8 bits

               for dana:


              "double dataunk = 0;"


              Is this double a double precision float type?




              For Bob


              it should be careful that the byte arrangement inide the union would be different with BIG or LITTLE Endian.

              • 4. Re: 24 bits a 8 bits

                Interesting results -




                //                                                                                         HiTech                   Imagcraft
                //union TwentyFourToEightbit {                              // 385 ROM, 0 RAM     500 ROM, 2 RAM  
                //  unsigned char EightBit[3];
                //    unsigned long TwentyFour;
                //} MyUnion;
                //MyUnion.TwentyFour = 0x00112233;


                //unsigned long dataunk = 0;                                  // 395 ROM, 0 RAM,    583 ROM, 4 RAM
                //unsigned char lowbyte, midbyte, highbyte;
                //lowbyte = dataunk & 0x000000FF;
                //midbyte = ( dataunk >> 8 ) & 0x000000FF;
                //highbyte = ( dataunk >> 16 ) & 0x000000FF;


                //unsigned long yourval = 0x00112233;                // 399 ROM, 0 RAM     600 ROM, 4 RAM
                //unsigned char dataunk[3], i;
                //for(i = 0; i < 2; dataunk[i] = yourval & 0x000000FF, yourval = yourval >> 8, i++ );




                Regards, Dana.

                • 5. Re: 24 bits a 8 bits

                  You can sratch some more bytes when you use >>= and i++ within the index, but that's only marginal. The main point is, that a complete empty project without any code uses exactly 500 bytes for the boot, so the union-method uses the densest code. Give it a try and access the unit-members and check the code needed.





                  • 6. Re: 24 bits a 8 bits

                    Empty Project


                    Imagcraft 479 bytes ROM,    2 Bytes RAM


                    HiTech    382 bytes ROM,    0 Bytes RAM




                    Of course this test over simplifies because I did not examine, in detail, what is and is


                    not being done in boot between the two compilers.






                    Regards, Dana.

                    • 7. Re: 24 bits a 8 bits

                      And as you may see from my last post the Designer 5.2 with latest boot.asm uses 500 bytes when there are no lines in main.c. So I presume you are using an earlier version. Or I have to check my optimization settings...





                      • 8. Re: 24 bits a 8 bits

                         I have the Hi-tech pro version and it does provide smaller code. Too bad we can not have support from Hi-tech anymore. :-(

                        • 9. Re: 24 bits a 8 bits

                          My current config of Designer -




                          Imagecraft Compiler Standard V7.05
                          PSoC Designer Content 5.2 (SP1) - Build 2551 - 02-March-2012.09:00:45
                          PSoC Designer Core 5.2 (SP1) - Build 2551 - 02-March-2012.09:00:45
                          PSoC Designer Documentation 5.2 (SP1) - Build 2551 - 07-March-2012.12:36:48




                          HiTech V9.61PL2




                          Regards, Dana.

                          • 10. Re: 24 bits a 8 bits

                            Configuration -




                            Regards, Dana.

                            • 11. Re: 24 bits a 8 bits

                              Hi guys,


                              totally appreciate your inputs (really do!) about Designer and the associated compilers. More people using these compilers would actually read it if it were in the Designer forum ;-)


                              Cheers, Robert

                              • 12. Re: 24 bits a 8 bits

                                Yes, Robert, you are right, but when the thread was started we did not know where it would lead to. Startinig a second thread to display our results would have been of no use to clarify the topic. What exactly could we have done better? (within the limits of this forum-software)





                                • 13. Re: 24 bits a 8 bits

                                  @Robert-CY, I actually felt the performance measures I was posting were very


                                  old news, re HiTech vs Imagcraft.




                                  I made comments a long time ago in Designer tool on psocdeveloper.com about


                                  the still significant code density HiTech yields. This becuse I have a project right


                                  up against FLASH size limits.




                                  Stay cool, because here it is hoter than Hades :)




                                  Regards, Dana.