Politechnika Warszawska



Podobne dokumenty
Politechnika Warszawska

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

ĆWICZENIE. TEMAT: OBSŁUGA PRZETWORNIKA A/C W ukontrolerze 80C535 KEILuVISON

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

POMIAR NAPIĘCIA STAŁEGO PRZYRZĄDAMI ANALOGOWYMI I CYFROWYMI. Cel ćwiczenia. Program ćwiczenia

Konstrukcje warunkowe Pętle

Parametryzacja przetworników analogowocyfrowych

Metody obsługi zdarzeń

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Laboratorium 1: Wprowadzenie do środowiska programowego. oraz podstawowe operacje na rejestrach i komórkach pamięci

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

Instytut Teleinformatyki

Ćw. 7 Przetworniki A/C i C/A

Równia pochyła. Model M-09. do Dydaktycznego Systemu Mikroprocesorowego DSM-51. Instrukcja uŝytkowania

Mikroprocesorowy miernik czasu

KATEDRA ELEKTRONIKI AGH WYDZIAŁ EAIIE. Dydaktyczny model 4-bitowego przetwornika C/A z siecią rezystorów o wartościach wagowych

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Konfiguracja parametrów sondy cyfrowo analogowej typu CS-26/RS/U

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

CZAZ GT BIBLIOTEKA FUNKCJI PRZEKAŹNIKI, LOGIKA, POMIARY. DODATKOWE ELEMENTY FUNKCJONALNE DSP v.2

Zasady programowania Dokumentacja

Przetworniki analogowo-cyfrowe

Instrukcja do ćwiczeń

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Imię i nazwisko (e mail) Grupa:

Szkolenia specjalistyczne

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Pętla for. Wynik działania programu:

Programowanie - wykład 4

WIECZOROWE STUDIA NIESTACJONARNE LABORATORIUM UKŁADÓW ELEKTRONICZNYCH

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Podstawy Programowania Podstawowa składnia języka C++

Język C, tablice i funkcje (laboratorium, EE1-DI)

Zasady wykonywania programu drabinkowego w sterowniku

PL B1. Sposób i układ pomiaru całkowitego współczynnika odkształcenia THD sygnałów elektrycznych w systemach zasilających

Listing_ $crystal = deklaracja

1 Powtórzenie wiadomości

Podstawy Programowania C++

Badanie właściwości tłumienia zakłóceń woltomierza z przetwornikiem A/C z dwukrotnym całkowaniem

do instrukcja while (wyrażenie);

Sposoby opisu i modelowania zakłóceń kanałowych

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Imię i nazwisko (e mail): Rok: 2018/2019 Grupa: Ćw. 5: Pomiar parametrów sygnałów napięciowych Zaliczenie: Podpis prowadzącego: Uwagi:

Warsztaty dla nauczycieli

Przetwarzanie AC i CA

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Instytut Teleinformatyki

POMIAR PARAMETRÓW SYGNAŁOW NAPIĘCIOWYCH METODĄ PRÓKOWANIA I CYFROWEGO PRZETWARZANIA SYGNAŁU

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.

Podstawy i języki programowania

MIKROPROCESORY architektura i programowanie

Przetwarzanie A/C i C/A

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Start Bity Bit Stop 1 Bit Par Rys. 1

Język ludzki kod maszynowy

INSTRUKCJA OBSŁUGI MONITORA LINII PRĄDOWEJ

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

2 Przygotował: mgr inż. Maciej Lasota

Uniwersytet Pedagogiczny im. Komisji Edukacji Narodowej w Krakowie

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Wyszukiwanie. Wyszukiwanie binarne

Przetwornik analogowo-cyfrowy

6 Przygotował: mgr inż. Maciej Lasota

Język C, instrukcje sterujące (laboratorium)

LABORATORIUM AUTOMATYKA i ROBOTYKA Inne funkcje sterownika PLC część 2

SPECYFIKACJA PRZETWORNIK RÓŻNICY CIŚNIEŃ DPC250; DPC250-D; DPC4000; DPC4000-D

