Pomiar napięcia i szeregowa transmisja danych z uŝyciem mikrokontrolera



Podobne dokumenty
Współpraca mikrokontrolera z wyświetlaczami: ciekłokrystalicznym i siedmiosegmentowym

Współpraca mikrokontrolera z klawiaturą

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Instytut Teleinformatyki

Programowanie mikrokontrolerów. 8 listopada 2007

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

Parametryzacja przetworników analogowocyfrowych

TECHNIKA MIKROPROCESOROWA

Przetworniki analogowo-cyfrowe (A/C)

Komunikacja w mikrokontrolerach Laboratorium

LB-471P, panel ciśnieniomierza z pętlą prądową 4..20mA INSTRUKCJA UśYTKOWANIA wersja instrukcji 1.1

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

Opis procedur asemblera AVR

Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z wykonania projektu.

WIZUALIZACJA DANYCH SENSORYCZNYCH Sprawozdanie z wykonanego projektu. Jakub Stanisz

ZL2AVR. Zestaw uruchomieniowy z mikrokontrolerem ATmega8

TECHNIKA MIKROPROCESOROWA II

dokument DOK wersja 1.0

Instrukcja obsługi programatora AVR Prog USB v2

interfejs szeregowy wyświetlaczy do systemów PLC

Mikrokontrolery AVR Wprowadzenie

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

Interface sieci RS485

Programowanie mikrokontrolerów AVR

Murasaki Zou むらさきぞう v1.1 Opis programowania modułu LPC2368/LPC1768 z wykorzystaniem ISP

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

Szkolenia specjalistyczne

Instrukcja obsługi programatora AVR Prog USB v2

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32)

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Uniwersalny zestaw uruchomieniowy ZL4PIC

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

High Speed USB 2.0 Development Board

Technika Mikroprocesorowa

Instrukcja do oprogramowania ENAP DEC-1

Multimetr cyfrowy MAS-345. Instrukcja instalacji i obsługi oprogramowania DMM VIEW Ver 2.0

POWIADOMIENIE SMS ALBATROSS S2. Opis aplikacji do programowania

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

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

Instrukcja obsługi programatora AVR Prog USB v2

ZL16AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega8/48/88/168

Instytut Teleinformatyki

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

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

Programowanie mikrokontrolerów. 15 stycznia 2008

Wykrywacz kłamstw. Grzegorz Puzio, Łukasz Ulanicki 15 czerwca 2008

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Instytut Teleinformatyki

Instrukcja Obsługi. Modułu wyjścia analogowego 4-20mA PRODUCENT WAG ELEKTRONICZNYCH

MM05-IIIe. Dokumentacja techniczna

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

ZL27ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

MultiTool instrukcja użytkownika 2010 SFAR

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

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

TECHNIKA MIKROPROCESOROWA

STANOWISKO DO BADANIA AKUMULACJI I PRZETWARZANIA ENERGII ELEKTRYCZNEJ (analiza energetyczna)

Instrukcja programowania IRSC OPEN

Instrukcja obsługi programatora AVR Prog USB v2

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Konwerter Transmisji KT-02

Termometr LB-471T INSTRUKCJA UśYTKOWANIA wersja instrukcji 1.1

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

Technika mikroprocesorowa. Konsola do gier

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

Komunikacja w mikrokontrolerach Laboratorium

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

MIKROPROCESORY architektura i programowanie

Instrukcja użytkownika ARSoft-WZ1

BUFFOR WYDRUKU MBW-AT128UK

Kod produktu: MP01611

POWIADOMIENIE SMS ALBATROSS S2. Opis aplikacji do programowania

Moduł licznika położenia LP 2.

Wbudowane układy peryferyjne cz. 3 Wykład 9

Mikroprocesory i Mikrosterowniki Analog-Digital Converter Konwerter Analogowo-Cyfrowy

Multimetr cyfrowy VA18B Instrukcja instalacji i obsługi. oprogramowania PC-LINK

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

