Good day to all, Please i need your support on how to solve this problem.I am using the Trackbar to control the brightness of Leds but the value of the Trackbar I am getting in(%) does not corespond to the led's brightness.For example if i move the Trackbar slider to say 50%,the Oscilloscope will show something like 30%,if i move the slider further say to 80%,the Oscilloscope may show something like 50% or 60% or at times the PWM Signal will disappear.I have gone through my codes but i was unable to locate the error.My assumption is that the calculation and conversion i made contain error but i do not know how to figure it out.i will highly appreciate it if somebody could put me through on how to sort the problem .Below are my codes: C# CODE://this is code the Graphic User Interface uses in order to send data to the microcontroller Code: private void button3_Click(object sender, EventArgs e) { string dataToWrite = "a" ; UInt32 numBytesWritten = 1; myFtdiDevice.Write(dataToWrite, dataToWrite.Length, ref numBytesWritten); } private void button4_Click(object sender, EventArgs e) { string dataToWrite = "b"; UInt32 numBytesWritten = 1; myFtdiDevice.Write(dataToWrite, dataToWrite.Length, ref numBytesWritten); } private void trackBar1_Scroll(object sender, EventArgs e) { UInt32 numBytesWritten = 1; int percent = (int)(((double)trackBar1.Value / (double)trackBar1.Maximum) * 100); label2.Text = (percent.ToString()) + "%"; if(percent <= 9)//this IF condition send string from "0" to "9" { chdata[0] = "1"; myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten); chdata[0] = Convert.ToString(percent); myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten); } else //this ELSE condition sends string from "10" to "99" { chdata[0] = "2"; // The "2" here represents the length of the string being sent myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten); dgdata[0] = percent/ 10; chdata[0] = Convert.ToString(dgdata[0]); myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten); dgdata[1] = percent % 10; chdata[0] = Convert.ToString(dgdata[1]); myFtdiDevice.Write(chdata[0], chdata[0].Length, ref numBytesWritten); } } C-CODE SECTION://This code is used by the microcontroller to process the data it receives from the Graphic User Interface. Code: int wait_command(void) { unsigned char InData; unsigned char InBuffer[50]; unsigned int length; unsigned int trackvalue=0; unsigned short pwr_led1=655; int i; int length; InData = USART_Receive(); if(InData =='a' || InData =='b' ) { InBuffer[0]= InData; } else if(InData >='0' || InData <= '9' ) { length = InData - '0';//lenght variable here is used to get the actual value sent from GUI.Lenght is 1 for string from "9" to "9" while it is 2 for string from "10" t "99" for (i = 0; i<length; i++) { trackvalue *=10; trackvalue += USART_Receive()- '0'; pwr_led1= 655 * trackvalue; _delay_ms(200); } } else { // do nothing } switch(InBuffer[0]) { case 'a': if (led1_on == 1) led1_on=0; else led1_on=1; break; case 'b': if (led2_on == 1) led2_on=0; else led2_on=1; break; default: break; } // switch SetRegister(pwr_led1*spur1_on,pwr_led2*spur2_on); GenerateLatch(); } I would be very glad if somebody could guide me on how to solve this problem.Thank you all for the usual support. Best regards. Firstoption.