Stap 10: Instellen van de ADC
VOID initADC(void)
{
//---------------------------------------------------------------------
ADMUX instellingen
//---------------------------------------------------------------------
Deze bits Selecteer de referentiespanning voor de ADC. Als deze bits
worden gewijzigd tijdens een conversie, de verandering zal niet gaan in feite
totdat deze conversie voltooid is (ADIF in ADCSRA is ingesteld). De
interne spanning referentie opties mogen niet worden gebruikt als een externe
referentie spanning wordt toegepast op de AREF pin.
REFS1 REFS0 referentiespanning
0 0 AREF, interne Vref uitgeschakeld
0 1 AVCC met externe condensator op AREF pin
1 0 voorbehouden
1 1 interne 1.1V referentiespanning met externe
condensator op AREF pin
CBI(ADMUX,REFS1);
SBI(ADMUX,REFS0);
De ADLAR-bit van invloed is op de presentatie van het resultaat van de ADC-conversie
in het Register van de ADC-gegevens. Schrijven naar ADLAR links om de
resultaat. Anders is het resultaat direct aangepast. De ADLAR wijzigen
bits zal van invloed zijn op het ADC Data Register onmiddellijk, ongeacht om het even welk
lopende conversies.
SBI(ADMUX,ADLAR);
De waarde van deze bits selecteert welke analoge ingangen zijn aangesloten op
de ADC. Als deze bits worden gewijzigd tijdens een conversie, de verandering
Ga niet van kracht totdat deze conversie is voltooid (ADIF in
ADCSRA is ingesteld).
ADMUX | = (ADCPIN & 0x07);
//---------------------------------------------------------------------
ADCSRA instellingen
//---------------------------------------------------------------------
Het schrijven van dit stukje aan één maakt de ADC. Door deze te schrijven tot nul, de
ADC is uitgeschakeld. De ADC uitschakelen terwijl een conversie is in
vooruitgang, deze conversie zal beëindigen.
CBI(ADCSRA,ADEN);
In één-conversiemodus, dit stukje te schrijven naar een die start elk
conversie. In de gratis Running modus, dit stukje te schrijven naar een om te beginnen de
eerste conversie. De eerste conversie nadat ADSC is geschreven
Nadat de ADC is ingeschakeld of als ADSC is geschreven op hetzelfde
tijd duurt zoals de ADC is ingeschakeld, 25 ADC klokcycli in plaats van
de normale 13. Deze eerste conversie uitvoert initialisatie van de
ADC. ADSC leest als een zo lang als een conversie in volle gang is.
Als de conversie voltooid is, keert het terug naar nul. Schrijven van nul tot
Deze bit heeft geen effect.
CBI(ADCSRA,ADSC);
Als deze bit naar een geschreven is, is Auto Triggering van de ADC
ingeschakeld. De ADC start een conversie op een positieve rand van de
geselecteerde trigger signaal. De bron van de trigger is ingeschakeld door in te stellen
de ADC Trigger selecteren bits, ADT's in ADCSRB.
SBI(ADCSRA,ADATE);
Als deze bit wordt weggeschreven naar een en de ik-bit in de SREG is ingesteld, de
ADC conversie volledig onderbreken is geactiveerd.
SBI(ADCSRA,Adie);
Deze bits bepalen de factor van de verdeling tussen de systeemklok
frequentie en de input klok naar de ADC.
ADPS2 ADPS1 ADPS0 divisie Factor
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 instellingen
//---------------------------------------------------------------------
Wanneer dit stukje is geschreven logica een en de ADC wordt uitgeschakeld
(ADEN in ADCSRA is nul), de ADC multiplexer selecteert de negatieve
input voor de Analoge Comparator. Wanneer dit stukje logica nul, is geschreven
AIN1 wordt toegepast op de negatieve inbreng van de Analoge Comparator.
CBI(ADCSRB,Acme);
Als ADATE in de ADCSRA wordt geschreven naar een, de waarde van deze bits
Hiermee selecteert u welke bron zal leiden tot een ADC-conversie. Als ADATE is
uitgeschakeld, zal de ADTS2:0 instellingen hebben geen effect. Een conversie zal
worden geactiveerd door de stijgende rand van de geselecteerde Interrupt-vlag. Opmerking
dat overschakelen van een trigger bron die is aan een trigger uitgeschakeld
bron die is ingesteld, zal het genereren van een positieve rand op de trekker
signaal. Als ADEN in ADCSRA is ingesteld, zal dit de start van een conversie.
Overschakelen naar de modus gratis uitgevoerd (ADTS[2:0]=0) zal niet leiden tot een
gebeurtenis, zelfs als de ADC Interrupt-vlag is ingesteld.
ADTS2 ADTS1 ADTS0 Trigger bron
0 0 0 gratis Running-modus
0 0 1 Analoge Comparator
0 1 0 externe Interrupt Request 0
0 1 1 timer/Counter0 wedstrijd A vergelijken
1 0 0 timer/Counter0 overloop
1 0 1 timer/Counter1 wedstrijd B vergelijken
1 1 0 timer/Counter1 overloop
1 1 1 timer/Counter1 gebeurtenis vastleggen
CBI(ADCSRB,ADTS2);
CBI(ADCSRB,ADTS1);
CBI(ADCSRB,ADTS0);
//---------------------------------------------------------------------
DIDR0 instellingen
//---------------------------------------------------------------------
Als deze bit logica een geschreven is, de digitale ingang buffer op de
corresponderende ADC pin is uitgeschakeld. De corresponderende PIN-Register
bits verschijnt altijd als nul als deze bit is ingesteld. Wanneer een analoge
signaal wordt toegepast op de ADC5... 0 pin en de digitale ingang van deze
PIN is niet nodig, moet dit stukje worden geschreven logica te verminderen
Stroomverbruik in de digitale input buffer.
ADC PIN ADC7 en ADC6 hoeft niet digitale input buffers,
en daarom vereisen geen digitale Input uitschakelen bits.
SBI(DIDR0,ADC5D);
SBI(DIDR0,ADC4D);
SBI(DIDR0,ADC3D);
SBI(DIDR0,ADC2D);
SBI(DIDR0,ADC1D);
SBI(DIDR0,ADC0D);
}