SML3 październik

2.1 Przesył danych między procesorem a tabelą zmiennych

Architektury Komputerów - Laboratorium Informatyka III rok studia dzienne

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

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

#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 ); }

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

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

ZL5PIC. Zestaw uruchomieniowy dla mikrokontrolerów PIC16F887

Obsługa przetwornika ADC na mikrokontrolerze ATmega8 CEZARY KLIMASZ OBSŁUGA PRZETWORNIKA ADC NA MIKROKONTROLERZE ATMEGA8

Kod produktu: MP01611-ZK

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

MCAR Robot mobilny z procesorem AVR Atmega32

ZL9ARM płytka bazowa dla modułów diparm z mikrokontrolerami LPC213x/214x

Transkrypt:

Instrukcja do ćwiczenia: Pomiar napięcia i szeregowa transmisja danych z uŝyciem mikrokontrolera Materiał do samodzielnego opracowania: elementy języka C: typy danych i ich deklarowanie, operatory, instrukcje, pętle, funkcje definiowanie, deklarowanie i wywoływanie, tablice i wskaźniki, pliki nagłówkowe, dyrektywy kompilatora: include, define. 1. Przetwornik analogowo-cyfrowy Przetwornik analogowo cyfrowy zamienia sygnał analogowy (ciągły) na sygnał cyfrowy [1]. Proces przetwarzania analogowo-cyfrowego obejmuje próbkowanie, kwantyzację i kodowanie. Poprzez próbkowanie sygnału wejściowego określa i zapamiętuje się jego wartość chwilową w ustalonych odstępach czasu. Wartość ta w wyniku kwantyzacji zostaje przyporządkowywana jednej ze zbioru wartości dyskretnych. Kodowanie oznacza zapis wartości dyskretnej za pomocą ciągu ser i jedynek (niskich i wysokich stanów logicznych). Mikrokontroler ATMega32 został wyposaŝony w przetwornik A/C o rozdzielczości 10 bitów (wartość chwilowa sygnału ciągłego moŝe być przyporządkowana do jednej z 2 10 = 1024 wartości dyskretnych). Wejście przetwornika jest dołączone do ośmiokanałowego multipleksera, pozwalającego na pomiar sygnałów dołączonych do wyprowadzeń portu PA (rys.1). Rys. 1. Schemat wyprowadzeń procesora ATMega 32 [2] Czas przetwarzania wbudowanego przetwornika moŝe wynosić do 13 do 260 µs [2]. Z tego względu przetwornik ten nie nadaje się do pomiaru sygnałów szybkozmiennych. 2. Uniwersalny układ transmisji szeregowej (USART) Uniwersalny, synchroniczno - asynchroniczny układ nadajnik - odbiornik (ang. USART - Universal Synchronous and Asynchronous Receiver and Transmitter [2]) pozwala na wymianę