Uśrednianie napięć zakłóconych

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

WYKORZYSTANIE WEWNĘTRZNYCH GENERATORÓW RC DO TAKTOWANIA MIKROKONTROLERÓW AVR

Przerwania, polling, timery - wykład 9

Katedra Energetyki. Laboratorium Podstaw Elektrotechniki. Badanie silników skokowych. Temat ćwiczenia:

Spis treści. 1. Cyfrowy zapis i synteza dźwięku Schemat blokowy i zadania karty dźwiękowej UTK. Karty dźwiękowe. 1

INDU-40. Przemysłowy Sterownik Mikroprocesorowy. Przeznaczenie. Dozowniki płynów, mieszacze płynów.

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU. Instrukcja pętli For to do

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Wykład z Technologii Informacyjnych. Piotr Mika

Politechnika Warszawska

LABORATORIUM Sygnałów, Modulacji i Systemów ĆWICZENIE 2: Modulacje analogowe

Metody numeryczne Laboratorium 2

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

Przetwarzanie analogowo-cyfrowe sygnałów

WYZNACZANIE CECH PUNKTOWYCH SYGNAŁÓW POMIAROWYCH

Transkrypt:

Politechnika Warszawska Wydział Elektryczny Laboratorium Podstaw Techniki Mikroprocesorowej Skrypt do ćwiczenia M.43 Obliczanie wartości średniej oraz amplitudy z próbek sygnału język C

