Zakres laboratorium:
Zadania do wykonania:
- Zadanie 1.1
- Zadanie 2.1
- Zadanie 2.3
- Zadanie 3.1
- Zadanie domowe
1. Wyświetlacz 7-segmenowy
Zadanie 1.1
Podłączyć wyświetlacz 7-segmentowy według schematu z poprzedniego laboratorium i zaprezentować działanie funkcji odpowiadającej za wyświetlanie liczby z zakresu 0-9999.
2. Przetwornik A/D
Przetwornik analogowy cyfrowy służy do zamiany sygnału analogowego na cyfrowy. W mikrokontrolerach jest używany do mierzenia napięcia, działa jak woltomierz. Mikrokontroler Atmega32A posiada tylko jeden przetwornik 10-bitowy, jednak dzięki wykorzystaniu multipleksera możemy dokonywać pomiaru na 8 wyprowadzeniach (PORTA). Do poprawnej pracy tego przetwornika należy skonfigurować odpowiednie rejestry. Do testowania poprawnej pracy należy generować różnie napięcie, w tym celu należy wykorzystać zewnętrzny potencjometr.
Pierwsze kroki:
- podłączyć potencjometr zgodnie z rysunkiem – pomiar na nóżce PA0 (nie należy odłączać wyświetlacza 7-segmentowego)
Zadanie 2.1
- przygotować funkcję “ADC_init()” w której dokonana będzie konfiguracja przetwornika A/D na podstawie dokumentacji mikrokontrolera:
- Rejestr ADMUX bity: REFS0:1 – konfiguracja napięcia referencyjnego – wybrać napięcie AVCC
- Rejestr ADCSRA bity: ADPS0:2 – konfiguracja podzielnika częstotliwości dla układu przetwornika (częstotliwość sygnału taktującego) – ustawić aby częstotliwość była mniejsza
niż 100KHz - Rejestr ADCSRA bit: ADEN – uruchomienie układu przetwornika
- Rejestr ADMUX bity: MUX0:4 – konfiguracja/wybór kanału/pinu na którym będzie dokonywany pomiar – wybrać ADC0 – odpowiada pinowi PA0
- przygotować funkcję “uint16_t ADC_10bit()” – zwraca zmierzone napięcie:
- Rejestr ADCSRA bit: ADSC – uruchomienie pojedynczego pomiaru – ustawienie bitu
- Rejestr ADCSRA bit: ADSC – oczekiwanie na zakończenie pomiaru – oczekiwanie na wyzerowanie bitu
- Rejestr ADC – przechowuje wynik pomiaru – wartość jaką ma zwrócić funkcja
- wartość zmierzonego napięcia (wartość zwracaną przez funkcję “ADC_10bit()”) wyświetlić na wyświetlaczu 7-segmentowym
Funkcja “ADC_10bit()” zwraca liczbę z zakresu 0-1023 odpowiadającą zmierzonemu napięciu zgodnie z działaniem przetwornika A/D. 0 to napięcie 0V a 1023 to napięcie “AVCC”, czyli 5V, więc dokładność pomiaru wynosi około 5V/1023= 0.00488V. Inne wartości napięcia są proporcjonalne.
Zadanie 2.2
- zapisać wzór na przeliczenie wartości zwracanej przez funkcję “ADC_10bit()” na wartość napięcia w V
- zaimplementować funkcję która będzie zwracała napięcie w V z dokładnością do dwóch miejsc po przecinku i przeskalowaną do liczby całkowitych (np. 2,59 to 259, 3,95 to 393), wyświetlić na wyświetlaczu napięcie
- podłączyć do układu miernik uniwersalny i porównać wskazania dla 10 różnych napięć + napięć skrajnych – wyniki zapisać na kartę w postaci tabeli
3. Wykorzystanie przerwań wewnętrznych
Wykorzystać kod z wcześniejszego laboratorium do uruchomienia przerwania wewnętrznego.
Zadanie 3.1
- dodać do pętli głównej programu opóźnienie 1000ms – jak działa wyświetlacz?
- skonfigurować przerwanie aby wywoływało się z częstotliwością 100Hz
- w funkcji przerwania uruchamiać funkcję odpowiedzialną za obsługę wyświetlacza 7-segmentowego “seg7Show4Cyfry()” – funkcję należy przerobić tak aby działała w przerwaniu (usunąć opóźnienia i jedno wywołanie to wyświetlenie jednej cyfry)
- czy wyświetlane wartości są czytelne? jak zmniejszyć ten niepożądany efekt?
- dodać do pętli głównej programu opóźnienie 2000ms – jak teraz działa wyświetlacz?
Taka konfiguracja pozwala wykonywać długie zadania w pętli głównej i jednoczesne poprawne wyświetlanie wartości na wyświetlaczu 7-segmentowym z wykorzystaniem multipleksowania.
4. Zadanie domowe
- narysować schemat urządzenia z zadania 2.2 (mikrokontroler, zadajnik napięcia, wyświetlacz 7-segmetowy)
Zagadnienia na przyszłe zajęcia:
- sygnał PWM
- serwo modelarskie – sterowanie