2 danych mikrokontroler otoczenie. Wymiana danych odbywa się w trybie szeregowym. Transmisja rozpoczyna się bitem startowym, a kończy bitem stopu (rys. 2). Kontrola bitu parzystości pozwala na detekcję błędów transmisji. Bit parzystości przyjmuje wartość 1 jeśli suma bitów danych jest liczbą parzystą. Rys. 2. Schemat pakietu (ramki) danych w transmisji szeregowej [2]: St bit startowy, Sp bit stopu, 1 8 bity danych, P bit kontroli parzystości (opcjonalny), IDLE stan oczekiwania USART komunikuje się z otoczeniem za pomocą dwóch wyprowadzeń: RXD odbiornik i TXD nadajnik. Dołączenie mikrokontrolera do komputera PC odbywa się za pomocą portu szeregowego (tzw. kabel null modem zakończony wtykami dziewięciostykowymi DB 9). Ze względu na obowiązujące standardy, port szeregowy PC uŝywa poziomów napięć ± 15 V, natomiast mikrokontroler 0, 5 V. Konieczne jest dopasowanie poziomów napięć pomiędzy mikrokontrolerem, a PC. Te rolę spełnia układ scalony MAX232 (rys.3). Rys. 3. Schemat ideowy konwertera poziomów napięć z układem MAX232 Przed nawiązaniem połączenia poprzez port szeregowy oba urządzenia powinny mieć skonfigurowane takie same parametry transmisji, tj. prędkość transmisji (300 115200 bit/s), ilość bitów danych (4 8), kontrola parzystości (lub brak), ilość bitów stopu (1 2), rodzaj sterowania przepływem danych. 3. Konfiguracja przetwornika A/C W celu uruchomienia wbudowanego w mikrokontroler przetwornika A/C naleŝy wykonać szereg czynności konfiguracyjnych w odpowiedniej kolejności. Oznacza to zapisanie w pewnych rejestrach mikrokontrolera odpowiednich stanów logicznych [2]. Pierwszą czynnością jest wybór wyprowadzenia portu A, które będzie pełniło rolę wejścia przetwornika. Do określonego bitu

rejestru DDRA naleŝy wpisać wartość 0. Na rys. 4 pokazano przykładowo składniki (poszczególne bity) rejestru DDRA. 3 Rys. 4. Składniki (bity) rejestru DDRA[2]. Następnie naleŝy wybrać częstotliwość pracy przetwornika za pomocą bitów ADPSx (gdzie x={0 7}) w rejestrze ADCSRA (rys. 5). Częstotliwość pracy powinna znajdować się w przedziale 50 200 khz. Rys. 5. Składniki rejestru ADCSRA [2]. Uzyskuje się ją przez podział częstotliwości zegara mikrokontrolera (16 MHz) przez 2 128 i przez 13 (średnio 13 cykli zegarowych trwa przetwarzanie A/C). Ustawienia bitów ADPSx naleŝy wykonać zgodnie z tab. 1. Tab. 1 Wybór częstotliwości taktowania przetwornika A/C [2] W automatycznym trybie pracy naleŝy ustalić automatyczne wyzwalanie pomiaru za pomocą zapisania wartości 1 do bitu ADATE rejestru ADCSRA (rys. 5), oraz wyzerowanie bitów ADTSx rejestru SFIOR (rys. 6), wybierając tryb free running (tab. 2.). Rys. 6. Składniki rejestru SFIOR Kolejną czynnością jest wybranie aktywnego wejścia multipleksera, poprzez zapis bitów MUXx (tab. 3) w rejestrze ADMUX (rys. 7). Wybór powinien dotyczyć tego samego wejścia, które zostało ustawione w rejestrze DDRA. Zapis bitów REFSx w tym samym rejestrze pozwala wybrać napięcie odniesienia dla przetwornika: REFS1;REFS0 = 01 napięcie zasilania mikrokontrolera

4 (+5 V), REFS1;REFS0 = 11 źródło napięcia odniesienia wbudowane w mikrokontroler (+ 2,56 V). Tab. 2. Ustawienia bitów ADTSx dla wyzwalania automatycznego przetwornika A/C [2] Tab. 2. Ustawienia bitów MUXx multipleksera przetwornika A/C [2] Rys. 7. Składniki rejestru ADMUX. Następnie naleŝy włączyć przetwornik A/C poprzez wpisanie logicznej 1 do bitu ADEN w rejestrze ADCSRA (rys. 5) i rozpocząć pracę automatyczną poprzez nadanie wartości 1 bitowi ADSC w tym samym rejestrze. Wynik przetwarzania odczytuje się bezpośrednio z rejestru ADC, po zakończeniu przetwarzania danej próbki sygnału wejściowego. Zakończenie przetwarzania jest sygnalizowane ustawieniem wartości 1 bitu ADIF w rejestrze ADCSRA. Jeśli wspomniany bit ma wartość 0, oznacza to, Ŝe przetwarzanie A/C jest w toku. Odczytanie w takim przypadku rejestru ADC daje błędny wynik. Wartość zmierzonego napięcia moŝna uzyskać ze wzoru [2]: wynik_przetwarzania = ADC/1024.0*VREF gdzie: VREF wartość napięcia odniesienia, ustawiona za pomocą bitów REFS1, REFS0 (2,56 lub 5,0 V). W manualnym trybie pracy zbędne jest ustawianie bitów ADATE i ADTSx, Nadanie wartości 1 bitowi ADSC powoduje jednokrotne zadziałanie przetwornika A/C. Zakończenie

przetwarzania jest sygnalizowane wyzerowaniem tego bitu. Ponadto po zakończeniu przetwarzania naleŝy zapisać do ADSC wartość 0. Odczyt wyniku przetwarzania moŝe nastąpić po sprawdzeniu wartości ADSC (musi być 0). Do konfiguracji i uruchomienia przetwornika A/C naleŝy uŝyć funkcji języka C opisanych w p. 4 a. 4. UŜyteczne funkcje języka C a) Wiadomości podstawowe W celu poprawienia przejrzystości programu za pomocą dyrektywy kompilatora define moŝna nadać dowolnemu elementowi programu własną nazwę: np.: #define zastępujący_ciąg_znaków zastępowany_ciąg_znaków #define WEJSCIE_0 PB0 Zamiast odwoływać się w programie do małointuicyjnej nazwy PA0 oznaczającej 0 wyprowadzenie portu B, moŝna stosować nazwę WEJSCIE_PA0 jednoznacznie określającej jaka jest rola tego wyprowadzenia. Przy stosowaniu w programie funkcji generujących opóźnienie czasowe wymaga się podania kompilatorowi częstotliwości taktowania procesora. SłuŜy do tego makro: #define F_CPU 16000000 Liczba występująca powyŝej to częstotliwość rezonatora kwarcowego w [Hz]. Z praktyki programowania mikrokontrolerów wynika, Ŝe wszelkie konfiguracje części sprzętowej mikrokontrolera (wejścia, wyjścia, przetwornika A/C, itd.) powinny być umieszczone w oddzielnym pliku (tzw. nagłówkowym np.: config.h) i dołączane w momencie kompilacji do właściwego pliku z tekstem programu. Owo dołączanie uzyskuje się stosując dyrektywę kompilatora: #include nazwa.pliku Nazwa pliku obejmuje jego rozszerzenie (*.h). Do zapisywania w rejestrze zera lub jedynki logicznej słuŝy makro _BV(...) [3]. Aby z niego skorzystać naleŝy na początku programu dołączyć plik nagłówkowy io.h znajdujący się w katalogu z bibliotekami /avr: #include <avr/io.h> Ustawienie jedynki logicznej na wyprowadzeniu x portu X uzyskuje się za pomocą: PORTX = _BV(PXx) Dla kilku wyprowadzeń jednocześnie instrukcja powinna wyglądać: gdzie: X = {A, B, C, D}, x = {0 7}, np. DDRX = _BV(PXx1) _BV(PXx2) _BV(PXx3) PORTB = _BV(PB0) 5

6 ustawia stan 1 na wyjściu 0 portu B. Stan niski ustawia się za pomocą instrukcji dla kilku wyprowadzeń jednocześnie: PORTX &= ~(_BV(PXx)) PORTX &= ~(_BV(PXx1)) & ~(_BV(PXx2)) & ~(_BV(PXx3)) Konfigurację wyprowadzenia x portu X jako wejścia uzyskuje się instrukcją: jako wyjścia: DDRX &= ~(_BV(PXx)) DDRX = _BV(PXx) Odczyt stanu logicznego wejścia wykonuje się za pomocą makr: bit_is_clear(pinx,pxx) zwracającego wartość 1 jeŝeli stan logiczny rejestru PINX, w polu x jest równy 0, oraz: bit_is_set(pinx,pxx) zwracającego wartość 1 jeŝeli stan logiczny rejestru PINX, w polu x jest równy 1. PowyŜsze makra będą dostępne w programie po dołączeniu biblioteki io.h: #include <avr/io.h> Do odmierzania czasu i uzyskiwania opóźnienia czasowego przydatna jest funkcja: void _delay_ms(float liczba_ms) Aby z niej skorzystać naleŝy dołączyć plik delay.h dyrektywą: #include <avr/delay.h> b) Konfiguracja i obsługa USART Do konfiguracji i obsługi transmisji danych moŝna wykorzystać funkcje z biblioteki RKlibAVR autorstwa Roberta Krzysztofa [4]. Do projektu naleŝy dołączyć plik kbd.h dyrektywą: #include "uart.h" Do projektu naleŝy dołączyć konfigurację części sprzętowej umieszczonej w pliku config.h: #define F_CPU 16000000 //częstotliwość zegara w Hz #define UART_BAUD 19200 // prędkość transmisji danych #define UART_MAX_GETSTR 8 //bufor dla odbieranego łańcucha znaków Ponadto w pliku makefile naleŝy umieścić następujący kod (zastępując istniejący tekst):

7 # Nazwa pliku z funkcją main() - BEZ ROZSZERZENIA! TARGET = nazwa_pliku_bez_rozszerzenia # Lista plików, których zmiana powoduje przebudowanie projektu CONFIG = config.h # Lista plików źródłowych w języku C SRC = $(TARGET).c # Lista plików źródłowych w asemblerze (rozszerzenie S - DUśE S!) ASRC = # typ mikrokontrolera MCU = atmega32 # Format pliku wyjściowego (srec, ihex) FORMAT = ihex # Poziom optymalizacji (0, 1, 2, 3, s) # (Uwaga: 3 nie zawsze jest najlepszym wyborem) OPT = s # Katalog z bibliotekami uŝytkownika USRLIB = C:/WinAVR-20100110/lib # Lista plików źródłowych bibliotek w języku C SRCLIB = include $(USRLIB)/uart/sources # Dodatkowe biblioteki # # Minimalna wersja printf #LDFLAGS += -Wl,-u,vfprintf -lprintf_min # # Zmiennoprzecinkowa wersja printf (wymaga biblioteki matematycznej) #LDFLAGS += -Wl,-u,vfprintf -lprintf_flt # # Biblioteka matematyczna #LDFLAGS += -lm include $(USRLIB)/avr_make W celu kasowania danych wysyłanych przez port szeregowy i drukowania nowych danych w następnej linii terminala w programie naleŝy umieścić następujące definicje: // tablica zawierająca znaki nowej linii prog_char ANSI_NEWLINE[] = {'\n','\r',0}; // j.w. ale czyszcząca ekran terminala prog_char ANSI_CLEAR[] = {27,'[','H',27,'[','2','J',0}; // makra przejscia do nowej linii

8 //i kasowania linii w teminalu #define CLEAR() UART_putstr_P(ANSI_CLEAR) #define NEWLINE() UART_putstr_P(ANSI_NEWLINE) Dzięki temu kasowanie linii uzyskuje się komendą CLEAR(), a przejście do nowej linii komendą NEWLINE(). Do inicjowania USART słuŝy funkcja: void UART_init (void) Odczyt pojedynczych znaków lub łańcucha znaków z portu szeregowego umoŝliwiają funkcje: int UART_getchar ( void ) void UART_getstr ( char * s ) Wysyłanie pojedynczych znaków lub łańcucha znaków z portu szeregowego umoŝliwiają funkcje: Funkcja: int UART_putchar ( char c ) void UART_putstr ( char * s ) void UART_putU08 ( u08 value ) wysyła przez port szeregowy dziesiętną reprezentację liczby całkowitej. c) Sterowanie wyświetlacza LCD Wizualizacja wyników pomiarów przetwornika A/C moŝe być przeprowadzona z uŝyciem wyświetlacza LCD. Do sterowania wyświetlacza LCD zostaną wykorzystane funkcje z biblioteki tavrlib autorstwa Tomasza Wasilczyka [5]. Biblioteka objęta jest licencją GNU LGPL v3. W folderze z zadaniem muszą być dostępne pliki hd44780.c, hd44780.h i macros.h naleŝy je skopiować z katalogu tavrlib. Drugi z plików naleŝy dołączyć do programu dyrektywą: #include "hd44780.h" W pliku zawierającym konfigurację części sprzętowej config.h naleŝy umieścić następujący kod: // pod którym portem jest szyna danych #define HD44780_DATA_GPIO X //port wyświetlacza X = {A, B,C, D} // jaką część portu zajmuje szyna danych: // jeŝeli wyświetlacz dołączono do wyprowadzeń portu 4 7 to Y = 1 // jeŝeli wyświetlacz dołączono do wyprowadzeń portu 0 3 to Y = 0 #define HD44780_DATA_HIGHHALFBYTE Y //Do jakiego portu X i nr wyprowadzenia x podłączono linię RS wyświetlacza: #define HD44780_RS_GPIO X #define HD44780_RS_BIT x //j. w. ale llinia E wyświetlacza:

9 #define HD44780_E1_GPIO X #define HD44780_E1_BIT x //parametry wyświetlacza w znakach #define HD44780_WIDTH 16 #define HD44780_HEIGHT 2 Plik konfiguracyjny config.h powinien być dołączony w programie (#include...) wcześniej niŝ plik hd44780.h. Inicjalizacji wyświetlacza dokonuje się na początku programu za pomocą funkcji: void hd44780_init(void) Kasowanie znaków z wyświetlacza umoŝliwia funkcja: void hd44780_clear (void) Wyświetlenie znaków na konkretnym polu wyświetlacza umoŝliwia funkcja: void hd44780_goto (uint8_t x, uint8_t y) gdzie: x - Ŝądana kolumna, y - Ŝądany wiersz, uint8_t liczba całkowita bez znaku (typ danej). Wyświetlenie ciągu znaków (łańcucha znaków zdefiniowanego jako tablica znaków) uzyskuje się dzięki funkcji: void hd44780_putstr (char *str, uint8_t length) gdzie: *str wskaźnik do tablicy znaków, lenght ilość znaków do wyświetlenia. lenght = -1 funkcja wyświetla wszystkie znaki z tablicy. JeŜeli d) Przetwarzanie wartości liczbowej na łańcuch znaków Wynik przetwarzania przetwornika A/C obliczony wg wzoru podanego w p. 3 jest liczbą zmiennoprzecinkową (w formacie float lub double). Wspomniana w p. 4 lit. C funkcja biblioteczna: void hd44780_putstr (char *str, uint8_t length) słuŝąca do wyświetlania danych na wyświetlaczu LCD wymaga jako pierwszego argumentu wskaźnika do tablicy znaków: char *str. W związku z tym istnieje konieczność zamiany liczby zmiennoprzecinkowej na łańcuch znaków. Do tego celu moŝna uŝyć funkcji: char* dtostrf (double _val, signed char _width, unsigned char _prec, char _s) gdzie: char* wskaźnik do tablicy znaków, _val liczba do konwersji, _width ilość znaków w wynikowej tablicy znaków _s, _prec ilość miejsc po przecinku. Podając parametr _width naleŝy przewidzieć w razie konieczności dwa dodatkowe miejsca na punkt dziesiętny, i znak minus. Funkcja zwraca wskaźnik do tablicy znaków _s. UŜycie funkcji dtostrf wymaga obecności w pliku makefile dyrektywy: MATH_LIB = -lm. 5. Przebieg ćwiczenia W celu uruchomienia przetwornika A/C do gniazda CINCH J4 (Line IN (DC)) naleŝy połączyć z wyprowadzeniem VCC złącza JP9 (Zasilanie). Następnie wyprowadzenie Tlum.

