LABORATORIUM 6 i 7 - Politechnika Warszawska
Transkrypt
LABORATORIUM 6 i 7 - Politechnika Warszawska
Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instrukcja do przedmiotu PODSTAWY MIKROELEKTRONIKI (LABORATORIUM 6 i 7) Projektowanie z wykorzystaniem układu rekonfigurowalnego PSoC (Programmable System on Chip) autorzy: Paweł Klata, Elżbieta Piwowarska WARSZAWA, marzec 2011 r. SPIS TREŚCI 1 CEL ĆWICZENIA 4 2 WYMAGANE WIADOMOŚCI 4 3 ZASADY ZALICZENIA ĆWICZENIA 4 4 INFORMACJE PODSTAWOWE O UKŁADACH PSOC 4 5 ARCHITEKTURA UKŁADU PSOC 6 5.1 Źródła sygnału zegarowego 6 5.2 Porty 7 5.3 Programowalne bloki cyfrowe 7 5.4 Programowalne bloki analogowe 8 Napięcia odniesienia 9 5.5 6 PSOC DESIGNER 10 7 SCENARIUSZ ĆWICZENIA 12 3 1 Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z techniką programowania i elementami projektowania układów cyfrowych i analogowo-cyfrowych opartą na użyciu sprzętu i oprogramowania PSoC firmy Cypress Microsystems. 2 Wymagane wiadomości Student przed przystąpieniem do ćwiczenia powinien posiadać podstawową wiedzę z zakresu: • teorii obwodów i pomiarów; • programowania w języku C; • próbkowania sygnałów. 3 Zasady zaliczenia ćwiczenia Przed przystąpieniem do ćwiczenia student powinien posiadać podstawową wiedzę dotyczącą układów PSoC oraz zagadnień poruszanych w ćwiczeniu. Wiedza ta zostanie zweryfikowana poprzez kolokwium wstępne. W trakcie ćwiczenia student powinien uruchomić i przedstawić prowadzącemu działanie zaproponowanego w tej instrukcji układu. Za zgodą osoby prowadzącej ćwiczenie można zaprezentować własny układ (o określonym stopniu zaawansowania). Maksymalna ocena końcowa za 2 ćwiczenia (lab. nr 6 i 7) wynosi 10 pkt, z czego: • kolokwium wstępne – 2 pkt • zadanie 1 – 3 pkt, • zadanie 2 – 3 pkt, • zadanie 3 – 2 pkt. 4 Informacje podstawowe o układach PSoC PSoC (Programmable System on Chip) to układy, które łączą w jednym układzie scalonym różne podzespoły – mikrokontroler, rekonfigurowalne peryferia oraz bloki analogowe i cyfrowe. W połączeniu z graficznym edytorem, materiałami szkoleniowymi i dokumentacją dostarczaną przez producenta, tworzy to proste w obsłudze narzędzie do projektowania zaawansowanych urządzeń. Architekturę układu PSoC przedstawia rys. 4.1. 4 Rys. 4. 1: Architektura PSoC Rdzeń układu PSoC (procesor) jest zmodyfikowanym rdzeniem M8 opartym na architekturze Harvard (podobnie jak mikrokontroler 8051), posiadający obszerną i łatwą w stosowaniu listę instrukcji. Na poziomie sprzętowym głównym atutem PSoC są wspomniane wcześniej rekonfigurowalne bloki cyfrowe i analogowe. W praktyce oznacza to, że można zbudować praktycznie dowolne peryferia dostosowane do potrzeb projektu. PSoC zawiera wewnętrzny generator (którego można używać z lub oprócz zewnętrznego) pozwalający na generację na kilku częstotliwościach, ustawianych przez użytkownika. W układzie znajduje się również blok sprzętowego mnożenia (MAC) 8x8 z 16 bitowym wyjściem i 32 bitowym akumulatorem. Ponadto układ zawiera sprzętowy decymator służący do konwersji danych z postaci równoległej do szeregowej, pamięć typu Flash (programu) i SRAM oraz system priorytetowej obsługi przerwań obsługując również przerwania od cyfrowych bloków rekonfigurowalnych. Układ można programować za pomocą specjalizowanego programu narzędziowego PSoC Designer (oraz innych udostępnionych przez producenta). Interpretowany jest kod napisany w asemblerze lub w językach programowania (w szczególności C). Dodatkowo do obsługi podzespołów i samego mikrokontrolera istnieją odpowiednie biblioteki, które znacząco ułatwiają i przyśpieszają proces projektowania układu. Przykładowo, za pomocą jednej funkcji można wypisać komunikat na LCD, wysłać dane portem szeregowym lub odebrać pomiar z przetwornika A/C. 5 Dodatkową zaletą programu PSoC Designer jest edytor graficzny, za pomocą którego można łatwo dodawać i konfigurować podzespoły oraz połączenia i parametry globalne układu. Dokumentacja do każdego modułu dostępna jest z poziomu programu. Mimo wielu zalet, układy PSoC mają również wady. Ułatwienia w postaci rozbudowanych funkcji zajmują dużo pamięci programu. Konfiguracje elementów odbywają się na kilku poziomach, co może spowodować dezorientację początkującego użytkownika. Poza tym koniecznością jest korzystanie z oryginalnych narzędzi firmy Cypress, ponieważ producent nie ujawnił specyfikacji oprogramowania. W dalszej części instrukcji opisane zostaną tylko niektóre fragmenty układu, bezpośrednio związane z ćwiczeniem. Zainteresowanie mogą otrzymać dodatkowe informacje na stronach: www.cypress.com, www.easypsoc.com i www.psocdeveloper.com. 5 Architektura układu PsoC 5.1 Źródła sygnału zegarowego Jak zostało to wspomniane wcześniej, PsoC posiada wbudowany system generacji sygnałów o różnych częstotliwościach bazujących na wewnętrznym i/lub zewnętrznych oscylatorach (Rys. 5. 1). Istnienie tego systemu jest konieczne, ponieważ każdy moduł może posiadać inne wymagania odnośnie częstotliwości sygnału zegarowego. Rys.5. 1: System generacji sygnałów zegarowych 6 5.2 Porty Mikrokontroler łączy się z urządzeniami zewnętrznymi za pomocą portów wejścia/wyjścia, które grupują po 8 bitów. Wszystkie porty mogą pełnić funkcje połączeń cyfrowych, a dodatkowo porty P00-P07 i P20-P23 mogą wykonywać operacje na sygnałach analogowych. Wejścia portów P00-P07 mogą służyć jako doprowadzenia sygnałów do peryferii analogowych, a porty P02-P05 mogą służyć jako wyprowadzenia sygnałów analogowych na zewnątrz układu (Rys. 5. 2.). Rys.5. 2: Dostęp do peryferii analogowych W przypadku peryferii cyfrowych możliwości połączeń jest więcej. Poszczególne bloki nie są bezpośrednio podłączane do portów. Połączenia są konfigurowane przy pomocy globalnego systemu komunikacji jak na Rys. 5. 3. Rys. 5. 3: Możliwości połączeń między blokami cyfrowymi. 5.3 Programowalne bloki cyfrowe Moduły cyfrowe można skonfigurować tak, aby działały np jako: liczniki, generatory sekwencji pseudolosowych, timer, PWM, generatory CRC, inwerter, moduł obsługi UART, LCD, IrDA, odbiornik lub nadajnik szeregowy, Interfejs I2C lub SPI. Pozwala to na dostosowanie 7 sprzętu do określonych potrzeb. Bloki cyfrowe pogrupowane są w szeregi. Konfiguracja jest częściowo graficzna, tak samo jak łączenie bloków z innymi oraz z portami. Rys.5. 4: Schemat szeregu programowalnych bloków cyfrowych 5.4 Programowalne bloki analogowe Architekturę analogowej części układu PSoC przedstawia Rys. 5 .5. Rys.5. 5: Programowalne bloki analogowe. Programowalne bloki analogowe pogrupowane są w 3-modułowe kolumny. Schemat kolumny przedstawia Rys. 5. 6. 8 Rys.5. 6: Schemat kolumny bloków analogowych. Są trzy rodzaje bloków: ACB, ASC i ASD. Bloki ACB oparte na bazie wzmacniaczy operacyjnych ze sterowanymi cyfrowo multiplekserami i rezystorami. Możliwe jest wykonanie przy ich użyciu wzmacniacza odwracającego, nieodwracającego lub komparatora. Sygnały z P0 są podłączone do bloku ACB przez odpowiednie multipleksery wejściowe. Bloki ASC i ASD są zbudowane z wykorzystaniem przełączanych pojemności. Składają się ze wzmacniaczy, kondensatorów i wewnętrznych multiplekserów. Można z nich utworzyć przetworniki A/D i D/A oraz filtry analogowe. Sygnał z multipleksera wejściowego nie może być do nich bezpośrednio doprowadzony i trzeba go doprowadzać przez sąsiednie bloki. Każda kolumna bloków analogowych ma wyjściową szynę danych AnalogOutBus. Przez bufor może być ona podłączona do portów P02-P05. Ponadto, wiele podzespołów (A/D, D/a, filtry) wymagają sygnału zegarowego o określonej częstotliwości. Dla każdej kolumny można wybrać sygnał zegarowy z VC1, VC2 lub z wyjścia dowolnego bloku cyfrowego (np. licznika) za pomocą multipleksera. Rys. 5. 7: Źródła sygnału zegarowego 5.5 Napięcia odniesienia PSoC zawiera trzy stabilne żródła napięć odniesienia: AGND, RefHi i RefLo, zilustrowane na Rys. 5. 8. 9 Rys. 5. 8. Żródła napięć odniesienia. AGND to umowna masa dla układów analogowych. RefHi i RefLo to wysokie i niskie źródło napięcia dla przetworników A/D i D/A. Można je ustawić w parametrach globalnych. Rys.5. 9: Źródła napięć zasilania dla konkretnych wartości. 6 PSoC Designer Projektowanie i programowanie układów odbywa się za pomocą programu PSoC Designer. Jest to darmowe narzędzie dostarczane przez producenta. Użytkownik może korzystać z trzech modułów: edytora programu, edytora wewnętrznych bloków oraz debuggera. W trakcie pracy z programem mamy do dyspozycji bibliotekę gotowych układów elektronicznych w postaci modułów użytkownika. Moduł użytkownika oprócz części sprzętowej (konfiguracja połączeń i bloków) zawiera część programową. Jest to zestaw odpowiednich procedur służących do konfiguracji i obsługi danego wewnętrznego urządzenia. Programista budując aplikacje dysponuje szkieletem programu oraz procedurami obsługi sprzętu. Poza tym część programu generowana jest automatycznie. Projekt może być budowany na dwa sposoby. - Przy użyciu edytora funkcji. Jest to projektowanie ukierunkowane na zadania, jakie ma spełniać układ. W oknie programu definiujemy urządzenia zewnętrzne podłączone do układu oraz 10 edytujemy funkcję, jaka ma być wykonana na sygnałach wewnętrznych i zewnętrznych. Program generuje na tej podstawie gotową konfigurację układu, którą można później modyfikować. - Przy użyciu edytora zasobów. Projektowanie odbywa się na zasadzie przypisywania wybranych funkcji blokom wewnętrznym układu. Następnie graficznie łączy się bloki i określa ich parametry w oknach wyboru. Ta metoda daje pełny dostęp do zasobów układu i dużą swobodę. Aby dowiedzieć się jak działa dowolny moduł można skorzystać z wbudowanej w program dokumentacji dostępnej z okna wyboru modułów. Żeby ją zobaczyć można kliknąć prawym przyciskiem na moduł i z menu wybrać wersję z Datasheet. Okno programu z podziałem na obszary pełniące różne funkcje oraz graficzną reprezentacją zasobów wewnętrznych wybranego typu układu przedstawia Rys. 6.1. Jeśli przy uruchomieniu programu w trakcie ćwiczeń pokaże się tylko okno główne należy dodać kolejne okna z menu View (okno Pinout-test nie jest niezbędne). Rys.6 1: Okno projektu 11 7 Scenariusz ćwiczenia Zadanie 1. Odbierz dane pomiarowe z potencjometru VR wbudowanego w płytkę ewaluacyjną i wyświetl je na wyświetlaczu LCD. W tym celu wykonaj następujące kroki: • Uruchom program PsoC Designer Utwórz nowy projekt poleceniem File -> New Project (nie musisz zgadzać się się na utworzenie nowego katalogu, sugerowanego przez program PSoCDesigner). Następnie w oknie wpisz nazwę projektu i wybierz katalog w którym ma zostać zapisany (Rys 7.1), najlepiej H:\Documents. W kolejnym oknie wybierz urządzenie CY8C29466-24PXI oraz język programowania C (Rys. 7.2). Rys. 7. 1.Okno tworzenia projektu Rys. 7. 2: Okno wyboru urządzenia 12 Wyświetli się okno projektu (patrz pkt. 6). • Dodaj obsługę wyświetlacza LCD Z okna wyboru modułów wybierz Misc Digital -> LCD dwukrotnie klikając na nazwę lub przeciągając na okno główne. Moduł obsługujący LCD nie zajmuje żadnych komórek analogowych i cyfrowych więc pokazany jest tylko w menadżerze plików. Po kliknięciu na niego można w oknie właściwości modułów zmieniać parametry (Rys. 7.3). Rys. 7. 3: Parametry modułu LCD Wybierz, tak jak jest to przedstawione na Rys. 7. 3, LCDPort jako Port_2. Moduł LCD "zajmie” porty P2_0 – P2_6, co jest zgodne ze schematem płytki ewaluacyjnej. • Uruchom wyświetlacz LCD. Po zapoznaniu się z działaniem modułu, opisanej w dokumentacji Datasheet, należy go uruchomić. Do tego służą odpowiednie funkcje opisane w dokumentacji. Z menadżera plików wybierz Nazwa Projektu -> Source Files -> main.c (Rys. 7. 4 ). Dwukrotnie na nim kliknij, a otworzy się w oknie głównym. Rys.7. 4: Wybór pliku main.c W funkcji main dodaj uruchomienie wyświetlacza LCD i wyświetlenie na nim dowolnego ciągu znaków. 13 Przykładowy kod: void main(void) { LCD_1_Init(); LCD_1_Position(0,0); LCD_1_PrCString("Test"); } Następnie wybierz polecenie Built -> Generate/Built "nazwa projektu" Project. Po tej czynności w oknie Output powinien pojawić się komunikat o braku błędów. Jeżeli tak jest, to można zaprogramować mikrokontroler. Wybierz polecenie Program -> Program Part... Następnie zaprogramuj mikrokontroler i włącz zasilanie ( Rys. 7. 5 ). Na ekranie LCD powinien pojawić się wybrany tekst. Rys. 7. 5: Okno programatora Wypisanie na LCD danych typu char lub string jest bardzo proste. Trudniej jest w przypadku danych liczbowych typu float albo int. Aby je poprawnie wyświetlić należy dokonać konwersji tych danych na typ char. Najprościej to zrobić używając funkcji csprintf znajdującej się w pliku stdio.h. Aby poprawnie działała z danymi typu float kliknij w Project -> Create local.mk for 'nazwa' Project i dodaj w nim linijkę: CODECOMPRESSOR:=$(CODECOMPRESSOR) -lfpm8c po czym zapisz projekt i ponownie użyj polecenia Built -> Generate/Built "nazwa projektu" Project. Przykładowe wywołanie funkcji csprintf: csprintf(str, "%f", 17.12); gdzie str to wcześniej zadeklarowana tablica char[]. 14 Z różnych względów wyświetlana liczba może się nieznacznie różnić od tej którą wpisaliśmy. Zauważ, że do wyświetlania zmiennej, używa się innej funkcji. Jej przykładowe użycie: LCD_1_PrString(str); • Skonfiguruj układ odbierający dane z potencjometru Sygnał analogowy napięciowy z płytki stykowej odbierany będzie za pomocą przetwornika AC, z podłączonym na wejściu wtórnikiem w postaci wzmacniacza operacyjnego, jak na Rys. 7.6. Rys. 7. 6: Schemat odbioru sygnału analowgowego Aby dodać wzmacniacz, w oknie wyboru modułów kliknij dwukrotnie w Amplifiers -> PGA. Moduł wzmacniacza PGA składa się z jednego bloku analogowego, który może być umieszczony w jednym z bloków ACB0. Po zapoznaniu się z dokumentacją układu, w oknie właściwości modułu (Rys. 7. 7) ustaw na wejściu multiplekser wejściowy tej kolumny. Vss, czyli w tym wypadku masę ustaw jako napięcie odniesienia i zablokuj wyjście na szynę analogową tej kolumny. Rys. 7. 7: Okno właściwości wzmacniacza Kolejnym etapem konfiguracji wzmacniacza jest ustawienie połączeń. Należy wybrać port, który będzie podłączony do wejścia wzmacniacza przez multiplekser oraz sygnał zegarowy który będzie nim sterował (VC1). Wyboru dokonaj za pomocą kliknięcia lewym przyciskiem myszy w odpowiednim miejscu jak na Rys. 7.8 i Rys. 7.9, wybierając odpowiedni port i zegar. 15 Rys. 7. 8: Wybór portu Rys. 7. 9: Wybór sygnału zegarowego W pliku main.c dopisz odpowiednie linijki kodu, odpowiedzialnego za inicjalizację wzmacniacza. PGA_1_Start(PGA_1_MEDPOWER); Kolejnym elementem układu akwizycji danych jest przetwornik AC. Zalecany element to ADCINCVR, który znajduje się w ADCs -> ADCINCVR. Dodaj go do projektu. Powinien pojawić się w tej samej kolumnie analogowej co wzmacniacz. W polu właściwości elementu ( Rys. 7. 10) ustaw źródło sygnału wejściowego na blok który zajmuje wzmacniacz, Ustaw wybraną rozdzielczość, format liczb i zegar na V1. 16 W celu uzyskania szerokiego zakresu napięć we właściwościach globalnych ustaw odpowiednio: napięcie odniesienia RefMux i zakres napięć na (Vdd/2 +/- Vdd/2). Rys. 7.10: Konfiguracja ADC. Odpowiednią funkcją zainicjalizuj przetwornik i włącz obsługę przerwań, dodając w main.c poniższy fragment kodu: M8C_EnableGInt; //uruchomienie obslugi przerwan ADCINCVR_1_Start(ADCINCVR_1_MEDPOWER); ADCINCVR_1_GetSamples(0); //start przetwornika A/C //liczba próbek, 0 – pobieranie ciągłe Podłącz pin potencjometru VR do pinu odpowiadającemu odpowiedającemu portowi ustawionemu jako wejście wzmacniacza. Korzystając z funkcji obsługujących przetwornik (moduł ADC), spróbkuj napięcie VR. Należy utworzyć funkcję, która odbiera dane z przetwornika, przetwarza na wartość napięcia. • Wyświetl wartość napięcia na LCD Zadanie 2: W podobny jak w zadaniu 1 sposób odbierz i wyświetl na LCD wartości pomiarów temperatury i ciśnienia lub temperatury i wilgotności (wartości z obu czujników powinnyy być jednocześnie widoczne na wyświetlaczu). Rys. 7. 11 przedstawia połączenia czujników na płytce stykowej. Pamiętaj o konieczności sprawdzenia do którego pinu podłączony jest odpowiedni czujnik, a następnie ustawieniu odpowiedniego portu jako wejście wzmacniacza. 17 Rys. 7. 11: Połączenia między elementami na płytce stykowej. Odpowiednie funkcje i charakterystyki czujników można znaleźć w dokumentacjach czujników dostarczanych wraz z powyższą instrukcją. Zadanie 3: Skomunikuj się z komputerem za pomocą portu szeregowego. Zalecany moduł to Digital Com -> UART, ustaw dla tego modułu zegar i podłącz wejścia i wyjścia do portów. Zalecany program to Hyper Terminal, który w systemie Windows można znaleźć w Start -> Akcesoria -> Komunikacja -> Hyper Terminal. Po uruchomieniu programu wpisz nazwę nowego połączenia, Wybierz odpowiedni port COM, kliknij w Configure..., ustaw liczbę bitów na sekundę na 19 200, 8 bitów danych, brak parzystości i sterowania przepływem. Następnie napisz program obsługi portu szeregowego posługując się dostępną w PSoC Designer dokumentacją. Materiały szkoleniowe firmy CYPRESS zawierają przykładowy projekt z programem testowym dla UART oraz obszernym komentarzem jak należy podłączyć i uruchomić UART. Uruchom program testowy, a następnie zmodyfikuj tak, aby na ekran komputera przesyłane były wyniki pomiarów z czujnika (szczegóły zadania poda prowadzący). Kluczow_ spraw_ jest dobranie dobrej cz_stotliwości zegara sterujacego UART. Jest jakiś problem 19 200 / 16 = 1200 (i gdzieś wychodzi to 1200) oraz czy VC1 VC1 i 3 stanowią dzielniki Sysclock czy cpuclock. Dużo prościej ustawić z dzielnikiem częstotliwości (jak w instrukcji). 19200 *8 = 153 600 (na wejściu RX) 153 600 311 (+1) = 47 923 200 (prawie 48 Mhz) = 2 *sysclk 18 19