05 oktober 2015

Achtergrond: resolutie of oplossend vermogen.

Resolutie van A/D converter

In de eerste entry over analoge invoer werd in het programma het volgende commentaar gemaakt:
; LDR is documented to read values between 120 and 70; mine works with 190/140. ; of course, 127 should be the tripping point
Hoezo, moet het tripping point "natuurlijk 127 zijn"?
Dat heeft alles te maken met het gebruikte commando. In het programma werd de volgende opdracht gebruikt:
readadc LDR,b0 ; read ADC1 into variable b0
In de documentatie (handboek 2, sectie 2, pagina 170) wordt al gemeld, dat readadc een 8 bits nauwkeurige waarde aflevert in een variabele. Dat deze variabele ook nog eens als BYTE (b0-b27) gedefinieerd is, zegt genoeg. Meer dan 256 mogelijkheden (2 tot de achtste) zijn er niet.


Dat is niet genoeg!

De configuratie van het experimenteerbord is zodanig van opzet, dat de maximale waarde, die door de ADC ingelezen kan worden, gelijkstaat aan de voedingsspanning (zeg: 5 Volt). Dat betekent een resolutie van 5/256 = 0,01953 Volt.
Maar het kan beter! In de PICAXE-08M2 is namelijk een 10 bits ADC aanwezig. Het commando, dat gebruikt oet worden is dan:
readadc10 LDR,w0 ; read ADC1 into variable w0
De gelezen waarde wordt opgeslagen in een WORD type variabele van 16 bits; de waarde kan dan tussen 0 en 65536 liggen, een betekent dan een resolutie van 0,0000763 Volt (afgerond).


Meer van dat

Er zijn meer commando's, die een "hi-res" broertje hebben:
readdac - readdac10 readtemp - readtemp12 ; readtemp = readtemp12, omgezet naar hele graden Celcius. touch - touch16 ; touch = touch16, omgezet naar 8 bits

2 opmerkingen :

  1. snap nog steeds niet hoe je op 277 komt?

    BeantwoordenVerwijderen
    Reacties
    1. Dat moet 127 zijn, geen 277. En 127 is de helft van 255 (sort of.) En 255 is de range, die de ADC teruggeeft, want het is een 8-bits ADC. Dus daarmee kun je van 0 (0000.0000) tot en met 1111.1111 terug krijgen als waarde. In hexadecimaal ("standaard" computer tellen) is dat 0 tot en met FF; de notitiewijze is 0xFF, om duidelijk te maken dat het om heXadecimale nottie gaat.
      Decimaal omgerekend is dat 0 t/m 255.

      De fout zit overigens in de *aanname* dat de LDR in deze schakeling bij de belichting in mijn studeerkamer de halve weerstandswaarde zou hebben. Dat is natuurlijk niet gezegd.

      Verwijderen