Spisu treści:

Wprowadzenie do ADC w mikrokontrolerze AVR - dla początkujących: 14 kroków
Wprowadzenie do ADC w mikrokontrolerze AVR - dla początkujących: 14 kroków

Wideo: Wprowadzenie do ADC w mikrokontrolerze AVR - dla początkujących: 14 kroków

Wideo: Wprowadzenie do ADC w mikrokontrolerze AVR - dla początkujących: 14 kroków
Wideo: Wprowadzenie do mikrokontrolerów AVR - od elektroniki do programowania 2024, Lipiec
Anonim
Wprowadzenie do ADC w mikrokontrolerze AVR | dla początkujących
Wprowadzenie do ADC w mikrokontrolerze AVR | dla początkujących

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

Formuła konwersji ADC
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?

Jak skonfigurować ADC w ATmega8?
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

Wybór ADLAR
Wybór ADLAR
Wybór ADLAR
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

Wybór ADCSRA
Wybór ADCSRA
Wybór ADCSRA
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: