Tema: AVR GCC, kaip daryti geriau ir teisingiau
Autorius: Levas
Data: 2017-02-20 22:46:07
nuskaityta ADC reiksme turi buti perskaiciuojama i diskrecius elementus. 
(jei idomu, formule y=10^(x/20) )
Taciau visur reiksmiu nereikia, reikia tik 25 specifiniu reiksmiu. Kaip 
toki veiksma darytu protingieji? Kad veiktu greitai, teisingai ir nedaug 
baitu. Mano du variantai skiriasi tik 10 baitu ilgiu. Aisku greiciu 
turetu skirtis stipriai:

/*
unsigned char v_vu(unsigned int a)
{
unsigned char i=0;
if(a>49) i++;  // -20
if(a>61) i++;  // -18
if(a>73) i++;  // -16.5
if(a>87) i++;  // -15
if(a>109) i++; // -13
if(a>123) i++; // -12
if(a>174) i++; // -9
if(a>195) i++; // -8
if(a>246) i++; // -6
if(a>276) i++; // -5
if(a>292) i++; // -4.5
if(a>309) i++; // -4
if(a>368) i++; // -2.5
if(a>390) i++; // -2
if(a>413) i++; // -1.5
if(a>453) i++; // -0.7
if(a>491) i++; // 0
if(a>520) i++; // +0.5
if(a>551) i++; // +1
if(a>581) i++; // +1.5
if(a>618) i++; // +2
if(a>655) i++; // +2.5
if(a>778) i++; // +4
if(a>980) i++; // +6
if(a>1020) i++; //OVER
return i;
}
*/
unsigned char v_vu(unsigned int a)
{
if(a>1020) return 25; //OVER
if(a>980) return 24; // +6
if(a>778) return 23; // +4
if(a>655) return 22; // +2.5
if(a>618) return 21; // +2
if(a>581) return 20; // +1.5
if(a>551) return 19; // +1
if(a>520) return 18; // +0.5
if(a>491) return 17; // 0
if(a>453) return 16; // -0.7
if(a>413) return 15; // -1.5
if(a>390) return 14; // -2
if(a>368) return 13; // -2.5
if(a>309) return 12; // -4
if(a>292) return 11; // -4.5
if(a>276) return 10; // -5
if(a>246) return 9; // -6
if(a>195) return 8; // -8
if(a>174) return 7; // -9
if(a>123) return 6; // -12
if(a>109) return 5; // -13
if(a>87) return 4;  // -15
if(a>73) return 3;  // -16.5
if(a>61) return 2;  // -18
if(a>49) return 1;  // -20

return 0;
}



-- 
Bye, Levas

--
http://www.vabolis.lt