.Część teoretyczna Jednym ze sposób obliczania amplitudy jest metoda uśredniania. Zakładając, Ŝe mamy dane próbki składowej podstawowej sygnału przedstawione równaniem gdzie: x n) = m cos( nω + ) (3.) ( ϕ Tp 2π Ω = ω Tp = 2π = (3.2) T N gdzie - liczba próbek w okresie sygnału. Poprzez uśrednienie wartości bezwzględnej dla przedziału czasowego, będącego wielokrotnością półokresu sygnału, otrzymujemy amplitudę tego sygnału. Dla danego przykładu naleŝy obliczyć sumy dyskretne z dostępnych próbek. Wartość tych sum nie jest uzaleŝniona tylko od amplitudy sygnału, lecz równieŝ od chwili, w jakiej rozpoczęło się próbkowanie sygnału, a dokładniej od czasu pomiędzy startem przetwarzania i przejściem sygnału przez zero. Maksymalna wartość tego czasu maleje wraz ze wzrostem częstotliwości próbkowania sygnału. Aby uzyskać symetryzację obliczonych sum trzeba załoŝyć wartość średnią współczynnika, który jest skojarzony z obliczaną sumą. Dla sumy obliczanej z połowy okresu otrzymuje się n= x ( n) = S av (3.3) m gdzie: S av π =,5ctg 2 (3.4) Uwzględniając te załoŝenia obliczenie amplitudy moŝe odbyć moŝe odbyć się w następujący sposób m π = 2tg 2 x n= ( n) (3.5) Pojawienie się błędu pomiarowego, związanego z przypadkowym czasem próbkowania, powodującego wahania obliczonej wartości sumy, zaleŝy od ilości próbek w jednym okresie sygnału, czyli w efekcie od częstotliwości próbkowania sygnału. Czym większa częstotliwość próbkowania, tym mniejszy błąd pomiaru. W związku z tym, jeŝeli częstotliwość próbkowania będzie dostatecznie duŝa to moŝna załoŝyć następujące równanie będzie prawdziwe m = π N x n= ( n) (3.6) Obliczenia amplitudy w programach zostały wykonane zgodnie ze wzorem (3.6).

.. Program obliczający wartość średnią oraz amplitudę (język C) Opisane w tym rozdziale programy znajdują się w katalogu c\pr4 - obl sr i ampl. Zadaniem tego programu jest obliczanie wartości średniej oraz amplitudy sygnałów podawanych na wejście analogowe oraz kontrolera DSM-5. Sygnały te za pomocą multipleksera przekazywane są na przetwornik analogowo-cyfrowy, gdzie następuje ich próbkowanie oraz kwantyzacja. Częstotliwość próbkowania wynosi 8Hz, co w efekcie daje 6 próbek na jeden okres sygnału wejściowego przy załoŝeniu, Ŝe częstotliwość zmian sygnału badanego wynosi 5Hz. Obsługa timerów, przerwań oraz zapis próbek w tym programie odbyły się zgodnie z opisaną wcześniej częścią wspólną. Program ten funkcjonuje według schematu przedstawionego na Rys... Deklaracja zmiennych, ustawienie trybu pracy timerów oraz zezwolenia na przerwania Ustawienie liczników timerów oraz start Timera Obsługa przerwań od Timera: - ustawienie Timera - wybór wejścia na multiplekserze - start przetwornika A/C - nastawienia Timera - start Timera Obsługa przerwań od Timera: - zapis wartości z przetwornika A/C - wybór wejścia na multiplekserze - start przetwornika A/C - start Timera Pętla nieskończona Instrukcje obliczające wartość średnią Instrukcje obliczające amplitudę Obsługa przerwań od Timera: - zapis wartości z przetwornika A/C Skok do początku bloku Rys... Schemat blokowy działania programu Program główny rozpoczyna się od deklaracji zmiennych oraz wskaźników, za pomocą których pobrane zostaną zapisane w pamięci wartości próbek. Po wstępnym ustawieniu wartości tych wskaźników zostały ustawione tryby pracy timerów. Timer pracuje w trybie, czyli jako pełen rejestr 6 bitowy. W trybie tym timer moŝe odliczać maksymalnie do wartości 65536. Licznik tego timera został wstępnie ustawiony na wartość 64384, co powoduje, Ŝe timer zlicza 52 impulsy zegarowe odmierzając w ten sposób czas wynoszący,25ms. Odliczony czas, jest czasem pomiędzy pobieraniem kolejnych próbek badanego sygnału. Drugi timer pracuje w trybie 2, czyli jako rejestr 8 bitowy TL, przy czym po przekroczeniu maksymalnej wartości (256) następuje wystawienie flagi oraz załadowanie zawartości rejestru TH do rejestru TL. Timer ten odmierza czas potrzebny przetwornikowi A/C na dokonanie przetwarzania. W kolejnym etapie programu zostało ustawione ogólne zezwolenie na przerwania, następnie zezwolenie na przerwanie od timera oraz. Po nastawieniu liczników timerów nastąpił start timera oraz zainicjowany został wyświetlacz LCD. Kod opisanych powyŝej czynności przedstawia się następująco:

void main(void) short srednia; /*Deklaracja zmiennej dla wartosci sredniej sygnalu */ short srednia; /*Deklaracja zmiennej dla wartosci sredniej sygnalu */ short amplituda; /*Deklaracja zmiennej dla wartosci amplitudy sygnalu */ short amplituda; /*Deklaracja zmiennej dla wartosci amplitudy sygnalu */ short modul; /*Deklaracja zmiennej do obliczania modulu*/ char licz = ; /*Deklaracja licznika dla petli*/ unsigned char *pam,*pam; /*Deklaracja wskaznikow komorek pamieci*/ pam = x22; pam = x22; TMOD = x2; EA = ; ET = ; ET = ; TH = xfb; TL = x8; TH = x; TL = x; TR = ; lcd_init(); /*Nadanie adresu wskaznikowi pamieci*/ /*Nadanie adresu wskaznikowi pamieci*/ /*Ustawienie trybow pracy timerow*/ /*Ogólne zezwolenie na przerwania*/ /*Zezwolenie na przerwania od timera T*/ /*Zezwolenie na przerwania od timera T*/ /*Nastawienie licznika T*/ /*Nastawienie licznika T*/ /*Nastawienie licznika T*/ /*Nastawienie licznika T*/ /*Start licznika T*/ /*Zainicjowanie wyswietlacza LCD*/ Dalsza część programu wykonywana jest w pętli nieskończonej.... Obliczenie wartości średniej Polecenie while() rozpoczyna pętle nieskończoną, w której wykonywane są obliczenia oraz realizowane jest wyświetlanie wyników. Opóźnienie jest niezbędne, aby dane wyświetlane na ekranie LCD były czytelne. Funkcja if sprawdza, czy moŝna wykonywać obliczenia. JeŜeli zmienna pozwolenie ma wartość oznacza to, Ŝe nie zostały zapisane próbki dla całego okresy sygnału. Obliczenia wykonane zostaną dopiero wtedy, kiedy w przerwaniu odpowiadającym za zapis próbek zmiennej pozwolenie nadana zostanie wartość. Obliczenie wartości średniej realizowane jest poprzez zsumowanie wszystkich próbek a następnie dzielenie otrzymanej wartości przez ilość próbek. Kod realizujący obliczenie wartości średniej przedstawiono poniŝej: while () /*Wywolanie petli nieskonczonej*/ delay(2); if (pozwolenie == ) /*Sprawdzenie, czy moŝna wykonywac obliczenia*/ /* OBLICZENIE WARTOSCI SREDNIEJ KANAL */ srednia = ; pam = x222; for (licz = ; licz < 6; licz++) srednia = srednia + *pam; pam++; srednia = (srednia/6); /* OBLICZENIE WARTOSCI SREDNIEJ KANAL */

srednia = ; pam = x223; for (licz = ; licz < 6; licz++) srednia = srednia + *pam; pam++; srednia = (srednia/6); Przed dokonaniem obliczeń zmienna, w której zapisany zostanie wynik została wyzerowana, aby wynik poprzednich obliczeń nie wpłyną na wynik aktualnych obliczeń. Do wskaźnika wpisany został adres komórki pamięci, w której znajduje się pierwsza próbka sygnału. Sumowanie próbek odbyło się w pętli for wykonanej szesnaście razy. Przy kaŝdym przejściu pętli do zmiennej srednia dodana została wartość kolejnej próbki. Dodatkowo przy kaŝdym sumowania zwiększana była wartość wskaźnika, aby przy kaŝdym kolejnym przejściu pętli wskazywał on kolejną próbkę. Po dokonaniu sumowania próbek wynik został podzielony przez ilość próbek wynoszącą szesnaście oraz odjęta została od niego składowa stała. Obliczenie wartości średniej dla drugiego sygnału odbyło się analogicznie. Jedyną róŝnicą był fakt, Ŝe wskaźnik wskazywał pierwszą próbkę drugiego sygnału...2. Obliczenie amplitudy Obliczenie amplitudy odbyło się zgodnie z poniŝszym wzorem: gdzie: - amplituda m m - liczba próbek w okresie sygnału x - próbka sygnału = π N x n= ( n) (7.4) PoniŜszy kod przedstawia sposób realizacji obliczeń: /* OBLICZENIE AMPLITUDY KANAL */ amplituda = ; pam = x222; for (licz = ; licz < 8; licz++) modul = *pam - 25; if (modul < ) modul = modul * -; amplituda = amplituda + modul; pam++; amplituda = (amplituda/6) * 3,4; /* OBLICZENIE AMPLITUDY KANAL */ amplituda = ; pam = x223; for (licz = ; licz < 8; licz++) modul = *pam - 25; if (modul < ) modul = modul * -;

amplituda = amplituda + modul; pam++; amplituda = (amplituda/6) * 3,4; Przed dokonaniem obliczeń zmienna, w której zapisany zostanie wynik została wyzerowana, aby wynik poprzednich obliczeń nie wpłyną na wynik aktualnych obliczeń. Do wskaźnika wpisany został adres komórki pamięci, w której znajduje się pierwsza próbka sygnału. Sumowanie próbek odbyło się w pętli for wykonanej osiem razy. Do zmiennej amplituda przy kaŝdym przejściu pętli dodawany zostawał moduł wartości próbki, od której wcześniej odjęto składową stałą sygnału. Obliczanie modułu z wartości próbki zostało zrealizowane poprze funkcję if, która mnoŝy ujemne wartości raz minus jeden. Oprócz sumowania przy kaŝdym przejściu pętli została zwiększona wartość wskaźnika, aby przy kaŝdym kolejnym przejściu pętli wskazywał on kolejną próbkę. Wynik sumowania został podzielony przez ilość próbek oraz pomnoŝony przez 3,4. Obliczenie wartości maksymalnej drugiego sygnału odbyło się analogicznie. Jedyną róŝnicą był fakt, Ŝe wskaźnik wskazywał pierwszą próbkę drugiego sygnału. Po dokonaniu obliczeń nastąpiło wyczyszczenie wyświetlacza LCD, a następnie wyświetlono na nim wyniki obliczeń. PoniŜszy kod realizuje operację wyświetlania obliczonych wartości: pozwolenie = ; lcd_clr(); printf ("S=%i A=%i\nS=%i A=%i",srednia,amplituda,srednia,amplituda); TuŜ przed wyświetleniem wyników zmiennej pozwolenie nadano wartość, co oznacza zezwolenie na zapis kolejnego wektora próbek. Takie rozwiązanie powoduje, Ŝe nie zaistnieje sytuacja, w której wykonywane są obliczenia na wartościach stale odświeŝanych, czyli w efekcie stale zmieniających się. Długi czas wykonywania obliczeń przy takim rozwiązaniu nie wprowadza błędów do obliczeń. W pętli znajduje się równieŝ podprogram wprowadzający 2ms opóźnienie. Dzięki takiemu rozwiązaniu wartości wyświetlone na wyświetlaczu LCD są bardziej czytelne. PowyŜej opisany program znajduje się w załączniku Z.2.2 jako wersja a programu oraz w katalogu c\pr4 - obl sr i ampl\4a. Istnieje równieŝ druga wersja programu wyświetlająca w innym sposób wyniki obliczeń (załącznik Z.2.2 wersja programu b oraz katalog c\pr4 - obl sr i ampl\4b ). pam = x222; pozwolenie = ; lcd_clr(); printf ("%i %i %i %i\n",(int)*pam,(int)*(pam+),(int)*(pam+2),(int)*(pam+3)); printf ("S=%i A=%i",srednia,amplituda); Do wskaźnika pam załadowany został adres pierwszej próbki sygnału. W pierwszej linii wyświetlono cztery pierwsze wartości próbek sygnału. W drugiej linii wyświetlono wartość średnią oraz amplitudę sygnału. Do wskaźnika pam załadowany został adres pierwszej próbki. Trzecia wersja programu (załącznik Z.2.2 wersja programu c oraz katalog c\pr4 - obl sr i ampl\4c ) wyświetla na ekranie wartości średnie oraz amplitudy sygnałów,

wyskalowane do rzeczywistych wartości fizycznych. Sposób obliczenia amplitudy w tej wersji programu przedstawiono poniŝej. /* OBLICZENIE AMPLITUDY KANAL */ amplituda = ; pam = x222; for (licz = ; licz < 8; licz++) modul = *pam - 25; if (modul < ) modul = modul * -; amplituda = amplituda + modul; pam++; amplituda = (amplituda/6) * 3,4; amplituda = amplituda / 5,8; /* OBLICZENIE AMPLITUDY KANAL */ amplituda = ; pam = x223; for (licz = ; licz < 8; licz++) modul = *pam - 25; if (modul < ) modul = modul * -; amplituda = amplituda + modul; pam++; amplituda = (amplituda/6) * 3,4; amplituda = amplituda / 5,8; pozwolenie = ; lcd_clr(); printf ("S=%.fV A=%.fV\n",srednia,amplituda); printf ("S=%.fV A=%.fA",srednia,amplituda); Od poprzednich wersji programu, tę wersję odróŝnia tylko dodatkowe dzielenie zmiennej amplituda przez 5,8 oraz sposób wyświetlania zawierający jednostki mierzonych sygnałów.