Mikrosystemy Pomiarowe i Procesory Sygnałowe



Podobne dokumenty
Ćw. 1 Wprowadzenie: Obsługa mikroprocesorowych modułów, podstawy techniki programowania, obsługa operacji WE/WY

Systemy Pomiarowe Wielkości Fizycznych Ćw. 9. Ćw.9 Badanie mikroprocesorowego przetwornika A/C

Mikrosystemy Pomiarowe i Procesory Sygnałowe

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

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

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

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

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Ćw. 12. Akwizycja sygnałów w komputerowych systemach pomiarowych ( NI DAQPad-6015 )

Parametryzacja przetworników analogowocyfrowych

Wstęp Architektura... 13

Przetworniki AC i CA

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Rejestratory Sił, Naprężeń.

Szkolenia specjalistyczne

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

Oprogramowanie Systemów Pomiarowych

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

Ćw. 10 Badanie toru przetwarzania C/A w mikrokontrolerach analogowych

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

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

ZAKŁAD SYSTEMÓW ELEKTRONICZNYCH I TELEKOMUNIKACYJNYCH Laboratorium Podstaw Telekomunikacji WPŁYW SZUMÓW NA TRANSMISJĘ CYFROWĄ

APPLICATION OF ADUC MICROCONTROLLER MANUFACTURED BY ANALOG DEVICES FOR PRECISION TENSOMETER MEASUREMENT

interfejs szeregowy wyświetlaczy do systemów PLC

1. Opis. 2. Wymagania sprzętowe:

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1.

Kod produktu: MP01105

MIKROKONTROLERY I MIKROPROCESORY

Przetwarzanie A/C i C/A

1. Podstawowe wiadomości Możliwości sprzętowe Połączenia elektryczne Elementy funkcjonalne programów...

MIKROPROCESORY architektura i programowanie

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

Politechnika Warszawska

Instytut Teleinformatyki

Podstawy budowy wirtualnych przyrządów pomiarowych

1.2. Architektura rdzenia ARM Cortex-M3...16

Przetwarzanie AC i CA

dokument DOK wersja 1.0

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

2. Architektura mikrokontrolerów PIC16F8x... 13

Instytut Teleinformatyki

Przetwornik analogowo-cyfrowy

Zastosowania mikrokontrolerów w przemyśle

Kod produktu: MP01105T

Start Bity Bit Stop 1 Bit Par Rys. 1

Interfejsy komunikacyjne pomiary sygnałów losowych i pseudolosowych. Instrukcja do ćwiczenia laboratoryjnego

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

Generator przebiegów pomiarowych Ex-GPP2

Interfejs analogowy LDN-...-AN

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Przetworniki analogowo-cyfrowe (A/C)

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

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

1. Wstęp Różnice pomiędzy mikrokontrolerami ST7 a ST7LITE Rdzeń mikrokontrolerów ST7FLITE... 15

Programowanie mikrokontrolerów. 8 listopada 2007

Kurs Podstawowy S7. Spis treści. Dzień 1

Ćwiczenie 31 Temat: Analogowe układy multiplekserów i demultiplekserów. Układ jednostki arytmetyczno-logicznej (ALU).

Przetworniki analogowo - cyfrowe CELE ĆWICZEŃ PODSTAWY TEORETYCZNE Zasada pracy przetwornika A/C

Laboratorium Komputerowe Systemy Pomiarowe

Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa

E-TRONIX Sterownik Uniwersalny SU 1.2

1. Zasilacz mocy AC/ DC programowany 1 sztuka. 2. Oscyloskop cyfrowy z pomiarem - 2 sztuki 3. Oscyloskop cyfrowy profesjonalny 1 sztuka

Konfiguracja i programowanie sterownika GE Fanuc VersaMax z modelem procesu przepływów i mieszania cieczy

Hardware mikrokontrolera X51

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

TECHNIKA MIKROPROCESOROWA

1 Badanie aplikacji timera 555

Konfigurator Modbus. Instrukcja obsługi programu Konfigurator Modbus. wyprodukowano dla

Uśrednianie napięć zakłóconych

Badanie właściwości multipleksera analogowego

Instytut Teleinformatyki

Technika Mikroprocesorowa

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

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

ASTOR IC200ALG320 4 wyjścia analogowe prądowe. Rozdzielczość 12 bitów. Kod: B8. 4-kanałowy moduł ALG320 przetwarza sygnały cyfrowe o rozdzielczości 12

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Kurs Zaawansowany S7. Spis treści. Dzień 1

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

TERMINAL DO PROGRAMOWANIA PRZETWORNIKÓW SERII LMPT I LSPT MTH-21 INSTRUKCJA OBSŁUGI I EKSPLOATACJI. Wrocław, lipiec 1999 r.

Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej

Instrukcja do oprogramowania ENAP DEC-1

Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA

Przykładowe pytania DSP 1

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Temat nr 5. System czasu rzeczywistego bazujący na stałopozycyjnym procesorze sygnałowym. LABORATORIUM Procesory i komputery przemysłowe

Laboratorium Asemblerów, WZEW, AGH WFiIS Tester NMOS ów

Instrukcja użytkownika ARSoft-WZ1

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Spis treści. Dzień 1. I Rozpoczęcie pracy ze sterownikiem (wersja 1707) II Bloki danych (wersja 1707) ZAAWANSOWANY TIA DLA S7-300/400

projekt przetwornika inteligentnego do pomiaru wysokości i prędkości pionowej BSP podczas fazy lądowania;

Modulatory PWM CELE ĆWICZEŃ PODSTAWY TEORETYCZNE

MCAR Robot mobilny z procesorem AVR Atmega32

MIKROPROCESORY architektura i programowanie

Układy czasowo-licznikowe w systemach mikroprocesorowych

8-bitowe mikrokontrolery ADuC firmy Analog Devices w układach pomiarowych

Konfiguracja i programowanie PLC Siemens SIMATIC S7 i panelu tekstowego w układzie sterowania napędami elektrycznymi. Przebieg ćwiczenia

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Teoria przetwarzania A/C i C/A.

Instrukcja do ćwiczeń

Programowanie w językach asemblera i C

Transkrypt:

WYKAZ ĆWICZEŃ LABORATORYJNYCH Mikrosystemy Pomiarowe i Procesory Sygnałowe ET-DI 1. Omówienie zasad pracy w laboratorium. Wprowadzenie do obsługi minimodułów bazujących na mikrokontrolerach typu PB-552, MM-552, ADUC812 (architektura minimodułów, włączanie, obsługa, translator, konsolidator, programowanie i uruchamianie). 2. Programowane moduły zliczające w pomiarach interwału czasu, okresu i częstotliwości 3. Przetwornik A/C, przetwarzanie wielokanałowe wolnozmiennych sygnałów napięciowych - moduł μp 80C552 4. Mikrosystem szybkiego przetwarzania A/C (ADuC 812, ADuC831, ADuC7020) 5. Badanie 24-bitowego przetwornika Σ-Δ mikrokonwertera (ADuC824, ADuC834) 6. Kalibracja mikroprocesorowych przetworników A/C (AduC812, ADuC824) 7. Procesory sygnałowe projektowanie i badanie filtru cyfrowego 8. Odrabianie zaległości, zaliczenie