10 złącza JP7 (ADC) naleŝy dołączyć do wybranego w programie wejścia przetwornika (PA0 PA7). Potencjometr PR4 umoŝliwia zmianę wartości napięcia podawanego na wejście przetwornika A/C w zakresie 0 5 V. Przykładowe zadania do wykonania: a) Napisać i uruchomić program, na wyświetlaczu LCD będzie prezentowana wartość rejestru ADC przetwornika A/C (dwa warianty: tryb manualny i automatyczny pracy przetwornika). b) Napisać i uruchomić program, na wyświetlaczu LCD będzie prezentowana wartość napięcia zmierzonego przez przetwornik A/C (dwa warianty: tryb manualny i automatyczny pracy przetwornika). NaleŜy wykorzystać wyświetlacz LCD znajdujący się w prawej, górnej części zestawu ZL3AVR. Jego wyprowadzenia są dostępne na złączu JP29 (LCD4bit). Wyprowadzenia złącza JP29 naleŝy podłączyć do wyprowadzeń wybranego portu mikrokontrolera. Następnie naleŝy poinformować kompilator o dokonanym wyborze wpisując odpowiednie ustawienia w pliku z konfiguracją sprzętową (patrz p. 3 c)). Potencjometr PR1 słuŝy do regulacji kontrastu wyświetlacza. Uruchomienie transmisji szeregowej musi być poprzedzone połączeniem zworką obu wyprowadzeń złącza JP4 (RxD Enable) i podłączeniem kabla null modem do portu szeregowego komputera PC i złącza J6 (COM) zestawu ZL3AVR. Nastepnie na komputerze PC naleŝy uruchomić program Termite lub HyperTerminal (Menu Start\ Programy\ Akcesoria\ Komunikacja\ HyperTerminal) i ustawić te same parametry transmisji danych, które zostały uŝyte w programie dla mikrokontrolera (typowe ustawienia rys. 8 program Termite). Po uruchomieniu prawidłowo skonstruowanego programu na mikrokontrolerze na ekranie monitora komputera PC powinny się pojawić znaki odbierane z portu szeregowego. Przykładowe zadania do wykonania: c) Napisać i uruchomić program, w wyniku którego na ekranie monitora komputera PC będzie wyświetlany łańcuch znaków wysyłany przez mikrokontroler. d) Napisać i uruchomić program, w wyniku którego na ekranie monitora komputera PC będzie wyświetlany wynik pomiaru napięcia przez przetwornik A/C. e) Napisać i uruchomić program, w wyniku którego na ekranie monitora komputera PC i jednocześnie na wyświetlaczu LCD zestawu ZL3AVR będzie wyświetlany wynik pomiaru napięcia przez przetwornik A/C. Rys. 8. Ustawienia parametrów transmisji szeregowej 6. Literatura [1] M. Rusek, J. Pasierbiński, Elementy i układy elektroniczne w pytaniach i odpowiedziach, WNT 1999, [2] 8-bit Microcontroller with 32K Bytes In-System Programmable Flash Atmega32 Atmega32L, 2503O AVR 07/09, www.atmel.com, [3] avr-libc 1.6.7, Generated by Doxygen 1.5.6 Wed Jan 6 12:08:48 2010, c:\winavr-20100110\doc\avr-libc\,

11 [4] R. Krzysztof, Dokumentacja biblioteki RKlibAVR, http://www.isaa.pl/download/doc_details/89-rklibavr-uniwersalna-biblioteka-dla-avr-gcc, [5] T. Wasilczyk, Dokumentacja biblioteki tavrlib, http://tavrlib.wasilczyk.pl. Wersja z dn. 21.01.2012 r.