AD převod v C - offset pro hodnotu výsledku

Zdravím.
Používam v C(hi tech software)pic 16F877A výsledok AD prevodu na nastavenie timera:

void delay(void) { int a; a = read_a2d(0);//AD prevod pin "0" a = a >> 2; //z 1024 na 255bit DelayMs(a); }Potreboval by som poradiť fintu,aby pri výsledku AD prevodu “0” bolo v premennej"a" napr.50.A pri výsledku “255”(1024) opäť len oných “255”(1024)Ináč povedané,nejako "ofsetovať"hodnotu v premennej “a” tak,aby sa jej hodnota pohybovala od 50 do 255.
Pokiaľ možno lineárne.
Relatko.

:arrow_right: administrator: přejmenováno z "AD prevod v C"

Na co tam potřebuješ tak blbej offset? Nutí tě to tam tahat pokročilejší matiku která ti sežere hromadu výkonu, kterýho ten PIC stejně nemá na rozdávání…

A safra.Pokročilejšia matematika mi veľa nehovorí.Opýtam sa nejakého inžiniera. :smiley: Relatko

Tohle by měl zvládnout průměrný středoškolák :slight_smile:
( ( a * 205 ) >> 8 ) + 50

Som stredoškolák,ale to sme na 100% nebrali.Vďaka za pomoc.
Relatko.
Edit:Aká časť,resp.aký"odbor" matematiky sa zaoberá touto problematikou?

Napriklad sa toho hodne prebera v geometrii. Konkretne rovnica priamky, ktora je definovana dvoma bodmi. Ale to nie je stredoskolska zalezitost ale zalezitost zakladnej skoly. Kedze je to ina skola aku prave navstevujes, verim Ti, ze si to v tejto skole na 100% nepreberal (mozno si prave chybal) :slight_smile:

zakladna rovnica priamky v 2D priestore:

y = x*A + B

x je vstupna premenna a y je vystupna premenna.
B je hodnota y ak x sa rovna nule, v tvojom pripade 50

A = (y1 - B)/x1

kde x1 a y1 je Tebou definovana dvojica , napriklad [255, 255]

potom vyjde

B = 50
A = 205/255 = 0.8047

takze

y = 0.8047 * x + 50;

kedze sa ti nechce pocitat s realnymi cislami, potom sa snaz najst dve cele cisla tak aby ich podiel dal co najpresnejsie 205/255

No a kedze Ti mala chyba na urovni cca 1LSB vadit nebude, mozes vztah pre A upravit

A = 206/256

z toho vyplyva

y = 50 + x*206/256; // delenie 256 zrealizujes tak, ze ta z vysledku x * 206 bude zaujimat iba horny bajt. To je celkom sikovne delenie, preto to zavedenie tej malej chybicky na urovni 1LSB stoji za to :slight_smile:

Vysledok v podstate zodpoveda vztahu, ktory Ti napisal marzou. Ja som si dovolil trochu teorie. :slight_smile:

to Martin: ty ten výsledek máš přesnější, já jsem tam zapomněl zkorigovat konstantu, poté co jsem se rozhodl dělit číslem o jednotku větším :slight_smile:
Každopádně, pokud to chce někdo dělat seriźně, vždy je dobré si vypočítat odchylku pro každou hodnotu “a”, stačí třeba v Excelu, a pak při pohledu na graf odchylky můžeme usuzovat na další korekce …