Wprowadzenie: Obsługa mikroprocesorowych modułów, podstawy techniki programowania, obsługa operacji WE/WY Problemy teoretyczne: Podstawy architektury mikrokontrolerów i mikrokonwerterów pamięć programu, pamięć danych, interfejs komunikacyjny RS-232, moduły programowanych liczników/dzielników, system przerwań. języki programowania mikrokontrolerów analogowych, środowisko programowe, emulatory programowe i sprzętowe obsługa operacji WE/WY, przechwytywanie strumieni danych przy pomocy terminala Program ćwiczenia: 1. Uruchomić mikrokomputer PC system operacyjny WINDOWS XP i zalogować się w systemie jako użytkownik student (bez hasła). 2. W folderze C:\MikroSYS\ założyć unikalny folder dla studenckiej grupy laboratoryjnej (tylko w tym folderze można dokonywać zapisów i modyfikacji własnych plików). 3. Zapoznać się z podstawowymi własnościami mikrokonwerterów ADuc8xx (pliki: AduC8xx.pdf): multiplekser kanałów analogowych, układ T-H, przetwornik A/C, napięcie referencyjne przetwornika, metody transferu danych uzyskiwanych z przetwornika, kanał monitorowania temperatury układu mikrokonwertera, pamięć (organizacja pamięci programu, pamięci danych, pamięci zewnętrznej, rodzaje pamięci, procesor rdzeniowy 8051, podstawowe własności, zegar systemowy, liczniki/dzielniki, porty WE/WY, moduły dodatkowe, zasilanie, urządzenia peryferyjne (moduły transmisji szeregowej, transmisji I 2 C, moduł nadzorcy systemu, moduł kontrolera zasilania), zastosowania modułu mikrokonwertera. 4. Zapoznać się z modułem typu EVAL-KIT ADuC8xx (zasilanie, konfigurowanie pamięci, podłączanie zewnętrznych analogowych sygnałów testowych: sinus, trójkąt, prostokąt)

t 0 1 2 3 4 5 6 7 khz x(t) y(t) U DC A x Reg. f x x1 x10 x100 x1000 oscyloskop Generator / Częstościomierz moduł ADuC831 AI7 AI6 AI5 AI4 AI3 AI2 AI1 AI0 Sensor temp. U REF A GND T/H rdzeń 8051/52 A/C U REF 2.5V RAM zewn. 2kB mikrokomputer UART RS232 Rys. 1. Schemat blokowy układu testowania przetwornika A/C modułu mikrokonwertera ADuC8xx. (a) SW1 & SW3 (b) wciśnij SW3 (c) wciśnij SW1 SW1 (RESET=0) SW3 (PSEN=1) SW1 (RESET=0) SW3 (PSEN=0) SW1 (RESET=1) SW3 (PSEN=1) (d) zwolnij SW1 (e) zwolnij SW3 SW1 (RESET=0) SW3 (PSEN=0) SW1 (RESET=0) SW3 (PSEN=1) Rys. 2. Zasada wprowadzenia modułu ADuC8xx w tryb ładowania programu użytkownika (SW1-RESET, SW3-Serial_Download kolejność wciskania i zwalnia przycisków). 5. Uruchomić program komunikacyjny HyperTerminal (ADuC8xx.ht), dostosować port oraz parametry transmisji do współpracy z minimodułem: - kanał komunikacyjny COM1: parametry transmisji (prędkość transmisji- 9600bitów/sek, 8 bitów danych, parzystość/brak, 1 bit stopu, brak sterowania przepływem danych, bufor FIFO z zapewnioną zgodnością z UART em 16550. - konfiguracja terminala ANSI. 6. Uruchomić i zapoznać się z obsługą pakietu programowego μvision2 do edycji, kompilowania, konsolidowania i uruchamiania aplikacji użytkownika w środowisku C- Keil (GS51.pdf) 7. W środowisku μvision2 zweryfikować parametry przetwarzania projektu (kompilacja, konsolidacja, hex-konwersja) stosując poniższe parametry: - opcje kompilacji C51 CD SB DB OE ROM(Small) Large - opcje konsolidacji BL51 NOOL RS(256) PL(68) PW(78) CO(0)

8. Załadować i uruchomić własny projekt Cw1_8xx.uv2 zawierający pojedynczy moduł programu Cw1_8xx.c. W pliku źródłowym ustalić sekcje: definicji typu mikrokroprocesora zakresu dostępnych zasobów pamięci RAM/ROM zmiennych predefiniowanych zmiennych globalnych programu procedur WE/WY (#include <stdio.h>) aktywowania kanału komunikacynego np.: CFG831=0x11; // Uaktywnij pamiec 2kB pamieci RAM jako XDATA // KONFIGURACJA portu transmisji szeregowej - UART T3CON=0x085; // specjalizowany licznik L3 T3FD= 0x08; // szybkość transmisji 9600baud SCON = 0x052; printf("%ctestowanie PRZETWORNIKA A/C \n", 0x0C); 9. Przeprowadzić proces załadowania opracowanego modułu programowego (downloading) *.hex przy pomocy programu WSD.EXE (ustalić parametry downloadingu związane z parametrami kanału komunikacyjnego oraz zakresu procedur czyszczenia pamięci FlashEE). 10. Przetestować działanie: procedury restartu mikrokonwertera (wciśnięcie przycisku RESET), instrukcji scanf i wprowadzanie danych w zapisie: tekstowym i całkowitoliczbowym w postaci dziesiętnej i heksadecymalnej, instrukcji printf i wyprowadzanie danych w zapisie: tekstowym i całkowitoliczbowym w postaci dziesiętnej i heksadecymalnej, obsługi przycisku kontrolnego INT0 (powiązać działanie przycisku zobsługą przerwania sprzętowego) obsługi jednobitowych wskaźników typu LED

Rys. 3. Schemat blokowy mikrokonwertera AduC 831. f sampl sygnał wyzwalający przetwornik A/C Rys. 4. Schemat blokowy zegara/licznika-l2 pracującego w 16-bitowym trybie auto-przeładowania i generującego sygnał wyzwalania przetwornika A/C.

Przykładowy program obsługi mikrokonwertera: (kolorem szarym zaznaczono linie źródłowe związane z zadawaniem częstości próbkowania) #include <ADuC831.h> #include <stdio.h> // predefiniowane symbole ADuC831 #define SENSTEMP 8 // kanal 8 #define DMASTOP 15 // DMA-> STOP #define DZ 18 // dzielnik Licznika2, zadawanie częstotliwości próbkowania // ZMIENNE DEFINIOWANE W WEWNETRZNEJ PAMIECI RAM idata int xdata *ptr; idata int num; bdata bit C; sbit P32 = P3^2; // linia INT0 = Port3.2 - przelacznik Int0 sbit LED = P3^4; // dioda LED idata unsigned char ch; // numer przetwarzanego kanalu xdata int DMASTART[1024]; // segment pamieci dla przeslan DMA // Procedura obslugi przerwania generowanego sygnalem ADCI z przetw. ADC void end_of_adc(void) interrupt 6 { // int_6*8+3 = 51dec = 33hex = ADCI TR2=0; // zakoncz wyzwalanie przetwornika C=0; // zeruj wskaznik } // Procedura obslugi przerwania generowanego sygn. zewnetrznym INT0 // W obsludze tego przerwania realizujemy pomiar temperatury void interrupt_0 () interrupt 0 { int T; } ADCCON1 = 0x80; ADCCON2 = SENSTEMP; for (T=0; T<100; T++) ; SCONV = 1; while (!ADCI); T=((ADCDATAH & 0x0F) * 256) + ADCDATAL; ADCCON1=0x00; printf ( "\ntemperatura binarnie = %u bit",t ); // wlaczenie zasilania przetwornika // wlaczenie sensora temp. // opoznienie programowe // rozkaz pojedynczej konwersji // oczekiowanie na zakonczeniu konwersji SCCONV<=0 // odbior wyniku przetwarzania // wylaczenie zasiolania przetwornika // wyswietlenie binarnej wartosci wyniku przetwarzania A/C main() { int i, DMACOUNT; CFG831=0x11; // Uaktywnij pamiec 2kB pamieci RAM jako XDATA // KONFIGURACJA portu transmisji szeregowej - UART T3CON=0x085; // specjalizowany licznik L3 T3FD= 0x08; // szybkość transmisji 9600baud SCON = 0x052; printf("%ctestowanie PRZETWORNIKA A/C \n", 0x0C); printf("\nwprowadz numer kanalu przetwarzania A/C (0-15):?"); // Numer przetwarzaniego kanalu scanf ("%bd", &ch); ch&=0xf; // liczba: od 0 do 14 printf("\npodaj liczbe probek sygnalu pomiarowego DMACOUNT:?"); // Liczba próbek mierzonego sygnału scanf ("%u", &DMACOUNT); printf("\nwybrales kanal nr=%bd i N=%d probek sygnalu badanego", ch, DMACOUNT); // PRE-KONFIGURACJA zewnetrznej RAM dla DMA w pojedynczym kanale for(i=0; i<dmacount; i++) DMASTART[i] = ch << 12; DMASTART[i]=DMASTOP << 12; // Zancznik konca bloku danych pomiarowych: Stop DMA for (i=0; i<=dmacount; i++) { // Wydruk kontrolny prekonfigurowanego obszaru RAM if (i % 8 ==0) printf("\n"); printf("%3d=%04x ", i, DMASTART[i] ); } // KONFIGURACJA ADC dla konwersji typu DMA... DMAL=0; // adres inicjujacy kanal operacji DMA DMAH=0; DMAP=0; // koniecznie w takim porzadku: DMAL, DMAH, DMAP) TL2,TH2=0; // Fsys=11059200Hz

RCAP2L=0x10000-DZ; RCAP2H=(0x10000-DZ)>>8; ADCCON1=0x9E; ADCCON2=0x40; C=1; EA=1; EADC=1; TR2=1; // Tosc=12/Fosc -> 1.085us // okres probkowania = T2 =(DZ*1.085us) // [RCAP2H,RCAP2L]= 65536 - DZ // tryb zasilania -> normaly // tryb przesylania danych -> DMA // wyzwalanie przetwornika -> Timer2 // lokany wskaznik warunku // globalne zezwolenie obslugi przerwan // zezwolenie obslugi przerwan przetwornika ADC // zezwolenie na prace licznika L2 // Trwa konwersja i przesylanie danych DMA // kiedy transmisja DMA jest kompletna, przetwornik ADC generuje // przerwanie i zeruje bit C while (C); // wynik przetwarzania ADC jest juz dostepny w RAM EA=0; // wstrzymana obsluga przerwan - globalnie EADC=0; // wstrzymana obsluga przerwan od przetwornika A/C ADCCON1=0x00; // zasilanie przetwornika wylaczone for(i=0; i<=dmacount; i++) { // wydruk kontrony zawartosci pamieci RAM if (i % 8== 0) printf("\n"); printf("%3d=%04x ", i, DMASTART[i] ); } // wydruk kontrolny w postaci slupka danych for(i=0; i<=dmacount; i++) printf("\n%4u ", DMASTART[i] & 0x0FFF ); printf("\n"); IT0=1; // zezwolenie na obsluge przerwania 0 EA=1; // zezwolenie na obsluge przerwan EX0=1; // zezwolenie na obsluge przerwania zewnetrznego INT0 (przycisk) printf("\nczekam na INT0\n"); while(1) { for (i=0; i<30000; i++) ; LED = ~LED ; } } // KONIEC // Test przetwarzania w trybie pojedynczej konwersji A/C // opoznienie programowe // negacja stanu wysterowania diody LED na przeciwny (panel hyperterminala) PRZYKŁADOWE WYNIKI TESTOWANIE PRZETWORNIKA A/C Wprowadz numer kanalu przetwarzania A/C (0-15):?0 Podaj liczbe probek sygnalu pomiarowego DMACOUNT:?128 Wybrales kanal nr=0 i N=128 probek sygnalu badanego 0=0000 1=0000 2=0000 3=0000 4=0000 5=0000 6=0000 7=0000 8=0000 9=0000 10=0000 11=0000 12=0000 13=0000 14=0000 15=0000... 112=0000 113=0000 114=0000 115=0000 116=0000 117=0000 118=0000 119=0000 120=0000 121=0000 122=0000 123=0000 124=0000 125=0000 126=0000 127=0000 128=F000 0=05C9 1=0535 2=04A7 3=0424 4=03AB 5=033F 6=02E4 7=029D 8=0262 9=0236 10=021B 11=020A 12=0220 13=0242 14=0271 15=02B1... 120=038C 121=0400 122=0482 123=050E 124=05A1 125=0639 126=06D3 127=0000 128=F000... 1154 1294 1441 1593 1747... Czekam na INT0 Temperatura binarnie = 1064 bit Temperatura binarnie = 1064 bit Temperatura binarnie = 1064 bit...

Przykłady inicjalizacji portów transmisji szeregowej dla wybranych typów mikrokontrolerów analogowych #ifdef ADuC831 CFG831=0x01; // Uaktywnij pamiec 2kB pamieci RAM jako XDATA T3CON=0x085; // KONFIGURACJA portu transmisji szeregowej - UART T3FD=0x08; SCON=0x052; #endif #ifdef ADuC812 // KONFIGURACJA portu transmisji szeregowej - UART SCON = 0x52; // 8bit, nieparzystosc, 1 bit stopu TMOD = 0x20; // konfiguracja Timer1.. TH1 = 0xFD; //..dla predkosci transmisji 9600[b/s] (baud) TR1 = 1; #endif #ifdef ADuC834 CFG834=0x01; // Uaktywnij pamiec 2kB pamieci RAM jako XDATA T3CON = 0x82; T3FD = 0x12; SCON = 0x52; #endif #ifdef ADuC824 RCAP2H=0xFFh; // config UART for 9830baud RCAP2L=-5; // (close enough to 9600baud) TH2=0xFFh; TL2=-5; SCON=0x52h; T2CON=0x34h; #endif

Ćw. 2. Programowane moduły zliczające w pomiarach interwału czasu, okresu i częstotliwości Zagadnienia ogólne: architektura mikrokontrolera rodziny INTEL 80C552, moduł mikrokontrolera typu PB-552 techniki programowania w językach: asembler A-51 i C-51 (struktura programu, kompilacja, konsolidacja). wybrane algorytmy obsługi urządzeń WE/WY rodziny układów serii 8051. programowa obsługa wyświetlacza ciekłokrystalicznego i klawiatur funkcyjnych. zasady obsługi programowanych zegarów/liczników (w szczególności L2) analiza rozwiązań programowo-sprzętowych małych interwałów czasu, analiza rozwiązań programowo-sprzętowych dużych interwałów czasu. Program ćwiczenia: badany sygnał f x rejestr CT0 licznika L2 jednobitowy wskaźnik wpisu do rejestru CT0 CTI0 CTL0 CTH0 INT rejestr licznika L2 f osc =11,0592MHz 1/12 Dzielnik wstępny T2H 1/2/4/8 moduł licznika L2 wewnętrzna 16 bit. magistrala danych T2L PRZERWANIE (INT): 16 bitowe przepełnienie licznika L2 Rys. 1. Schemat blokowy struktury układu do pomiaru okresu i częstotliwości przy wykorzystaniu struktury układu licznikowego L2. Bieżący stan licznika L2 65535 65534 65533 INT14 Przepełnienie licznika L2 Przerwania INT14 Przepełnienie licznika L2 25537 25538 25539 + 00002 00001 00000 Sygnał f x Sygnał f osc t N Stan licznika L2 rejestrowany 1 N 2 w rejestrze CT0 (CTH0, CTL0) Rys. 2. Wykres czasowy zdarzeń związanych z pomiarem okresu i częstotliwości układem licznikowym L2 (80C552) 1. Zapoznać się ze strukturą minimodułu PB-552 (pamięć ROM, pamięć RAM, układy peryferyjne moduły zegarów/liczników).

2. Zapoznać się ze sposobem obsługi minimodułu PB-552 oraz programem Monitor Diagnostyczny Minimodułu. W tym celu należy: uruchomić minikomputer w trybie MS-DOS (opcja startowa menu: C 51), w katalogu C:\KEIL\ utworzyć poleceniem md name nowy katalog o unikalnej nazwie name. Z katalogu C:\KEIL\WZORC skopiować do katalogu name pliki: c.bat oraz pom_okr.c uruchomić program terminal komunikacyjny term90.exe, przeprowadzić konfigurację kanału transmisji szeregowej do łączności z modułem PB-552 (parametry transmisji RS232: COM2, 9600, *, N, 1 ) oraz ustawić ścieżki dostępu do swojego katalogu, MODUL DIAGNOSTYCZNY 80C552 v3 [16kB ROM] >H L - LOAD HEX G - START A - KONW. A/C H - help X=[adr] - RAM EXTERNAL C=[adr] - ROM I - RAM INTERNAL MX[adr]=[hex] - RAM EXTERNAL MI[adr]=[hex] - RAM INTERNAL P - display porty O Port_[n]=[hex] - USTAW port 8 bit S[p].[l] - SET port [p], linia [l] R[p].[l] - RESET port [p], linia [l] F=[pwmp] - dzielnik W[n]=[pwm] - wypelnienie DC=[hex], DW=[hex], DR=HEX, DA:text[CR]- LCD Z - RTC->LED T - RTC->terminal > zweryfikować działanie podstawowych funkcji modułu. 3. Zapoznać się z zawartością źródłową programu pom_okr.c do pomiaru okresu i częstotliwości. Jako źródło sygnału pomiarowego wykorzystać generator i częstościomierz typu MS-9140. 4. Przeprowadzić kompilację, konsolidację i konwersję pliku pom_okr.c poleceniem c.bat 5. Przeprowadzić proces ładowania programu pom_okr.hex do pamięci minimodułu poleceniem L, 6. Uruchomić testowany program poleceniem G 7. Zestawić układ pomiarowy: źródło sygnałów pomiarowych generator funkcyjny MS-9140 (wyjście TTL), minimoduł mikroprocesora PB552, oscyloskop pomiarowy. 8. Przeprowadzić proces testowania programu częstościomierza zmieniając częstotliwość generatora funkcyjnego MS-9140 (wyjście TTL), zaobserwować i porównać wskazania częstotliwościomierzem MS-9140, przeprowadzić analizę uzyskanych wyników. 9. Zaproponować rozwiązania programowe (modyfikacje programu pom_okr.c) zmierzające do rozszerzenia zakresu pomiarowego.

Program pomiaru okresu (częstotliwości) - PB552 #include <stdio.h> #include <reg552.h> idata union { struct { char hi, lo; } byte; unsigned int word; } N1, N2; idata unsigned N; idata unsigned long LN; static idata unsigned char irq; float Tosc,Tx,Fx; void T2_int() interrupt 14 { irq++; T20V=0; } main() { TM2CON=0x81; CTCON=0x01; Tosc=12.0/11059200.0; EA=1; while (1) { CTI0=0; while (CTI0==0); N1.byte.hi=CTH0; N1.byte.lo=CTL0; /* odbierz wartosc T2 */ } /* oczekujemy na drugie zbocze i zliczamy przepelnienia */ T20V=0; ET2=1; CTI0=0; while (CTI0==0); ET2=0; /* zablokuj zglaszanie przerwan od przepelnien T2 */ N2.byte.hi=CTH0; N2.byte.lo=CTL0; /* odbierz wartosc N2 */ N=N2.word-N1.word; if (N2.word < N1.word) irq--; LN=N+irq*65536L; Tx=LN*Tosc; Fx=1.0/Tx; printf("\nn1=%5u N2=%5u i=%bu", N1.word, N2.word, irq); printf(" N=%8Lu Tx=%.7f Fx=%5.5f", LN, Tx, Fx); irq=0; }

Ćw. 3. Przetwornik A/C w pomiarach wolnozmiennych sygnałów napięciowych - moduł μp 80C552 Problemy teoretyczne: Próbkowanie i kwantowanie sygnałów analogowych. Przetwornik A/C z równoważeniem wagowym (sukcesywna aproksymacja). Architektura mikrokontrolerów i mikrokonwerterów oraz podstawowe własności przetworników A/C rodziny MCS51. 1. Zapoznać się z budową wewnętrzną μp rodziny mikroprocesorów 80C552 oraz jego podstawowymi parametrami. Wskazać różnice pomiędzy procesorami serii 51 i 552. Zapoznać się z budową oraz zasadą działania modułu przetwornika A/C mikrokontrolera, odnaleźć w instrukcji słowa sterujące jego pracą oraz wyrażenie opisujące wynik przetwarzania (konwersji). 2. Zapoznać się z opisem procedur bibliotecznych obsługi modułu wyświetlacza graficznego LCD. Zaobserwować ich wykorzystanie w przykładowym programie, wpisać i przetestować jego działanie w module μp. 3. Napisać (skopiować z katalogu C:\C51EVAL\ADC552\) moduł programu dokonujący ciągłego pomiaru napięcia w kanale 0 (moduł baterii słonecznej) lub we wszystkich kanałach metodą przeglądania ADC_pol.c oraz procedury obsługi modułu wyświetlacza ciekłokrystalicznego LCD LCD128.c. Wyzwalanie procesu pomiaru powinno być sterowane przy wykorzystaniu zegara/licznika L2). Otrzymane wyniki wyświetlać na ekranie monitora PC i zapisać do pliku przy pomocy terminala komunikacyjnego HyperTerminal procedurą printf(). Część uzyskanych w ten sposób wyników umieścić w sprawozdaniu, krótko omówić otrzymane wyniki. 4. Opracować procedurę wyprowadzania danych w postaci numerycznej na panelu LCD, wykorzystując standardowe procedury biblioteczne. Stworzony program dokładnie opisać (załączyć komentarze) i dołączyć jego wydruk do sprawozdania. W sprawozdaniu umieścić własne spostrzeżenia i wnioski oraz ewentualne propozycje poprawek do procedur obsługi modułu LCD. Literatura: 1. Z.Kulka, A.Libura, M.Nadachowski: Przetworniki analogowo-cyfrowe i cyfrowoanalogowe. WkiŁ, Warszawa 1987 2. ADuC812, MicroConwerter TM, Multichannel 12-Bit ADC with Embedded FLASH MCU, Analog Devices, Rev.0, (plik: ADuC812.pdf) 3. MicroConverterTM QuickStartTM, Applications Board User, ADuC812 52PQFP applications board user guide, V3, (plik: 812pcb.pdf)

OPIS OGÓLNY MIKROPROCESORÓW RODZINY 80C552 Mikroprocesory 80C552 są 8-bitowymi mikrokontrolerami wykonanymi w jednym układzie w zaawansowanej technologii CMOS. Posiadają one tę samą listę instrukcji co μp 80C51. PARAMETRY: Jednostka centralna to 80C51, 8k 8 pamięci ROM rozszerzalnej zewnętrznie do 64 kb, dodatkowy 16-bitowy licznik/timer sprzężony z 4 rejestrami zatrzaskowy- mi oraz 3 rejestrami komparującymi, dwa standardowe 16-bitowe liczniki/timery, 256 8 pamięci RAM rozszerzalnej zewnętrznie do 64 kb, 10-bitowy przetwornik A/C z 8 multipleksowanymi wejściami analogowymi, 8-bitowa rozdzielczość dwóch wyjść z modulacją szerokości impulsu, pięć 8-bitowych portów wejścia/wyjścia plus 8-bitowy port wejść analogowych, szeregowy port transmisyjny we/wy I 2 C-bus z funkcją pracy w trybie master/slave, pełny dwukierunkowy port transmisji szeregowej UART (RS-232c) kompatybilny z standardowym 80C51, wbudowany watchdog timer, 15 źródeł przerwań o dwóch ustalanych poziomach ważności, wbudowany w układ obwód oscylatora oraz czasowy. Jednostka posiada dwa tryby oszczędnościowe energii: tryb idle i power-down. Tryb idle zatrzymuje procesor, pozwalając jednak pracować timerom, RAMowi, portom szeregowym oraz systemowi przerwań. Tryb power-down utrzymuje zawarte w RAMie dane, ale zatrzymuje oscylator a co za tym idzie również pracę wszystkich innych układów i elementów obwodu. Jednostka pracuje również jako procesor arytmetyczny z arytmetyką binarną i BCD. Lista instrukcji procesora 80C552 to ponad 100 rozkazów i instrukcji: 49 jedno bajtowych, 45 dwu bajtowych, 17 trzy bajtowych. Przy 16MHz (24MHz) oscylatorze 58% z nich wykonywanych jest w czasie 0,75μs (0,5μs) i 40% w 1,5μs (1μs). Instrukcje mnożenia i dzielenia zajmują 3μs (2μs).

PRZETWORNIK A/C Obwód wejść analogowych składa się z 8 wejściowego multipleksera i przetwornika A/C o rozdzielczości 10 bitów. Pełna konwersja podanego na wejście/a napięcia na 10 bitowy wynik zajmuje do 50 cykli maszynowych (50μs przy 12 MHz zegarze). Przetwornik A/C obsługują dwa rejestry: ADCH i ADCON. Pierwsze z nich to starsze 8 bitów wyniku konwersji, zaś ADCON jest rejestrem kontrolnym zawierającym w swojej strukturze, prócz bitów kontrolnych i sterujących, na dwóch ostatnich bitach pozostałe dwa (najmłodsze) bity wyniku. Rejestr ADCON (dostęp bitowy, ADCH tylko bajtowo): 7 6 5 4 3 2 1 0 ADC.1 ADC.0 ADEX ADCI ADCS AADR2 AADR1 AADR0 BIT Symbol Funkcja ADCON.7 ADC.1 Pierwszy bit wartości konwersji A/C ADCON.6 ADC.0 Drugi bit wartości konwersji A/C ADCON.5 ADEX Blokada zewnętrznego startu konwersji przez STADC: 0 = konwersja nie może być uruchomiona zewnętrznym sygnałem STADC (pin 3/66); 1 = konwersja może być uruchomiona zewnętrznym sygnałem STADC ADCON.4 ADCI Flaga przerwania od przetwornika A/C. Flaga ta jest ustawiana gdy wynik konwersji jest gotowy do odczytu. Przerwanie jest odebrane jeśli są one uaktywnione. Flaga musi być zerowana programowo, lecz nie może być ustawiana w ten sposób. Start i status przetwarzania. Ustawienie tego bitu rozpoczyna konwersję. Musi być on ustawiany ADCON.3 ADCS programowo lub poprzez zewnętrzny sygnał z pinu STADC. Bit pozostaje 1 w czasie procesu przetwarzania, gdy konwersja zostaje zakończona ADCS zostaje resetowana równocześnie z pojawieniem się przerwania i flagi ADCI. ADCS nie może być zerowany programowo. - / / - ADCON.2 ADCON.1 ADCON.0 ADCI ADCS AADR2 AADR1 AADR0 ADCI ADCS Operacja 0 0 1 1 0 1 0 1 Przetwornik A/C wolny, konwersja może się rozpocząć, Przetwornik A/C zajęty, blokada startu nowej konwersji, Konwersja zakończona, blokada startu nowej konwersji, Stan nie możliwy. Wybór wejścia analogowego. Bity te kodują binarnie jedno z 8 wejść analogowych portu P5 (piny 1,62-66/66) jako wybrane do konwersji. Mogą być ustawiane tylko gdy ADCI i ADCS są w stanie niskim. ADDR2 jest najstarszym ze wspomnianych bitów. [100 oznacza wybór kanału 4] Koniec konwersji A/C jest oznaczany flagą ADCI w rejestrze ADCON, rezultat konwersji jest umieszczany w rejestrze ADCH (8 starszych bitów), pozostałe 2 młodsze bity w rejestrze ADCON.

STADC ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 Multiplekser wejść Analogowych 10-bitowy konwerter A/C + _ Analogowe napięcia odniesienia Analogowe zasilanie Analogowa masa ADCON 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 ADCH 10 Bit Szyna wewnętrzna procesora V V IN DAC + _ Kod wyjściowy 101 100 DA Rejestr Sukcesywnej Aproksymacj i Logika Sterująca Sukcesywną Aproksymacj 011 010 001 000 0 q 2q 3q 4q 5q Pełna Skala 1 V IN Star Stop VIN VDIGITAL Błąd kwantyzacji +q/2 VIN q = LSB = 5 mv 1/2 3/4 7/8 15/16 29/32 59/64 V DAC -q/2 Symetryczny błąd kwantyzacji VIN 0 1 2 3 4 5 6 Schemat zastępczy obwodu Wynik aproksymacji: k Do V Wynik = 1024 AV IN ref + AV AV gdzie u nas: AV ref+ = 5V, AV ref = 0V ref ref V WEJŚCIA Rozdzielczość przetwornika A/C wynosi 10 bitów. Najmłodsze dwa bity umieszczane są jako najstarsze bity słowa ADCON. Pozostałe 8 bitów po konwersji znajduje się w słowie ADCH. R m = 0.5 do 3 kω C S + C C = 15 pf (maksymalnie) R S = zalecane < 9.6 kω dla dokładności 1LSB 12MHz

Algorytmu obsługi wielokanałowego przetwornika A/C ilustrujący wyzwalanie sprzętowe oraz programowe. Sygnał wyzwalający (sprzętowy) STADC generowany jest lokalnie w systemie mikroprocesorowym wykorzystując cykliczne przepełnienia 16-bitowego modułu zegara/licznika L2. Obsługa przetwornika, rejestru kontrolno sterującego ADCON w trybie przeglądania, zastosowano również uproszczony sposób konwersji wyników przy zastosowaniu źródła napięcia referencyjnego AVRef=5.12V. Wyniki konwersji przekazywane są do kanału transmisji szeregowej (możliwość obserwacji wyników na mikrokomputerze przy pomocy emulatora terminala). /************************************************************* * Moduł: adc_pol.c * Aplikacja: Programu demonstracyjny obsługi przetwornika ADC * mikrokontroler typu: 8xC552 * Obsługa przetwornika w trybie przeglądania * UWAGA: * Kanały są skanowane kolejno po narastającym zboczu sygnału STADC, * Sygnał jest podłączony do P4.7i jest powtarzany z okresem repetycji * co 1.14ms. Okres ten jest kontrolowany przez moduł zegara/licznika T2. * Rezultaty przetwarzania przekazywane są kanałem transmisji szeregowej UART. **************************************************************************/ #define ADEX 0x20 #define ADCI 0x10 #define ADCS 0x08 void write_uart (unsigned int *ptr, unsigned int k); void main(void) { unsigned int conversion, result_adc[8]; unsigned char ADC_Channel; S0CON=0x40; /* 8 bits, no parity, 1 STOP bit */ TH1=TL1=0xFD; /* 19200 Baud @11.0592MHz */ PCON=0x80; TMOD=0x20; TR1=1; TM2CON=0x0D; /* źródło sygn. zegarowego T2: osc/96 */ RTE=0x80; /* okres przepełnień: 0.569ms P4.7 zmienia stan na przeciwny co każde 0.569ms ADC konwersja narastającym zboczem sygnału STADC P4.7/STADC: 1.14ms szybkość konwersji */ conversion=0; while (1) { for (ADC_Channel=0; ADC_Channel < 8; ADC_Channel++) { ADCON=0; /* ADCI i ADCS są zerowane */ ADCON=ADC_Channel; /* przed wybraniem numeru kanału ADC */ if (ADC_Channel==0) ADCON=ADEX; /* ADC0: zewnętrzny start konwersji T2 */ else ADCON=ADCON ADCS; /* ADC1..ADC7: programowy start */ while((adcon&adci)==0); /* Czekaj na zakończenie konwersji sprawdzając ADCI */ result_adc[adc_channel]=5*((256*adch+(adcon&0xc0))>>6); /* Oblicz 10 bitowy binarny rezultat przetwarzania dla Uref=5.12V */ } write_uart(&result_adc, conversion++); /* Wyprowadzenie rezulatu do modułu UART */ if (conversion==10000) conversion=0; } }

Procedury obsługi display a Toshiba TLX-1391 128x128 Procedury zostały umieszczone w bibliotece, opis ich funkcji w pliku maciek.h. Poniżej podaję opis i przykłady najważniejszych procedur z powyższej biblioteki. Procedura inicjowania pracy display a: W programie po main() i definicji zmiennych pisz: TLX_INIT();TLX_C(0x9C); PROCEDURY WYPROWADZANIA NAPISÓW, ZNAKÓW, GRAFIKI Procedura wyprowadza zadany text: OUTTEXT(byte w, byte k, char *text); w wiersz (0-15 MAX ), k kolumna (0-21 MAX ), *text napis ujęty w, np. napis Procesor w 10 wierszu i 15 kolumnie: OUTTEXT(10,15, Procesor ); Procedura wyprowadza zadany znak: OUTCHAR(byte w, byte k, char c); w wiersz (0-15 MAX ), k kolumna (0-21 MAX ), c znak ujęty w, np. litera A w 1 wierszu i 18 kolumnie: OUTCHAR(1,18, A ); Procedura odlicza zadany czas: TIME(int t); Procedura wyprowadza sformatowane dane liczbowe (z napisem lub bez): PISZ(byte w, byte k, char *t, int x); w wiersz (0-15 MAX ), k kolumna (0-21 MAX ), *text napis ujęty w, x liczba, zmienna typu int, np. napis Wynik=, a po nim wartość zmiennej dana w 4 wierszu i 2 kolumnie: PISZ(4,2, Wynik=,dana); lub to samo, ale bez napisu: PISZ(4,2,,dana); Procedura wyświetla w podanej komórce (= 6 punktów na ekranie) zadaną w HEX wartość: RYS2(int w, int k, s); x kolumna (0-21 MAX ), y wiersz (0-127 MAX ), s przeliczona na HEX wartość BINarna, przykład przeliczenia 10110011 BIN = B3 HEX ;

Ćw. 4. Mikrosystem szybkiego przetwarzania A/C (ADuC 812, ADuC831, ADuC7020) Problemy teoretyczne: Podstawy architektury mikrokontrolerów i mikrokonwerterów pamięć programu, pamięć danych, interfejs komunikacyjny RS-232, moduły programowanych liczników/dzielników, system przerwań. Teoria próbkowania i kwantowania sygnałów analogowych. Zasada działania przetwornika A/C z równoważeniem wagowym (sukcesywna aproksymacja). Program ćwiczenia: 11. Uruchomić mikrokomputer PC system operacyjny WINDOWS ME w trybie użytkownika student (bez hasła). 12. W folderze C:\KSP\ założyć unikalny folder dla studenckiej grupy laboratoryjnej (tylko w tym folderze można dokonywać zapisów i modyfikacji własnych plików). 13. Zapoznać się z podstawowymi własnościami mikrokonwertera ADuC812 (plik ADuC812.pdf): multiplekser kanałów analogowych, układ T-H, przetwornik A/C, napięcie referencyjne przetwornika, metody transferu danych uzyskiwanych z przetwornika, kanał monitorowania temperatury układu mikrokonwertera, pamięć (organizacja pamięci programu, pamięci danych, pamięci zewnętrznej, rodzaje pamięci, procesor rdzeniowy 8051, podstawowe własności, zegar systemowy, liczniki/dzielniki, porty WE/WY, moduły dodatkowe, zasilanie, urządzenia peryferyjne (moduły transmisji szeregowej, transmisji I 2 C, moduł nadzorcy systemu, moduł kontrolera zasilania), zastosowania modułu mikrokonwertera. 14. Zapoznać się z modułem typu EVAL-KIT ADuC812 (zasilanie, konfigurowanie pamięci przez ustawianie zworek, podłączanie sygnałów testowych: sinus, trójkąt, prostokąt) (plik 812pcb.pdf) AI7 AI6 AI5 AI4 AI3 AI2 AI1 AI0 8 Sensor temp. moduł ADuC812 T/H U REF rdzeń 8051/52 A/C RAM zewn. 32kB mikrokomputer Gen LK7 UART RS232 Rys. 3. Schemat blokowy układu testowania przetwornika A/C modułu mikrokonwerttera ADuC812. 15. Uruchomić program komunikacyjny HyperTerminal (ADuC812.ht), dostosować port oraz parametry transmisji do współpracy z minimodułem: - kanał komunikacyjny COM1: parametry transmisji (prędkość transmisji- 9600bitów/sek, 8 bitów danych, parzystość/brak, 1 bit stopu, brak sterowania przepływem danych, bufor FIFO z zapewnioną zgodnością z UART em 16550.

- konfiguracja terminala ANSI. 16. Uruchomić i zapoznać się z obsługą pakietu programowego μvision2 do edycji, kompilowania, konsolidowania i uruchamiania aplikacji użytkownika w środowisku C- Keil 6.20 (GS51.pdf) 17. Załadować i uruchomić wzorcowy projekt fast.uv2 zawierający pojedynczy moduł programu fast.c. Zapoznać się z postacią źródłową programu. Przedstawić algorytm programu w formie grafu, wskazać fragmenty kodu odpowiedzialne za przygotowanie modułu do konwersji A/C i wyjaśnić znaczenie parametrów przekazywanych do rejestrów wewnętrznych mikrokonwertera. 18. Dokonać modyfikacji programu fast.c tak, aby częstość próbkowania sygnałów analogowych wynosiła x=hz (x-wartość podana przez prowadzącego laboratorium); liczbę próbek mierzonych wielkości ustalić każdorazowo na wartość N=256. W sprawozdaniu przeprowadzić analizę doboru częstości próbkowania związaną z doborem odpowiednich wartości dzielnika częstotliwości systemowej zegara/licznika L2 (Częstotliwość zegara systemowego rdzenia wynosi F clk =11059200Hz) zwrócić uwagę na lokalizację kompilowanych plików i jej wyników. 19. Określić w szybkość bitową przetwornika, częstość próbkowania i czas konwersji przetwornika A/C. 20. W środowisku μvision2 przeprowadzić realizację projektu (kompilacja, konsolidacja, hex-konwersja) stosując poniższe parametry: - opcje kompilacji C51 CD SB DB OE ROM(Small) Large - opcje konsolidacji BL51 NOOL RS(256) PL(68) PW(78) CO(0) 21. Dokonać zmiany konfiguracji pamięci programu minimodułu przy pomocy zworki LK3 (PSEN Pulldown) pozycja zwarta i przy pomocy programu HyperTerminal (na pulpicie skrót: AduC812.ht) załadować binarną wersję przygotowanego programu (fast.hex) do pamięci programu (typ Flash/EE) mikrokontrolera (proces down-loadingu). zewrzeć zworkę LK3, wcisnąć przycisk RESET minimodułu minimoduł zgłasza się komunikatem na pulpicie HyperTerminala: ADuC812 krl wysłać plik fast.hex do minimodułu (zakładka Transfer -> Wyślij plik tekstowy... -> Nazwa_pliku (fast.hex), podczas transmisji każdy poprawnie przetransmitowany rekord potwierdzany jest wyświetleniem znaku. Rozewrzeć zworkę LK3, wcisnąć przycisk RESET minimodułu - uruchomienie załadowanego programu. 22. Przy pomocy programu HyperTerminal odebrać i zarejestrować do plików tekstowych wyniki przetwarzania. Zrealizować 3 procesy rejestracji dla kanału pomiarowego Ain=0 dla sygnałów analogowych uzyskiwanych z generatora minimodułu: LK7 (1-2) przebieg piłokształtny, LK7 (3-4) przebieg prostokątny, LK7 (5-6) przebieg sinusoidalny. Do rejestrowania wyników pomiarów wykorzystać funkcję Transfer/Przechwyć tekst/plik.txt programu Hyperterminala. 23. Opracować wyniki pomiarów poprzez przeniesienie danych ze schowka HyperTerminala np. do aplikacji EXCEL, dokonać konwersji wyników z postaci binarnej do wielkości fizycznej (napięcie, temperatura), wyniki przedstawić w postaci graficznej w jednostkach fizycznych wielkości mierzonych (napięcie [V] lub [mv], czas [s], [ms] lub [μs]). Na podstawie przeprowadzonych pomiarów dokonać oceny podstawowych parametrów mierzonych sygnałów (amplituda, wartość średnia, wartość skuteczna, wartość maksymalna, czas obserwacji, okres, częstotliwość, współczynnik wypełnienia).

24. Zarejestrować kilka pomiarów temperatury wewnętrznego czujnika temperatury mikrokonwertera (kolejne wciśnięcia przyciski INT pakietu minimodułu). Dokonać konwersji binarnego wyniku przetwarzania do wielkości fizycznej temperatury mierzonej w stopniach Celsjusza (niezbędne dane do przeprowadzenia konwersji związane z budową czujnika temperatury przedstawiono na rys. 3 - dokumentacja ADuC812.pdf). Przeprowadzić analizę uzyskanych wyników pomiaru. Rys. 4. Charakterystyka przetwarzania przetwornika A/C mikrokonwertera ADuC812. θ [ C] -3mV/ C 25 C 600mV U [mv] Rys. 5. Parametry wewnętrznego czujnika temperatury mikrokonwertera AduC812. 25. Zrealizować procedurę restartu mikrokonwertera (wciśnięcie przycisku RESET) z jednoczesnym podtrzymywaniem wciśniętego przycisku INT. Zaobserwować w wersji źródłowej programu realizowane dodatkowe ścieżki pobierania 4 bajtów z pamięci Flash/EE do rejestrów ADCOFS i rejestru ADCGAIN (rejestry kalibracji przetwornika). 26. Powtórzyć p.14 pomiarów, porównać i przeanalizować uzyskane wyniki. 27. Zaproponować algorytmy pomiarowe obliczania wartości średniej i skutecznej napięcia dla N-próbek sygnału cyfrowego. Literatura: 1. Z.Kulka, A.Libura, M.Nadachowski: Przetworniki analogowo-cyfrowe i cyfrowoanalogowe. WKiŁ, Warszawa 1987 2. Rudy van de Plassche: Scalone przetworniki analogowo-cyfrowe i cyfrowo-analogowe. WKiŁ, Warszawa 2001. 3. ADuC812, MicroConwerter TM, Multichannel 12-Bit ADC with Embedded FLASH MCU, Analog Devices, Rev.0, (plik: ADuC812.pdf) 4. MicroConverterTM QuickStartTM, Applications Board User, ADuC812 52PQFP applications board user guide, V3, (plik: 812pcb.pdf)

Pomiary wartości DC/RMS DC wartość średnia Poziom DC sygnału analogowego dla sygnału analogowgo RMS wartość skuteczna dla sygnału cyfrowego dla sygnału analogowego dla sygnału cyfrowego FFT transformata Fouriera

Rys. 6. Schemat blokowy mikrokonwertera ADuC 812. 2 f sampl sygnał wyzwalający przetwornik A/C Rys. 5. Schemat blokowy zegara/licznika-l2 pracującego w 16-bitowym trybie auto-przeładowania i generującego sygnał wyzwalania przetwornika A/C. Rys.6. Fragment schematu ilustrujący połączenia demonstracyjnego obwodu do pomiaru temperatury wraz z przełącznikiem DIP-S1.

Przykładowy program obsługi mikrokonwertera: (kolorem szarym zaznaczono linie źródłowe związane z zadawaniem częstości próbkowania) #include <ADuC812.h> // predefiniowane symbole ADuC812 #include <stdio.h> #define SENSTEMP 8 // kanal 8 #define DMASTOP 15 // DMA-> STOP #define DZ 18 // dzielnik Licznika2 #define DMACOUNT 256 // liczba przeslan DMA z przetwornika A/C // ZMIENNE DEFINIOWANE W WEWNETRZNEJ PAMIECI RAM idata int xdata *ptr; idata int num; bdata bit C; sbit P32 = P3^2; // linia INT0 = Port3.2 - przelacznik Int0 sbit LED = P3^4; // dioda LED idata unsigned char ch; // numer przetwarzanego kanalu xdata int DMASTART[ DMACOUNT + 1]; // rezerwacja bufora pamieci dla przeslan DMA // Procedura obslugi przerwania generowanego sygnalem ADCI z przetw. A/C void end_of_adc(void) interrupt 6 { // int_6*8+3 = 51dec = 33hex = ADCI TR2=0; // zakoncz wyzwalanie przetwornika C=0; // zeruj wskaznik } // Procedura obslugi przerwania generowanego sygn. zewnetrznym INT0 // W obsludze tego przerwania realizujemy pomiar temperatury void interrupt_0 () interrupt 0 { int T; ADCCON1 = 0x6C; // wlaczenie zasilania przetwornika ADCCON2 = 0x00 SENSTEMP; // wlaczenie sensora temp. ADCCON3 = 0; SCONV = 1; // rozkaz pojedynczej konwersji while (!ADCI); // oczekiowanie na zakonczeniu konwersji SCCONV<=0 T=((ADCDATAH & 0x0F) * 256) + ADCDATAL; // odbior wyniku przetwarzania // tu pojawia sie komunikat ostrzezenia podczas kompilacji... // kto wie dlaczego?? printf ("\ntemperatura binarnie = %u bit",t ); } main() { int i; // program analizuje stan przycisku INT0 // jesli wcisniety - to pobranie wspolczynnikow kalibracji uzytkownika // jesli nie wcisniety - to pobranie wspolczynnikow kalibracji producenta if (P32==0) { EADRL=0; // wskaznik segmentu pamieci Flash/EE ECON=1; // czytaj dane ze strony 0 do EDATA1,2,3,4 ADCOFSL=EDATA1; // wpisz nowe wspolczynniki kalibracji A/C... ADCOFSH=EDATA2; ADCGAINL=EDATA3; ADCGAINH=EDATA4; } ch=0; // tu wybieramy Nr kanalu do przetwarzania A/C // KONFIGURACJA portu transmisji szeregowej - UART SCON = 0x52; // 8bit, nieparzystosc, 1 bit stopu TMOD = 0x20; // konfiguracja Timer1.. TH1 = 0xFD; //..dla predkosci transmisji 9600[b/s] (baud) TR1 = 1; // PRE-KONFIGURACJA zewnetrznej RAM dla DMA for(i=0; i<dmacount; i++) DMASTART[i] = ch << 12; DMASTART[i]=DMASTOP << 12; // Stop DMA // identyfikator cwiczacej grupy printf("%claboratorium KSP\n", 0x0C); // weryfikacja pre-konfigurowanego obszaru RAM for (i=0; i<=dmacount; i++) {

if (i % 8 ==0) printf("\n"); printf("%3d=%04x ", i, DMASTART[i] ); } // KONFIGURACJA ADC dla konwersji typu DMA... DMAL=0; // adres inicjujacy kanal operacji DMA DMAH=0; DMAP=0; // koniecznie w takim porzadku: DMAL, DMAH, DMAP) TL2=0; TH2=0; // OKRESLENIE CZESTOSCI PROBKOWANIA // Fsys=11059200Hz // Tosc=12/Fosc -> 1.085us RCAP2L=0x10000-DZ; RCAP2H=(0x10000-DZ)>>8; ADCCON2=0x40; // tryb przesylania danych -> DMA ADCCON1=0x62; // tryb zasilania -> normaly // Uruchomienie sprzetu... system przerwan, licznik L2 C=1; // lokany wskaznik EA=1; // globalne zezwolenie obslugi przerwan EADC=1; // zezwolenie obslugi przerwan przetwornika ADC TR2=1; // zezwolenie na prace licznika L2 // Teraz trwa konwersja i przesylanie danych bezposrednio do RAM // kiedy transmisja DMA jest kompletna, przetwornik ADC generuje // przerwanie i zeruje bit C while (C); // nieskonczona petla??? // wynik przetwarzania ADC jest juz dostepny w RAM // okres probkowania = 2 * T2 =2*(DZ*1.085us) // [RCAP2H,RCAP2L]= 65536 - DZ EA=0; EADC=0; // wstrzymana obsluga przerwan - globalnie // wstrzymana obsluga przerwan od przetwornika A/C ADCCON1=0x20; // zasilanie przetwornika wylaczone // wydruk kontrolny zawartosci pamieci RAM for(i=0; i<=dmacount; i++) { if (i % 8== 0) printf("\n"); printf("%3d=%04x ", i, DMASTART[i] ); } printf("\n"); // wydruk kontrolny w postaci slupka danych for(i=0; i<=dmacount; i++) printf("\n%4u ", DMASTART[i] & 0x0FFF ); printf("\n"); // i jeszcze na koniec... IT0=1; // zezwolenie na obsluge przerwania 0 EA=1; // zezwolenie na obsluge przerwan EX0=1; // zezwolenie na obsluge przerwania zewnetrznego INT0 (przycisk) // mruganie diody LED while(1) { for (i=0; i<10000; i++) ; LED = ~LED ; } } // KONIEC PRZYKŁADOWE WYNIKI (panel hyperterminala) LABORATORIUM KSP 0=1000 1=1000 2=1000 3=1000 4=1000 5=1000 6=1000 7=1000 8=1000 9=1000 10=1000 11=1000 12=1000 13=1000 14=1000 15=1000 16=1000 17=1000 18=1000 19=1000 20=1000 21=1000 22=1000 23=1000 24=1000 25=1000 26=1000 27=1000 28=1000 29=1000 30=1000 31=1000 Temperatura binarnie = 804 bit Temperatura binarnie = 807 bit Temperatura binarnie = 814 bit Temperatura binarnie = 812 bit

Ćw. 5. Badanie 24-bitowego przetwornika Σ-Δ mikrokonwertera (ADuC824, ADuC834) 1. Zapoznać się z dokumentacją techniczną mikrokonwertera ADuC824 opisującą budowę przetworników, zasadniczego 24-bitowego i pomocniczego 16-bitowego, zestaw rejestrów i znaczenie bitów sterujących i kontrolnych: ADSTAT rejestr statusu przetwornika ADCMODE rejestr trybu pracy przetwornika AD0CON rejestr sterujący przetwornika głównego AD1CON rejestr sterujący przetwornika pomocniczego SF rejestr filtru decymującego Sinc3 (kontrola szybkości przetwarzania) ICON rejestr sterujący źródła prądowego ADC0L/M/H 24-bitowy rejestr rezultatu przetwarzania przetwornika głównego ADC1L/H 16-bitowy rejestr rezultatu przetwarzania przetwornika pomocniczego OF0L/M/H 24-bitowy współczynnik kalibracji przesunięcia zera przetw. głównego OF1L/H 16-bitowy współczynnik kalibracji przesunięcia zera przetw. pomocniczego GN0L/M/H 24-bitowy współczynnik kalibracji wzmocnienia przetw. głównego GN1L/H 16-bitowy współczynnik kalibracji wzmocnienia przetw. pomocniczego Zaznaczyć w sprawozdaniu charakterystyczne bity słów kontrolnych przetwornika. Narysować i szczegółowo opisać charakterystykę torów pomiarowych przetwornika głównego i pomocniczego. Przedstawić istotne (wybrane) parametry metrologiczne torów przetwarznia A/C i C/A. Rys. 1. Schemat funkcjonalny mikrokonwertera ADuC824. 2. Zapoznać się z metodą i sposobem podłączanie sygnałów pomiarowych do mikrokonwertera (wejście różnicowo-napięciowe, sygnały unipolarne i bipolarne, zewnętrzne i wewnętrzne zwarcie obwodów wejściowych). 3. Zapoznać się z możliwościami konfiguracji pracy mikrokonwertera przy wykorzystaniu przełącznika DIP-S1 na płytce EvalBoard (dokumentacja: 824EvalGuide_B.pdf)

4. Zapoznać się z techniką zadawania częstości próbkowania w torach przetwarzania A/C (rejestr SF filtr decymujacy Sync3) i przeanalizować sposoby określania częstotliwości próbkowania sygnałów pomiarowych. 5. Zapoznać się z działaniem programu WASP. Dokonać weryfikacji zmian parametrów programu WASP dotyczących: wyboru trybu pracy przetworników, wyboru źródeł referencyjnych, ustawienia multiplekserów sygnałów wejściowych, wyboru zakresu pomiarowego (wzmocnienie toru pomiarowego). 5. Zrealizować kilka serii pomiarów dla: wewnętrzne/zewnętrzne źródło referencyjne, tryb unipolarny/bipolarny pracy przetwornika, mała/duża szybkość próbkowania. W oparciu o zebrane wyniki dokonać oceny pracy przetworników głównego i pomocniczego. 6. Przeanalizować działanie programu 824uart.c : #include <aduc824.h> #include <stdio.h> sbit LED=P3^4; // linia P3.4 steruje diodą LED // void end_of_adc(void) interrupt 6 { LED=!LED; printf("\n%02bx%02bx%02bx",ad0h, AD0M, AD0L); RDY0=0; } //==================================================================== void main() { // KONFIGURACJA UART... RCAP2H=0xFF; RCAP2L=-5; TH2=0xFF; TL2=-5; SCON=0x52; T2CON=0x34; // config UART for 9830baud // (close enough to 9600baud) // KONFIGURACJA PRZETWORNIKA ADC I START KONWEERSJI.. SF=200; // 6.8266667Hz ADC szybkosc przetwarzania AD0CON=0x45; // Vref - ext, AIN1-AIN2, bipolar, ±640mV 0100 0101 EADC=1; // zezwolenie zglaszania przerwan przetwornikow ADC EA=1; // zezwolenie obslugi przerwan ADMODE=0x23; // ciagly tryb konwersji // OCZEKIWANIE NA PRZERWANIE... while (1) ; } 7. Zapoznać się demonstracyjnym układem do pomiaru temperatury otoczenia z czujnikiem RTD. Zaproponować algorytm obsługi przetwornika do pomiaru temperatury.

Rys. 2. Panel sterujący programu WSAP. Układ demonstracyjny do pomiaru temperatury - czujnik RTD (resistive temperature detectors) zakres pracy (-200 C do +800 C), duża dokładność przykł. RTD Klasy B wg normy IEC: 100Ω±0.12% w 0 C, Klasa A: ±0.15% w 0 C współczynnik temp. zmian rezyst.: ( R100 R0 ) α = gdzie: R 100 rezystancja w 100 C 100 R 0 R 0 rezystancja w 0 C α=0,00385 C -1 w normach amerykańskich α=0,003 92 Ω/ Ω/ C jako jednostkę podaje się też α [Ω/ Ω/ C] do obliczeń stosuje się wartość dokładną: α = 0,00385055 C -1 Konwersja rezystancji na temperaturę: 2 = R0 1+ Aϑ + Bϑ + C ϑ 100 [ ( ) 3 ] R t wg Keithley 2 3 [ 1+ Aϑ + Bϑ + ( ϑ ) ϑ ] R t wg PN-EN 6-751+A1+A2 = R0 C 100 dla temp. > 0 C przyjmuje się wsp. C=0 2 [ + Aϑ B ] R R 1 ϑ t = 0 + W układach pom. gdzie R t jest określane poprzez I R i U R :

ϑ ( IR, U R ) = I R R [ A 0 2 + 2( U R IRR0 ) 2 A + 4B( U I R )/ I R ] R R 0 R 0 W układach pom. gdzie R t jest określane bezpośrednio: 2 A + A + 4B( Rt R0 1) ϑ ( R ) = t Współczynniki Callendar-Van Duser wielomianu R t =f(ϑ ) wsp. Standard temperaturowy A [C -1 ] B[C -2 ] C * [C -3 ] lub [C -4 ] (α) DIN 43760 0,003850 3,9080 10-3 -5,8019 10-7 -4,2735 10-12 American 0,003911 3,9692 10-3 -5,8495 10-7 -4,2325 10-12 ITS-90 0,003926 3,9848 10-3 -5,8700 10-7 -4,0000 10-12 PN-EN 60751 0,00385055 3,9083 10-3 -5,7750 10-7 -4,1830 10-12 * dla temp. > 0 C przyjmuje się wsp. C=0 2B AVDD ADuC83x IEXC1 Źródło prądowe AIN1 R t AIN2 MUX BUF PGA PRIMARY 24-BIT Δ ADC R REF REFIN+ REFIN- External V REF Detect Rys. 3. Pomiar rezystancji z wykorzystaniem napięcia referencyjnego jako wartości proporcjonalnej do prądu. Procedura obliczenia wartości rezystancji R t : W aplikacji ADuC824, ADuc834 R REF =5,62kΩ±0.1% R t = DR 2 REF N Termistory Równanie Steinhart-Hart a: 1 A + B ln( R ) + C[ ln( )] 3 ϑ = [ K] t R t gdzie: A, B, C wsp. określone przez producenta

Rys. 4. Fragment schematu ilustrujący połączenia demonstracyjnego obwodu do pomiaru temperatury wraz z przełącznikiem DIP-S1. IEXEC1 IEXEC2 200µA 200µA P1.2/DAC/IEXC1 P1.3/IEXC/AIN5 1 0 1 0 I2PIN I1PIN I2EN I1EN P1.7/DAC/AIN4 1 0 BUF 12-bit DAC P1.4/AIN1 P1.5/AIN2 P1.6/AIN3 AIN1 AIN2 AIN3 AIN4 AIN3 AIN2 AIN2 AIN2 + - BUF PGA Rys. 5. Model programowy obwodów wejściowych mikrokonwerterów Σ/Δ.

Ćw. 6 Kalibracja mikroprocesorowych przetworników A/C (AduC812, ADuC824) 1. Zapoznać się z dokumentacją techniczną mikrokonwertera dotyczącą procedur kalibracji przetwornika A/C: a. podstawowe własności modułu przetwarzania A/C przetwornika (ADC CIRCUIT INFORMATION str.12-18 dokumentacji technicznej AduC812.pdf), b. uwaga techniczna C005.pdf 2. Zapoznać się z procedurami kalibracji w pliku 812cal.asm: a. procedura kalibracji przesunięcia zera: CALZEROSCALE b. procedura kalibracji wzmocnienia (skalowania): CALFULLSCALE c. procedury pomocnicze kalibracji: CONV10ZS d. program kalibracji przetwornika AduC812 -> 812cal00.c 3. W środowisku programowym μvision51 (C-Keil 5.20) przygotować program kalibracji przetwornika 812cal00.asm. 4. Przeprowadzić procedury kalibracji zera w kanale pomiarowym 1 napięcie 0V (V REF- ) zrealizować zakładając zworkę J1: 3-4 5. Przeprowadzić procedury kalibracji wzmocnienia w kanale pomiarowym 1 napięcie pełnej skali uzyskamy wykonując zworkę J1: 3 21. 6. Zapoznać się z metodami wykorzystania procedur kalibracji w programach użytkownika: a. generacja aktualnych współczynników kalibracji i zapamiętanie ich w nieulotnej pamięci Flash/EE b. procedura przepisania współczynników kalibracji po restarcie systemu z obszaru Flasz/EE c. przeprowadzić pomiary testowych sygnałów z wykorzystaniem aktualnych współczynników kalibracji (program DMA.c) Rys. Schemat złącza sygnałowego pakietu testowego AduC812

Ćw. 7. Procesory sygnałowe projektowanie i badanie filtru cyfrowego URUCHAMIANIE PROGRAMÓW DSP PROCES URUCHAMIANIA PRZETWARZANIA SYGNAŁU NA UKŁADZIE ADSP-2181 Z PANELU EZ-KIT LITE SKŁADA SIĘ Z TRZECH ETAPÓW: 1. TWORZENIE TEKSTU ŹRÓDŁOWEGO ZAWIERAJĄCEGO WYKONANIE KODU MASZYNOWEGO ALGORYTMU. DOMYŚLNYM ROZSZERZENIEM NAZWY PLIKU JEST.DSP. DOS-OWE EDYTORY TEKSTU JAK EDIT LUB EMACS MOGĄ BYĆ WYKORZYSTANE DO EDYCJI PLIKU ŹRÓDŁOWEGO. MOGĄ BYĆ WYWOŁANE POPRZEZ KOMENDĘ SYSTEMU DOS: EDIT NAZWA_PLIKU.DSP EMACS NAZWA_PLIKU.DSP 2. KOMPILACJĘ I LINKOWANIE PLIKU ŹRÓDŁOWEGO PRZY UŻYCIU ASEMBLERA I LINKERA ASM21.EXE I LD21.EXE. TE OPERACJE ZOSTAŁY ZAUTOMATYZOWANE DO PLIKU WSADOWEGO DOS-A W PLIKU EZK.BAT, KTÓRY MOŻE BYĆ WYWOŁANY PONIŻSZĄ KOMENDĄ : EZK NAZWA_PLIKU GDZIE PLIKIEM ŹRÓDŁOWYM JEST NAZWA_PLIKU.DSP. WYNIKIEM TYCH OPERACJI JEST WYKONYWALNY PLIK NAZWA_PLIKU.EXE. (TEN PLIK JEST WYKONYWALNY DLA UKŁADU 2181, NIE DLA SYSTEMU DOS). 3. ZAŁADOWANIE WYKONYWALNEGO PLIKU DO UKŁADU POPRZEZ POŁĄCZENIE SZEREGOWE UŻYWAJĄC PROGRAMU DWIGHT-ELVEY'S PUBLIC-DOMAIN LOADER EZLD.COM, KTÓRY ZNAJDUJE SIĘ W [4]. TA OPERACJA ZOSTAŁA TAKŻE ZAUTOMATYZOWANA DO PLIKU WSADOWEGO EZL.BAT I JEST WYWOŁYWANA Z POZIOMU SYSTEMU DOS JAK PONIŻEJ : EZL.BAT TO SPOWODUJE ZAŁADOWANIE DO PROCESORA NAZWA_PILKU.EXE I NIEZWŁOCZNE WYKONANIE. MOŻNA TAKŻE ZAŁADOWAĆ PROGRAM I WEJŚĆ DO PROGRAMU MENU POPRZEZ KOMENDĘ: EZL NAZWA_PLIKU T POWYŻSZE NARZĘDZIA SĄ DOSTĘPNE Z KAŻDEGO PODKATALOGU. DOS - OWSKI WPIS DSP JEST SYNONIMEM KATALOGU C:\ADI_DSP\EXAMPLES W KTÓRYM ZNAJDUJĄ SIĘ PODKATALOGI Z RÓŻNYMI PRZYKŁADAMI. JEST TU DOSTĘPNYCH RÓWNIEŻ KILKA INNYCH PRZYDATNYCH

NARZĘDZI. PLIK WSADOWY EZS.BAT SPOWODUJE SKOMPILOWANIE I ZLINKOWANIE KODU PLIKU ŹRÓDŁOWEGO A NASTĘPNIE URUCHOMIENIE SYMULATORA SIM2181.EXE : EZS NAZWA_PLIKU GDZIE PEŁNA NAZWA NAZWA_PLIKU.DSP JEST DOMYŚLNA. NIEKTÓRE PRZYKŁADOWE PROGRAMY SYMULATORA SĄ W PODKATALOGU SIM. PRZYKŁĄDY TE ZAWIERAJĄ KWANTOWANIE I PRÓBKOWANIE, TRZYKROTNE OPÓŹNIENIE, WYKONANE FILTRY FIR I IIR PRZY UŻYCIU BUFORÓW CYKLICZNYCH. W SYMULATORZE MOŻNA PRZEŚLEDZIĆ KAŻDĄ INSTRUKCJĘ W PROGRAMIE I OBSERWOWAĆ ZAWARTOŚĆ REJESTRU BUFORA LINII OPÓŹNIAJĄCEJ W TRAKCIE ZMIAN Z JEDNEJ PRÓBKI WEJŚCIOWEJ NA NASTĘPNĄ. JEST RÓWNIEŻ PLIK MKEZK.BAT, UŻYWANY POPRZEZ : MKEZK NAZWA_PLIKU GENERUJE ON PLIK NAZWA_PLIKU.DSP POPRZEZ SKOPIOWANIE Z TYMCZASOWEGO PLIKU TEMPATLE.DSP Z PODKATALOGU MACROS. PLIK TYMCZASOWY ZAWIERA WSZELKIE NIEZBĘDNE DANE INICJACYJNE PROCESORA DSP I UKŁADÓW KODERÓW. UCZEŃ MOŻE WPROWADZIĆ WYBRANĄ PRZEZ SIEBIE CZĘSTOTLIWOŚĆ PRÓBKOWANIA FS I WSTAWIĆ ALGORYTM PRZETWARZANIA SYGNAŁU W DOWOLNE MIEJSCE W PLIKU. KILKA CZĘSTOTLIWOŚCI PRÓBKOWANIA MOŻE ZOSTAĆ WYBRANE, NP. FS = 8,16,32,44.1,48 KHZ I WIĘCEJ. KONWERSJA FORMATU DZIESIĘTNEGO NA SZESNASTKOWY DWA PROGRAMY DOS-OWE DEC2HEX.EXE I HEX2DEC.EXE POZWALAJĄ NA KONWERSJĘ Z DZIESIĘTNEGO FORMATU DO FORMATU SZESNASTKOWEGO 1.15 (LUB GENERALNIE A.B) I ODWROTNIE. ICH KOD ŹRÓDŁOWY C UŻYWA ROZKAZÓW ADC.C I DAC.C Z [1] I JEST DOŁĄCZONA W DODATKU. OBA PROGRAMY MOGĄ OTRZYMYWAĆ DANE WEJŚCIOWE Z STDIN LUB Z PLIKU WEJŚCIOWEGO ZAWIERAJĄCEGO LICZBY DO KONWERSJI (ODDZIELONE SPACJAMI, TABULACJAMI LUB W KOLEJNYCH LINIACH). ZWRACAJĄ ONE POSTAĆ WYJŚCIOWĄ DO STDOUT LUB DO PLIKU WYJŚCIOWEGO. PRZYKŁAD TYPOWEGO UŻYCIA: DEC2HEX 1.15 < DATA.DEC > DATA.HEX DEC2HEX 2.14 < DATA.DEC > DATA.HEX DEC2HEX 1.15 gdzie data.dec jest plikiem zawierającym dziesiętne liczby, które mają zostać przekonwertowane do postaci 1.15 (lub postaci 2.14 w innym przypadku) a plik data.hex zawiera odpowiadające im liczby w systemie szesnastkowym. W trzecim przypadku, użytkownik musi wprowadzić każdą liczbę dziesiętną (lub grupę liczb oddzielonych spacjami) w linii poleceń poprzedzone przez <RET> i wejść <CTRL-Z> lub <CTRL-C> po przetworzeniu ostatniej liczby. Podobnie używa się hex2dec, następująco: HEX2DEC 1.15 DATA.DEC

NA PRZYKŁAD, PONIŻSZA KOLUMNA LICZB DZIESIĘTNYCH WPROWADZONA DO DEC2HEX 1.15 STWORZY DRUGĄ KOLUMNĘ LICZB SZESNASTKOWYCH. Z KOLEI LICZBY SZESNASTKOWE WPROWADZONE DO HEX2DEC 1.15 STWORZĄ TRZECIĄ KOLUMNĘ LICZB DZIESIĘTNYCH, KTÓRE SĄ PIERWOTNYMI WARTOŚCIAMI, ZAOKRĄGLONYMI Z DOKŁADNOŚCIĄ DO 16-BITÓW: 1.00000 0x7fff 0.999969482421875 (największa liczba dodatnia) 0.50000 0x4000 0.500000000000000 0.40000 0x3333 0.399993896484375 0.00003 0x0001 0.000030517578125 (najmniejsza liczba dodatnia) -0.00003 0xffff -0.000030517578125 (najmniejsza liczba ujemna) -0.40000 0xcccd -0.399993896484375-0.50000 0xc000-0.500000000000000-1.00000 0x8000-1.000000000000000 (największa liczba ujemna) Całkowity zakres reprezentowanych liczb zależy od formatu. Na przykład, powyższa kolumna liczb szesnastkowych wprowadzona do hex2dec 2.14 stworzy trzecią kolumnę przeskalowaną przez wykładnik liczby 2. Aby ustalić, którego formatu a.b użyć, pamiętaj że wszystkie konwertowane liczby muszą zawierać się w zakresie: - 2 A-1 <= X <= 2 A-1-2 -B W TEN SPOSÓB, DLA PRZYKŁADU, ZAKRES DLA POSTACI 1.15 2.14 I 3.13 MAJĄ WARTOŚĆ : - 1 <= X <= 1-2 -15-2 <= X <= 2-2 -14-4 <= X <= 4-2 -13 Ogólnie użycie całkowitej liczby bitów B, to znaczy a+b=b, postać a.b jest prostym przekształceniem postaci binarnej standardu 0.B z uzupełnieniem do dwóch (b 1,b 2,...,b B ): x = (-b 1 2-1 + b 2 2-2 + b 3 2-3 +... + b B 2 -B ) (postać 0.B) x = (-b 1 2-1 + b 2 2-2 + b 3 2-3 +... + b B 2 -B )2 a (postać a.b) gdzie a=0,1,...,b. Ewentualnie możemy mówić o postaci a.b jako przekształconej postaci liczby całkowitej B.0 z uzupełnieniem do dwóch. Pisząc a=b-b w obydwu powyższych wyrażeniach mamy: x = (-b 1 2 B-1 + b 2 2 B-2 + b 3 2 B-3 +... + b B ) (postać B.0) x = (-b 1 2 B-1 + b 2 2 B-2 + b 3 2 B-3 +... + b B )2 -B (postać b.a) gdzie b=0,1,...,b. Rysunek pokazuje współczynniki wagowe bitów oraz umieszczenie przecinka dla czterech postaci zapisu 0.16, 1.15, 2.14 oraz 3.13