I'm trying to control velocity in a motor via writing register value in microcontroller.
unsigned long PrintHex32( uint32_t data) // prints 32-bit data in hex with leading zeroes
{
uint32_t data2 = data << 8;
char tmp[16];
uint16_t LSB = data2 & 0xffff;
uint16_t MSB = data2 >> 16;
unsigned long ppsval2 = sprintf(tmp, "0x%.4X%.4X%", MSB, LSB);
Serial.println(tmp);
Serial.println("***************");
return tmp;
}
void NoRamp() {
Serial.println("No Ramp");
unsigned long ppsVal = (VMAX * FS * uS);
unsigned long ppsVal3 = PrintHex32(ppsVal);
Serial.println(ppsVal);
Serial.println(ppsVal3);
Serial.println("$$$$$$");
//********* NO Ramp **********////////
sendData(0xA0, 0x00000000); //RAMP Mode
// sendData(0xA4, 0x03E80000); //VMAX-5rps/5hz
// sendData(0xA4, 0x00c80000);
sendData(0xA4, ppsVal3); //VMAX-1rps/1hz
}
at the end i need to be send data format after hex conversion sendData(0xA4, 0x00c80000)
but currently, I'm getting my print output:
No Ramp
0x00C80000
***************
51200
0
$$$$$$
umm where do I making the mistake? Can anyone kindly slam my head a bit please! Thanks heaps!!
PS: also senddata method take below argument if anyone needs to know!
unsigned long sendData(unsigned long address, unsigned long datagram)
Edit: I think I can understand the proper question to ask?
unsigned long PrintHex32( uint32_t data) // prints 32-bit data in hex with leading zeroes
{
uint32_t data2 = data << 8;
//char tmp[16];
uint16_t LSB = data2 & 0xffff;
uint16_t MSB = data2 >> 16;
unsigned long val = xxxx(uint16_t LSB) + uint16_t MSB(YYY);
//sprintf(tmp, "0x%.4X%.4X%", MSB, LSB);
return val ;
}
if you can see im converting my input data2 to hex using uint16_t LSB and uint16_t MSB. how do i save that two value as one single unsigned long val . then I can return the that varible. I think using sprintf method is wrong as it does show just char representation? please kindly correct me this if im wrong?
The xxxx in the edit should probably be 2^16 aka 65536:
#include <cassert>
using namespace std;
int main(int argc, char * argv[]) {
unsigned int data2 = 12345678;
uint16_t LSB = data2 & 0xffff;
uint16_t MSB = data2 >> 16;
unsigned long val = (1<<16) * MSB + LSB;
unsigned long val2 = 65536 * MSB + LSB;
assert(val == data2);
assert(val2 == data2);
}
User contributions licensed under CC BY-SA 3.0