Spisu treści:
- Krok 1: Co to jest ADC?
- Krok 2: Jak działa ADC w mikrokontrolerze AVR?
- Krok 3: Formuła konwersji ADC
- Krok 4: Jak skonfigurować ADC w ATmega8?
- Krok 5: Wybór ADLAR
- Krok 6: Wybór ADCSRA
- Krok 7: Jeśli chcesz wziąć wartość ADC, musisz wykonać trochę pracy wymienionej poniżej
- Krok 8: Ustaw wartość ADC
- Krok 9: Skonfiguruj wyjście LED Pin
- Krok 10: Konfiguracja sprzętu ADC
- Krok 11: Włącz ADC
- Krok 12: Rozpocznij konwersję analogowo-cyfrową
- Krok 13: PODCZAS NA zawsze
- Krok 14: Na końcu kompletny kod jest
Wideo: Wprowadzenie do ADC w mikrokontrolerze AVR - dla początkujących: 14 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
W tym samouczku dowiesz się wszystkiego o ADC w mikrokontrolerze avr
Krok 1: Co to jest ADC?
ADC, czyli konwerter analogowo-cyfrowy, umożliwia konwersję napięcia analogowego na wartość cyfrową, która może być używana przez mikrokontroler. Istnieje wiele źródeł sygnałów analogowych, które można mierzyć. Dostępne są czujniki analogowe, które mierzą temperaturę, natężenie światła, odległość, położenie i siłę, żeby wymienić tylko kilka.
Krok 2: Jak działa ADC w mikrokontrolerze AVR?
AVR ADC umożliwia mikrokontrolerowi AVR konwersję napięć analogowych na wartości cyfrowe z niewielką liczbą części zewnętrznych lub bez nich. ATmega8 posiada 10-bitowy ADC z kolejnym przybliżeniem. ATmega8 ma 7-kanałowy ADC w PortC. Przetwornik ADC ma osobny pin napięcia zasilania analogowego, AVCC. AVCC nie może różnić się o więcej niż ± 0,3 V od VCC. Napięcie odniesienia może być zewnętrznie odsprzęgane na styku AREF. AVCC jest używany jako napięcie odniesienia. ADC można również ustawić tak, aby działał w sposób ciągły (tryb wolnego biegu) lub wykonywał tylko jedną konwersję.
Krok 3: Formuła konwersji ADC
Gdzie Vin jest napięciem na wybranym pinie wejściowym, a Vref wybranym napięciem odniesienia
Krok 4: Jak skonfigurować ADC w ATmega8?
Do implementacji ADC w ATmega8 wykorzystywane są następujące rejestry:
Wybór multipleksera ADC
Krok 5: Wybór ADLAR
Wynik regulacji lewej ADC Bit ADLAR wpływa na prezentację wyniku konwersji ADC w rejestrze danych ADC. Napisz jeden do ADLAR, aby po lewej stronie dostosować wynik. W przeciwnym razie wynik jest odpowiednio dostosowany
Gdy konwersja ADC jest zakończona, wynik znajduje się w ADCH i ADCL. Gdy ADCL jest odczytywany, rejestr danych ADC nie jest aktualizowany, dopóki nie zostanie odczytany ADCH. W konsekwencji, jeśli wynik pozostaje skorygowany i wymagana jest nie więcej niż 8-bitowa precyzja, wystarczy odczytać ADCH. W przeciwnym razie najpierw należy przeczytać ADCL, a następnie ADCH. Bity wyboru kanału analogowego Wartość tych bitów określa, które wejścia analogowe są podłączone do ADC.
Krok 6: Wybór ADCSRA
• Bit 7 – ADEN: ADC Enable Zapisanie tego bitu na jeden włącza ADC. Zapisując to do zera, ADC jest wyłączony
• Bit 6 – ADSC: Rozpocznij konwersję ADC W trybie pojedynczej konwersji zapisz ten bit jako jeden, aby rozpocząć każdą konwersję. W trybie Free Running zapisz ten bit do jednego, aby rozpocząć pierwszą konwersję.
• Bit 5 – ADFR: Wybór swobodnego biegu ADC Gdy ten bit jest ustawiony (jeden), ADC działa w trybie swobodnego biegu ADC. W tym trybie ADC w sposób ciągły próbkuje i aktualizuje rejestry danych. Wyczyszczenie tego bitu (zero) spowoduje zakończenie trybu swobodnego biegu.
• Bit 4 – ADIF: Flaga przerwania ADC Ten bit jest ustawiany po zakończeniu konwersji ADC i aktualizacji rejestrów danych. Zakończenie konwersji ADC jest wykonywane, jeśli bit ADIE i bit I w SREG są ustawione. ADIF jest czyszczony sprzętowo podczas wykonywania odpowiedniego wektora obsługi przerwań. Alternatywnie, ADIF jest czyszczony poprzez wpisanie logicznej jedynki do flagi.
• Bit 3 – ADIE: ADC Interrupt Enable Gdy ten bit jest zapisany na jeden i bit I w SREG jest ustawiony, aktywowane jest pełne przerwanie konwersji ADC.
• Bity 2:0 – ADPS2:0: Bity wyboru preskalera przetwornika ADC Zgodnie z arkuszem danych, ten preskalar musi być ustawiony tak, aby częstotliwość wejściowa przetwornika ADC mieściła się w zakresie od 50 kHz do 200 kHz. Zegar ADC jest uzyskiwany z zegara systemowego za pomocą ADPS2:0. Bity te określają współczynnik podziału między częstotliwością XTAL a zegarem wejściowym do ADC.
Krok 7: Jeśli chcesz wziąć wartość ADC, musisz wykonać trochę pracy wymienionej poniżej
- Ustaw wartość ADC
- Skonfiguruj wyjście LED pin
- Skonfiguruj sprzęt ADC
- Włącz ADC
- Rozpocznij konwersję analogowo-cyfrową
- PODCZAS na zawsze
Jeśli wartość ADC jest wyższa niż ustawiona wartość, włącz diodę LED W przeciwnym razie wyłącz diodę LED
Krok 8: Ustaw wartość ADC
Kod: uint8_t ADCValue =128;
Krok 9: Skonfiguruj wyjście LED Pin
Kod: DDRB|= (1 << PB1);
Krok 10: Konfiguracja sprzętu ADC
Skonfiguruj sprzęt ADC
Odbywa się to poprzez ustawienie bitów w rejestrach kontrolnych dla ADC. Najpierw ustawmy preskalar dla ADC. Zgodnie z arkuszem danych ten preskalar należy ustawić tak, aby częstotliwość wejściowa ADC wynosiła od 50 kHz do 200 kHz. Zegar ADC pochodzi z zegara systemowego. Przy częstotliwości systemu 1 MHz preskaler o wartości 8 da częstotliwość ADC 125 Khz. Wstępne skalowanie jest ustawiane przez bity ADPS w rejestrze ADCSRA. Zgodnie z arkuszem danych wszystkie trzy bity ADPS2:0 muszą być ustawione na 011, aby uzyskać 8 preskalerów.
Kod: ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
Następnie ustawmy napięcie odniesienia ADC. Jest to kontrolowane przez bity REFS w rejestrze ADMUX. Poniżej ustawiamy napięcie odniesienia na AVCC.
Kod: ADMUX |= (1 << REFS0);
Aby ustawić kanał przekazywany przez multiplekser do ADC, należy odpowiednio ustawić bity MUX w rejestrze ADMUX. Ponieważ używamy tutaj ADC5
Kod: ADMUX&=0xF0; DODATEK|=5;
Aby przełączyć ADC w tryb wolnego biegu, ustaw trafnie nazwany bit ADFR w rejestrze ADCSRA:
Kod: ADCSRA |= (1 << ADFR);
Wprowadzona zostanie ostatnia zmiana ustawień, aby ułatwić odczytywanie wartości ADC. Chociaż ADC ma rozdzielczość 10 bitów, taka ilość informacji często nie jest potrzebna. Ta 10-bitowa wartość jest podzielona na dwa 8-bitowe rejestry, ADCH i ADCL. Domyślnie najniższe 8 bitów wartości ADC znajduje się w ADCL, przy czym dwa górne to dwa najniższe bity ADCH. Ustawiając bit ADLAR w rejestrze ADMUX, możemy pozostawić wyrównanie wartości ADC. Powoduje to umieszczenie najwyższych 8 bitów pomiaru w rejestrze ADCH, a resztę w rejestrze ADCL. Jeśli następnie odczytamy rejestr ADCH, otrzymamy 8-bitową wartość, która reprezentuje nasz pomiar od 0 do 5 V jako liczbę od 0 do 255. Zasadniczo zmieniamy nasz 10-bitowy pomiar ADC na 8-bitowy. Oto kod do ustawienia bitu ADLAR:
Kod:
ADMUX |= (1 << ADLAR); To kończy konfigurację sprzętu ADC dla tego przykładu. Należy ustawić jeszcze dwa bity, zanim ADC rozpocznie pomiary.
Krok 11: Włącz ADC
Aby włączyć ADC, ustaw bit ADEN w ADCSRA:
Kod: ADCSRA |= (1 << ADEN);
Krok 12: Rozpocznij konwersję analogowo-cyfrową
Aby rozpocząć pomiary ADC należy ustawić bit ADSC w ADCSRA:
Kod: ADCSRA |= (1 << ADSC);
W tym momencie ADC zacznie nieprzerwanie próbkować napięcie prezentowane na ADC5. Kod do tego momentu wyglądałby tak:
Krok 13: PODCZAS NA zawsze
Jedyne, co pozostało do zrobienia, to przetestować wartość ADC i ustawić diody LED na wyświetlanie wysokiego/niskiego wskazania. Ponieważ odczyt ADC w ADCH ma maksymalną wartość 255, wybrano wartość testową th w celu określenia, czy napięcie było wysokie czy niskie. Prosta instrukcja IF/ELSE w pętlach FOR pozwoli nam włączyć odpowiednią diodę LED:
Kod
if(ADCH >ADCValue)
{
PORTB |= (1 << PB0); // Włącz diodę LED
}
w przeciwnym razie
{
PORTB&= ~(1 << PB0); // Wyłącz diodę LED
}
Krok 14: Na końcu kompletny kod jest
Kod:
#włączać
int główny (unieważniony)
{
uint8_t ADCValue=128;
DDRB |= (1 << PB0); // Ustaw LED1 jako wyjście
ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Ustaw preskalar ADC na 8 - // Częstotliwość próbkowania 125 KHz 1 MHz
ADMUX |= (1 << REFS0); // Ustaw odniesienie ADC do AVCC
ADMUX |= (1 << ADLAR); // Lewy dostosuj wynik ADC, aby umożliwić łatwy odczyt 8-bitowy
ADMUX&=0xF0;
DODATEK|=5; // Aby użyć ADC0, trzeba było zmienić wartości MUX
ADCSRA |= (1 << ADFR); // Ustaw ADC na tryb swobodnego biegu
ADCSRA |= (1 << ADEN); // Włącz ADC
ADCSRA |= (1 << ADSC); // Rozpocznij konwersje A2D while(1) // Zapętlaj na zawsze
{
if(ADCH>ADCValue)
{
PORTB |= (1 << PB0); // Włącz LED1
}
w przeciwnym razie
{
PORTE &= ~(1 << PB1); // Wyłącz diodę LED1
}
}
zwróć 0;
}
Najpierw opublikuj ten samouczek Kliknij tutaj
Zalecana:
Kask ochronny Covid, część 1: wprowadzenie do obwodów Tinkercad!: 20 kroków (ze zdjęciami)
Kask ochronny Covid, część 1: wprowadzenie do obwodów Tinkercad!: Witaj, przyjacielu! W tej dwuczęściowej serii nauczymy się korzystać z obwodów Tinkercad - zabawnego, potężnego i edukacyjnego narzędzia do nauki działania obwodów! Jednym z najlepszych sposobów uczenia się jest robienie. Dlatego najpierw zaprojektujemy nasz własny projekt: th
Wprowadzenie do obwodów IR: 8 kroków (ze zdjęciami)
Wprowadzenie do obwodów IR: IR to złożona technologia, ale bardzo prosta w obsłudze. W przeciwieństwie do diod LED lub LASERA, podczerwieni nie można zobaczyć ludzkim okiem. W tym instruktażowym zademonstruję użycie podczerwieni w 3 różnych obwodach. Obwody nie będą u
Metronom oparty na mikrokontrolerze: 5 kroków
Metronom oparty na mikrokontrolerze: Metronom to urządzenie do pomiaru czasu używane przez muzyków do śledzenia uderzeń w utworach i rozwijania wyczucia czasu wśród początkujących, którzy uczą się nowego instrumentu. Pomaga zachować poczucie rytmu, co jest kluczowe w muzyce.Ten metronom buduje
Ramię robota oparte na mikrokontrolerze PIC: 6 kroków (ze zdjęciami)
Ramię robotyczne oparte na mikrokontrolerze PIC: Od linii montażowych przemysłu samochodowego po roboty telechirurgiczne w kosmosie, ramiona robotyczne można znaleźć wszędzie. Mechanizmy tych robotów są podobne do człowieka, którego można zaprogramować do podobnej funkcji i zwiększania
Inteligentna ładowarka akumulatorów oparta na mikrokontrolerze: 9 kroków (ze zdjęciami)
Inteligentna ładowarka akumulatorów oparta na mikrokontrolerze: Obwód, który zobaczysz, to inteligentna ładowarka akumulatorów oparta na ATMEGA8A z automatycznym odcięciem. Różne parametry są wyświetlane na ekranie LCD podczas różnych stanów ładowania. Ponadto obwód wyda dźwięk za pomocą brzęczyka podczas ładowania ukończenie.Zbudowałem