Inhoudsopgave:
- Stap 1: Wat is een ADC?
- Stap 2: Hoe werkt ADC in AVR- Microcontroller
- Stap 3: ADC-conversieformule
- Stap 4: Hoe ADC configureren in ATmega8?
- Stap 5: ADLAR-selectie
- Stap 6: ADCSRA-selectie
- Stap 7: Als u ADC-waarde wilt nemen, moet u wat werk hebben gedaan dat hieronder wordt vermeld
- Stap 8: ADC-waarde instellen
- Stap 9: Uitgangs-LED-pin configureren
- Stap 10: ADC-hardware configureren
- Stap 11: ADC inschakelen
- Stap 12: Start analoog naar digitaal conversies
- Stap 13: WHLE Forever
- Stap 14: Aan het einde volledige code is
Video: Inleiding tot ADC in AVR-microcontroller - voor beginners: 14 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
In deze tutorial weet je alles ADC in avr microcontroller
Stap 1: Wat is een ADC?
Een ADC, of analoog naar digitaal converter, maakt het mogelijk om een analoge spanning om te zetten in een digitale waarde die kan worden gebruikt door een microcontroller. Er zijn veel bronnen van analoge signalen die men zou willen meten. Er zijn analoge sensoren beschikbaar die temperatuur, lichtintensiteit, afstand, positie en kracht meten, om er maar een paar te noemen.
Stap 2: Hoe werkt ADC in AVR- Microcontroller
Met de AVR ADC kan de AVR-microcontroller analoge spanningen omzetten in digitale waarden met weinig tot geen externe onderdelen. De ATmega8 heeft een 10-bit opeenvolgende benadering ADC. ATmega8 heeft 7-kanaals ADC op PortC. De ADC heeft een aparte analoge voedingsspanningspen, AVCC. AVCC mag niet meer dan ± 0,3V verschillen van VCC. De spanningsreferentie mag extern ontkoppeld zijn op de AREF-pin. AVCC wordt gebruikt als de spanningsreferentie. De ADC kan ook worden ingesteld om continu te draaien (de vrijloopmodus) of om slechts één conversie uit te voeren.
Stap 3: ADC-conversieformule
Waar Vin de spanning op de geselecteerde ingangspen is en Vref de geselecteerde spanningsreferentie
Stap 4: Hoe ADC configureren in ATmega8?
De volgende registers worden gebruikt voor de implementatie van ADC in ATmega8:
Selectie ADC-multiplexer
Stap 5: ADLAR-selectie
Resultaat ADC links aanpassen De ADLAR-bit beïnvloedt de presentatie van het ADC-conversieresultaat in het ADC-gegevensregister. Schrijf er een naar ADLAR om het resultaat naar links aan te passen. Anders is het resultaat goed aangepast
Wanneer een ADC-conversie is voltooid, wordt het resultaat gevonden in ADCH en ADCL. Wanneer ADCL wordt gelezen, wordt het ADC-gegevensregister niet bijgewerkt totdat ADCH is gelezen. Als het resultaat dus wordt aangepast en niet meer dan 8-bits precisie is vereist, is het voldoende om ADCH te lezen. Anders moet eerst ADCL worden gelezen en daarna ADCH. Analoge kanaalselectiebits De waarde van deze bits selecteert welke analoge ingangen zijn aangesloten op de ADC.
Stap 6: ADCSRA-selectie
• Bit 7 – ADEN: ADC inschakelen Door deze bit naar één te schrijven, wordt de ADC ingeschakeld. Door het naar nul te schrijven, wordt de ADC uitgeschakeld
• Bit 6 – ADSC: ADC-startconversie In de enkele conversiemodus schrijft u deze bit naar één om elke conversie te starten. Schrijf in de Free Running-modus dit bit naar één om de eerste conversie te starten.
• Bit 5 – ADFR: ADC Free Running Select Wanneer deze bit is ingesteld (één), werkt de ADC in de Free Running-modus. In deze modus bemonstert en actualiseert de ADC de gegevensregisters continu. Als u dit bit (nul) wist, wordt de Free Running-modus beëindigd.
• Bit 4 – ADIF: ADC-onderbrekingsvlag Deze bit wordt ingesteld wanneer een ADC-conversie is voltooid en de gegevensregisters worden bijgewerkt. De ADC Conversion Complete Interrupt wordt uitgevoerd als de ADIE-bit en de I-bit in SREG zijn ingesteld. ADIF wordt door hardware gewist bij het uitvoeren van de bijbehorende interrupt Handling Vector. Als alternatief wordt ADIF gewist door een logische naar de vlag te schrijven.
• Bit 3 – ADIE: ADC Interrupt Enable Wanneer deze bit naar één wordt geschreven en de I-bit in SREG is ingesteld, wordt de ADC Conversion Complete Interrupt geactiveerd.
• Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits Volgens de datasheet moet deze prescaler zo worden ingesteld dat de ADC-ingangsfrequentie tussen 50 KHz en 200 KHz ligt. De ADC-klok wordt afgeleid van de systeemklok met behulp van ADPS2:0. Deze bits bepalen de delingsfactor tussen de XTAL-frequentie en de ingangsklok naar de ADC.
Stap 7: Als u ADC-waarde wilt nemen, moet u wat werk hebben gedaan dat hieronder wordt vermeld
- ADC-waarde instellen
- Uitgangs-LED-pin configureren:
- ADC-hardware configureren
- ADC inschakelen
- Start analoog naar digitaal conversies
- TERWIJL voor altijd
ALS ADC-waarde hoger is dan de ingestelde waarde, LED inschakelen ELSE LED uitschakelen
Stap 8: ADC-waarde instellen
Code: uint8_t ADCWaarde = 128;
Stap 9: Uitgangs-LED-pin configureren
Code: DDRB|= (1 << PB1);
Stap 10: ADC-hardware configureren
ADC-hardware configureren
Dit wordt gedaan door het instellen van bits in de besturingsregisters voor de ADC. Laten we eerst de prescalar voor de ADC instellen. Volgens de datasheet moet deze prescaler zo worden ingesteld dat de ADC-ingangsfrequentie tussen 50 KHz en 200 KHz ligt. De ADC-klok is afgeleid van de systeemklok. Bij een systeemfrequentie van 1 MHz resulteert een prescaler van 8 in een ADC-frequentie van 125 Khz. De voorschaling wordt ingesteld door de ADPS-bits in het ADCSRA-register. Volgens de datasheet moeten alle drie de ADPS2:0-bits op 011 worden ingesteld om de 8-prescaler te krijgen.
Code: ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
Laten we vervolgens de ADC-referentiespanning instellen. Dit wordt bestuurd door de REFS-bits in het ADMUX-register. Het volgende stelt de referentiespanning in op AVCC.
Code: ADMUX |= (1 << REFS0);
Om het kanaal dat door de multiplexer naar de ADC gaat, in te stellen, moeten de MUX-bits in het ADMUX-register dienovereenkomstig worden ingesteld. Aangezien we hier ADC5 gebruiken
Code: ADMUX&=0xF0; ADMUX|=5;
Om de ADC in de vrijlopende modus te zetten, stelt u de toepasselijke naam ADFR-bit in het ADCSRA-register in:
Code: ADCSRA |= (1 << ADFR);
Een laatste wijziging van de instellingen wordt aangebracht om het lezen van de ADC-waarde eenvoudiger te maken. Hoewel de ADC een resolutie van 10 bits heeft, is zoveel informatie vaak niet nodig. Deze 10-bits waarde is verdeeld over twee 8-bits registers, ADCH en ADCL. Standaard worden de laagste 8 bits van de ADC-waarde gevonden in ADCL, waarbij de bovenste twee de laagste twee bits van ADCH zijn. Door de ADLAR-bit in het ADMUX-register in te stellen, kunnen we de ADC-waarde links uitlijnen. Dit plaatst de hoogste 8 bits van de meting in het ADCH-register, met de rest in het ADCL-register. Als we vervolgens het ADCH-register lezen, krijgen we een 8-bits waarde die onze 0 tot 5 volt-meting vertegenwoordigt als een getal van 0 tot 255. We veranderen in feite onze 10-bits ADC-meting in een 8-bits meting. Hier is de code om het ADLAR-bit in te stellen:
Code:
ADMUX |= (1 << ADLAR); Dat voltooit de installatie van de ADC-hardware voor dit voorbeeld. Er moeten nog twee bits worden ingesteld voordat de ADC gaat meten.
Stap 11: ADC inschakelen
Om de ADC in te schakelen, stelt u de ADEN-bit in ADCSRA in:
Code: ADCSRA |= (1 << ADEN);
Stap 12: Start analoog naar digitaal conversies
Om de ADC-metingen te starten, moet de ADSC-bit in ADCSRA worden ingesteld:
Code: ADCSRA |= (1 << ADSC);
Op dit punt zou de ADC continu beginnen met het bemonsteren van de spanning die op ADC5 wordt gepresenteerd. De code tot nu toe zou er als volgt uitzien:
Stap 13: WHLE Forever
Het enige dat u nog hoeft te doen, is de ADC-waarde testen en de LED's instellen om een hoog/laag indicatie weer te geven. Aangezien de ADC-waarde in ADCH een maximale waarde van 255 heeft, werd een testwaarde van th gekozen om te bepalen of de spanning hoog of laag was. Met een eenvoudige IF/ELSE-instructie in de FOR-lussen kunnen we de juiste LED inschakelen:
Code
if(ADCH >ADCWaarde)
{
PORTB |= (1 << PB0); // Schakel LED in
}
anders
{
PORTB&= ~(1 << PB0); // Schakel LED uit
}
Stap 14: Aan het einde volledige code is
Code:
#erbij betrekken
int hoofd (void)
{
uint8_t ADCWaarde = 128;
DDRB |= (1 << PB0); // Stel LED1 in als uitgang
ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Stel ADC prescalar in op 8 - // 125KHz sample rate 1MHz
ADMUX |= (1 << REFS0); // Stel ADC-referentie in op AVCC
ADMUX |= (1 << ADLAR); // Pas het ADC-resultaat links aan om gemakkelijk 8-bits lezen mogelijk te maken
ADMUX&=0xF0;
ADMUX|=5; // MUX-waarden moesten worden gewijzigd om ADC0 te gebruiken
ADCSRA |= (1 << ADFR); // Stel ADC in op vrijloopmodus
ADCSRA |= (1 << ADEN); // Schakel ADC in
ADCSRA |= (1 << ADSC); // Start A2D-conversies terwijl (1) // Loop Forever
{
if(ADCH > ADCWaarde)
{
PORTB |= (1 << PB0); // Schakel LED1 in
}
anders
{
PORTE &= ~(1 << PB1); // Schakel LED1 uit
}
}
retourneer 0;
}
Publiceer eerst deze tutorial Klik hier
Aanbevolen:
Inleiding tot IR-circuits: 8 stappen (met afbeeldingen)
Inleiding tot IR-circuits: IR is een complex stukje technologie en toch heel eenvoudig om mee te werken. In tegenstelling tot LED's of LASER's kan infrarood niet met het menselijk oog worden gezien. In deze Instructable zal ik het gebruik van infrarood demonstreren via 3 verschillende circuits. De circuits zullen niet
Inleiding tot Arduino: 18 stappen
Inleiding tot Arduino: Heb je je ooit afgevraagd om je eigen apparaten te maken, zoals een weerstation, autodashboard voor het bewaken van brandstof, snelheid en locatietracking of het besturen van je huishoudelijke apparaten die worden bestuurd door smartphones of heb je je ooit afgevraagd over het maken van geavanceerde r
Een inleiding tot GarageBand: 9 stappen
Een inleiding tot GarageBand: GarageBand is een platform waarop je muziek kunt maken. Je kunt vrijwel alles op dit platform doen, of het nu gaat om het maken van je droommuziek of het repliceren van een muziekstuk dat je leuk vindt. Maar het is hoe dan ook niet gemakkelijk. Daarom ben ik hier
Inleiding tot Python: 9 stappen
Intro tot Python: Python is een zeer nuttige en flexibele computerprogrammeertaal gemaakt door Guido van Rossum. Python is ook een applicatie op de Raspberry Pi die de code die je schrijft interpreteert in iets dat de Raspberry Pi kan begrijpen en gebruiken. Op j
Inleiding tot IOTSPT.com: 7 stappen
Intro tot IOTSPT.com: IOTSPT.com is een IoT-netwerk. Dat is gebruik voor het verbinden van hardware met internet. Dit is speciaal ontworpen voor ESP8266-modules. Ontwikkelaars hebben ook API's gemaakt voor ontwikkelaars om hardware te integreren met andere software. Het team van IOTSPT heeft