Girino - snabb Arduino oscilloskop (10 / 26 steg)
Steg 10: Konfigurera ADC
void initADC(void)
{
//---------------------------------------------------------------------
ADMUX inställningar
//---------------------------------------------------------------------
Dessa bitar Välj spänning referensen för att ADC. Om dessa bitar
ändras under en konvertering, förändringen kommer inte att gå i kraft
tills konverteringen är klar (ADIF i ADCSRA är inställd). Den
inre spänning referens alternativ kan inte användas om en extern
referensspänningen som används till AREF stift.
REFS1 REFS0 spänning referens
0 0 AREF, inre Vref avstängd
0 1 AVCC med extern kondensator på AREF pin
1 0 reserverade
1 1 inre 1.1v spänning referens med externa
kondensator på AREF pin
CBI(ADMUX,REFS1);
SBI(ADMUX,REFS0);
ADLAR lite påverkar presentationen av ADC konvertering resultatet
i ADC Data registret. Skriva en till ADLAR vänster justera den
resultatet. Annars kan justeras resultatet rätt. Ändra de ADLAR
bit kommer att påverka ADC Data registrera omedelbart, oberoende av någon
pågående omvandlingar.
SBI(ADMUX,ADLAR);
Värdet av dessa bitar väljer vilka analoga ingångar är anslutna till
ADC. Om dessa bitar ändras under en konvertering, förändringen
kommer inte att gå i kraft tills konverteringen är klar (ADIF i
ADCSRA är inställd).
ADMUX | = (ADCPIN & 0x07);
//---------------------------------------------------------------------
ADCSRA inställningar
//---------------------------------------------------------------------
Skriva denna bit till en möjliggör ADC. Genom att skriva det till noll, det
ADC är avstängd. Stänga ADC av medan en omvandling är i
framsteg, kommer att avsluta denna omvandling.
CBI(ADCSRA,ADEN);
I enda konvertering läge, skriva här lite till en för att starta varje
omvandling. I Free Running-läge, skriv här lite till en för att starta den
första konvertering. Den första konverteringen efter ADSC har skrivits
efter ADC har aktiverats, eller om ADSC är skriven på samma
tid att som ADC är aktiverad, ta 25 ADC klockcykler i stället för
den normala 13. Denna första konvertering utför initieringen av den
ADC. ADSC kommer att läsa som en så länge en konvertering pågår.
När konverteringen är klar, returneras noll. Skriver noll till
detta stycke har ingen effekt.
CBI(ADCSRA,ADSC);
När denna bit är skriven till en är automatisk utlösning av ADC
aktiverad. ADC startar en omvandling på en positiv kanten av den
valda utlösa signalen. Den utlösande källan markeras genom att ange
ADC Trigger Välj bitar, ADTS i ADCSRB.
SBI(ADCSRA,ADATE);
När denna bit är skriven till en och jag-bit i SREG ställs in, den
ADC konvertering komplett avbryta aktiveras.
SBI(ADCSRA,Adie);
Dessa bitar Bestäm division faktorn mellan systemklockan
frekvens och input klockan för att ADC.
ADPS2 ADPS1 ADPS0 Division faktor
0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
SBI(ADCSRA,ADPS2);
SBI(ADCSRA,ADPS1);
SBI(ADCSRA,ADPS0);
//---------------------------------------------------------------------
ADCSRB inställningar
//---------------------------------------------------------------------
När denna bit skrivs logik en och ADC är avstängd
(ADEN i ADCSRA är noll), ADC multiplexer väljer negativa
ingång till den analoga motsvarigheten. När denna bit skrivs logik noll,
AIN1 används till negativa ingången på den analoga motsvarigheten.
CBI(ADCSRB,Acme);
Om ADATE i ADCSRA skrivs till en, värdet av dessa bitar
väljer vilken källa kommer att utlösa en ADC konvertering. Om ADATE är
avmarkerad har ADTS2:0 inställningarna ingen effekt. En konvertering kommer att
utlösas av den valda avbryta flaggans. Obs
att byta från en utlösare källa som rensas till en utlösare
källa som är inställd, kommer att generera en positiv kant på avtryckaren
signal. Om ADEN i ADCSRA är, startar en konvertering.
Byta till Free Running-läge (ADTS[2:0]=0) inte kommer att orsaka en
utlösa händelsen, även om ADC avbryta flaggan är inställd.
ADTS2 ADTS1 ADTS0 utlösande källan
0 0 0 free Running läge
0 0 1 analog komparator
0 1 0 yttre mellanjobb begära 0
0 1 1 timer/Counter0 jämför Match A
1 0 0 timer/Counter0 Overflow
1 0 1 timer/Counter1 jämför Match B
1 1 0 timer/Counter1 Overflow
1 1 1 timer/Counter1 fånga händelsen
CBI(ADCSRB,ADTS2);
CBI(ADCSRB,ADTS1);
CBI(ADCSRB,ADTS0);
//---------------------------------------------------------------------
DIDR0 inställningar
//---------------------------------------------------------------------
När denna bit skrivs logik en, digitalt ingången buffert på den
motsvarande ADC PIN-koden är inaktiverad. Det motsvarande stift registret
bitars kommer alltid läsa som noll när denna bit är inställd. När en analog
signalen används för ADC5... 0 stift och den digitala ingången från detta
PIN-koden inte behövs, bör denna bit skrivas logik att minska
Effektförbrukning i digital indatabufferten.
Observera att ADC stift ADC7 och ADC6 inte har digital input buffertar,
och därför inte kräver Digital Input inaktivera bitar.
SBI(DIDR0,ADC5D);
SBI(DIDR0,ADC4D);
SBI(DIDR0,ADC3D);
SBI(DIDR0,ADC2D);
SBI(DIDR0,ADC1D);
SBI(DIDR0,ADC0D);
}