Hello i am trying to build a simple DMA program to read ADC values and its working but not completely
the problem is here: at first this code is working 1.
u[0]=((float)ADC_Data[0])*3; sprintf(str,"%.2fv ",u[0]); LCD_SetPos(0,0); LCD_String(str);
when changed to : or even divide by 1 its not working any more and the LCD is too slow
u[0]=((float)ADC_Data[0])*3/4096; sprintf(str,"%.2fv ",u[0]); LCD_SetPos(0,0); LCD_String(str);
2. the debugger is updating the correct u[0] in this code without a problem:
but in this code not !!! why even when i put the 3 lines to comments its must not affect the u[0] value
u[0]=((float)ADC_Data[0])*3; // sprintf(str,"%.2fv ",u[0]); // LCD_SetPos(0,0); // LCD_String(str);
please please i spend hours ... hours without any success please help why the division is not working and the bug in updating u[0] value i tryied to use volatile variable double or others but always when i use division the code runs very slow
the full code is generated with Cubemx.
www.mediafire.com/.../file
volatile uint16_t ADC_Data[3]; // Changed by DMA, not normal code flow, must be volatile double d[3]; // sprintf works on doubles char str[32]; // plenty of space .. d[0]=(double)ADC_Data[0]) * (3.0 / 4096.0); // use floating point sprintf(str,"%.2lfv ",d[0]); LCD_SetPos(0,0); LCD_String(str);
Can't edit, extra bracket removed..
d[0]=(double)ADC_Data[0] * (3.0 / 4096.0); // use floating point
Hello thank you thank you very much for the help the code is working now the problem was only the .0 after the number i have change float to double and mcu runs very very slow but with float its running normal puting the variable as volatile or changeing the string size didn't affect the speed ? i am now satisfied with program with float but why not working with double ! in the futur i may face this problem again so please can you help me how to fix it there are tow files the first runs perfect and the second runs the lcd very slow thanks
www.mediafire.com/.../file www.mediafire.com/.../file
Define SLOW, you have this grinding in a tight loop, the LCD is likely to flicker/tear. Put a HAL_Delay(1000); in the loop
No behaviour here I can actually see.
Don't have your hardware, don't have a buildable project. No idea of the clocking or connectivity.
Hello and thanks for replay what i meant by slow : when using float lcd scans is very fast and not noticable and the lcd flickers from speed regardldess of halt delay .. i removed halt delay because the scanning was very slow anyway i was working with this LCD library and it works for sure with no problem but using double makes every letter when scaning needs about 300ms that means for the whole scan of line it needs 1 to 2 seconds !! only changing the float to double makes this happens. the same problem was when i didn't use .0 after the float number anyway this is the whole project with cubemx and Keil project thanks in advance www.mediafire.com/.../file
please see the videos how the run with float and double
https://youtu.be/KyVJ0R99AL0
https://youtu.be/06e2t2754nM
View all questions in Keil forum