Analog indgang
En analog indgang på en mikrocontroller er lavet for at kunne registrere og arbejde med analoge værdier i mikrocontrollerens program, selvom den i naturen er digital.
AD-konvertering
For at en mikrocontroller kan arbejde med analoge værdier skal der ske en analog til digital konvertering (#AD-konvertering), der konverterer den analoge indgangsspænding til en digital værdi med en eller anden opløsning.
Man kan i princippet arbejde med en ekstern AD-konverter som en Mcp3201 eller en Mcp3208, der begge er 12 bits AD-konvertere som altså giver tal fra 0 til 4095 over det analoge referenceområde som er angivet ved en analog reference.
I dag har mange mikrocontrollere indbyggede AD-konvertere som typisk har 10 bit opløsning, hvilket give et talområde fra 0 til 1023. Se mere om #Bit-opløsningsens betydning.
På engelsk betegnes AD-konvertering ADC.
Hvis de spændinger man skal måle på, er højere end hvad AD-konverteren kan håndtere, man man anvende en Spændingsdeler der neddeler spændingen.
Hvis de spændinger man skal måle på er meget små, kan man vælge at forstærke signalet op inden det AD-konverteres. Det kan f.eks. ske med en Mikrofonforstærker.
Bit-opløsningens betydning
En AD-konverter arbejder i f.eks. 10 bit. Det betyder, at der er 10 bit til rådighed til at repræsentere den spænding der bliver målt. Med 10 bit kan vi repræsentere værdier eller step.
Hvis spændingen som AD-konverteren måler er 0 V, konverteres dette til en heltalsværdi på 0 (step 0). Hvis spændingen som AD-konverteren måler er 5 V (dvs. den maksimale spænding som AD-konverteren i en Arduino kan måle), giver det en værdi på 1023 (step 1023). Der er altså 1024 steps til at repræsentere spændingerne mellem 0 V og 5 V.
Man kan beregne hvor stor en spænding hvert step dækker over:
Hvis AD-konverteren giver heltallet 688 som output (dvs. step 688), kan man beregne, hvor stor en spænding der var på det analoge input:
Arduino Analoge indgange
I arduinoen er det ganske enkelt at anvende analoge indgange[1], da man kan gøre det med en enkelt kommando:
int ADtal;
ADtal = analogRead(kanal);
Her er ADtal blot en variabel der gemmer det tal fra 0 til 1023 som den analoge indgangs AD-konverter svarer med, når analogRead() kaldes.
Parameteren kanal angiver hvilken analog indgang man vil læse, og er på arduino UNO blot et tal fra 0 til 5, hvilket svarer til A0 - A5 som det er angivet ved stikforbindelserne på boardet.
Arduino UNO rev. 3 med analoge indgange A0 til A5
Eksempler på anvendelser er angivet i Arduino Serial og Arduino AnalogInput.
PIC Analoge indgange
Det er ikke alle de PIC-typer vi har ved Holstebro HTX der har AD-konvertere indbygget, men følgende typer har, og anvender til AD-konvertering det angivne bibliotek
PIC-type | Bibliotek |
---|---|
PIC12F675 | ADC_holst |
PIC16F684 | ADC_holst |
PIC16F690 | ADC_holst |
PIC16F877 | ADC |
Referencer
PIC | |
---|---|
PIC-Typer | PIC16F84 - PIC12F675 - PIC16F628 - PIC16F684 - PIC16F690 - PIC16F877 - PIC18F2550 |
Programmeringsbegreber | Maskinkode - Mikrocontroller |
Programmeringsmiljø | PIC-brænder - UsbPicProg - Analog indgang - ICSP |