podstawy mikroelektroniki (laboratorium)

Transkrypt

podstawy mikroelektroniki (laboratorium)
Politechnika Warszawska
Wydział Elektroniki i Technik Informacyjnych
Instrukcja do przedmiotu
PODSTAWY MIKROELEKTRONIKI
(LABORATORIUM)
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 8 i 9) wynosi 10 pkt, z czego:
•
kolokwium wstępne – 2 pkt
•
zadanie 1 – 4 pkt,
•
zadanie 2 – 3 pkt,
•
zadanie 3 – 1pkt.
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 CYBC29466-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 wilgotności.
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 -> Narzędzia
Komunikacji -> 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ą lub
materiałami szkoleniowymi firmy CYPRESS.
18