Systemy Wbudowane - Laboratorium

Systemy Wbudowane - Laboratorium Systemy Wbudowane - Laboratorium

artemis.wszib.edu.pl
from artemis.wszib.edu.pl More from this publisher
15.06.2015 Views

Systemy Wbudowane - Laboratorium Informatyka III rok studia dzienne Ćwiczenie 1a: Pamięci w systemach mikroprocesorowych Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z podstawowymi cechami charakterystycznymi, działaniem i wykorzystaniem różnych rodzajów pamięci w systemach mikroprocesorowych. Wymagane wiadomości • Budowa mikrokontrolera BasicStamp2 • Zestaw edukacyjny StampInClass – budowa i obsługa • Język PBASIC. • Rodzaje i podstawowe własności pamięci w systemach mikroprocesorowych. • Magistrala I2C. Warstwa fizyczna i protokół wymiany informacji. Wykorzystywany sprzęt Komputer PC z oprogramowaniem do obsługi zestawu BasicStamp. Zestaw edukacyjny StampInClass firmy Parallax Inc. wraz z niezbędnym wyposażeniem dodatkowym. Literatura: www.parallaxinc.com www.stampsinclass.com http://www.atmel.com/dyn/resources/prod_documents/doc0180.pdf http://www.semiconductors.philips.com/acrobat/datasheets/PCF8583_5.pdf Mielczarek W.: Szeregowe interfejsy cyfrowe. Wyd. Helion 1993 Baranowski J., Kalinowski B., Nosal Z.: Układy elektroniczne cz. III Układy i systemy cyfrowe. WNT Warszawa 1994. 1

<strong>Systemy</strong> <strong>Wbudowane</strong> - <strong>Laboratorium</strong><br />

Informatyka III rok studia dzienne<br />

Ćwiczenie 1a:<br />

Pamięci w systemach mikroprocesorowych<br />

Cel ćwiczenia<br />

Celem ćwiczenia jest zapoznanie się z podstawowymi cechami charakterystycznymi,<br />

działaniem i wykorzystaniem różnych rodzajów pamięci w systemach<br />

mikroprocesorowych.<br />

Wymagane wiadomości<br />

• Budowa mikrokontrolera BasicStamp2<br />

• Zestaw edukacyjny StampInClass – budowa i obsługa<br />

• Język PBASIC.<br />

• Rodzaje i podstawowe własności pamięci w systemach mikroprocesorowych.<br />

• Magistrala I2C. Warstwa fizyczna i protokół wymiany informacji.<br />

Wykorzystywany sprzęt<br />

Komputer PC z oprogramowaniem do obsługi zestawu BasicStamp.<br />

Zestaw edukacyjny StampInClass firmy Parallax Inc. wraz z niezbędnym wyposażeniem<br />

dodatkowym.<br />

Literatura:<br />

www.parallaxinc.com<br />

www.stampsinclass.com<br />

http://www.atmel.com/dyn/resources/prod_documents/doc0180.pdf<br />

http://www.semiconductors.philips.com/acrobat/datasheets/PCF8583_5.pdf<br />

Mielczarek W.: Szeregowe interfejsy cyfrowe. Wyd. Helion 1993<br />

Baranowski J., Kalinowski B., Nosal Z.: Układy elektroniczne cz. III Układy i systemy<br />

cyfrowe. WNT Warszawa 1994.<br />

1


Wprowadzenie<br />

W systemach mikroprocesorowych wykorzystuje się różne rodzaje pamięci. Generalnie podział<br />

przeprowadzany jest na pamięci o dostępie swobodnym (RAM) i pamięci stałe (ROM).<br />

Pamięci o dostępie swobodnym charakteryzują się tym, ze użytkownik może w dowolnym<br />

momencie odczytywać lub modyfikować zawartość takiej pamięci. Ujemna strona takich<br />

pamięci jest fakt, że tracą one swoją zawartość wraz z zanikiem napięcia zasilającego. Istnieją 2<br />

rodzaje pamięci typu RAM:<br />

- statyczne cechujące się tym, ze raz wpisana informacja jest przechowywana do momentu jej<br />

zmiany lub zaniku napięcia zasilania<br />

- dynamiczne cechujące się tym, ze wpisana informacja zanika (dość szybko) z upływem<br />

czasu i z celu zapobiegnięcia temu zjawisku wymagane jest odświeżanie jej zawartości.<br />

Najważniejszą cecho pamięci typu ROM jest jej nieulotność.<br />

Do niedawna były to pamięci których zawartość była programowana na etapie produkcji ROM,<br />

lub wymagała specjalistycznego urządzenia (programatora) do zaprogramowania jej zawartości<br />

(PROM,EPROM).<br />

W chwili obecnej sytuacja uległa znaczącym zmianom. Konstruktorom udało się wyeliminować<br />

większość niedogodności związanych z programowaniem tego typu pamięci zachowując jej<br />

najważniejszą cechę – nieulotność.<br />

Innym podziałem jaki można wprowadzić to sposób dostępu do informacji zapisanej w<br />

pamięci. Podział jaki tu można wprowadzić to pamięci o dostępie równoległym –<br />

jednocześnie mamy dostęp do całego bajtu (lub innej jednostki), oraz pamięci o dostępie<br />

szeregowym – w danej chwili mamy dostęp do pojedynczego bitu. Skompletowanie całej<br />

informacji wymaga wielokrotnego odwoływania się do pamięci poprzez system<br />

nadrzędny.<br />

Z powodu ograniczeń możliwości zestawu Basic Stamp w trakcie ćwiczenia<br />

zaprezentowane zostaną wybrane rodzaje i cechy pamięci stosowanych w systemach<br />

mikroprocesorowych.<br />

2


1. Statyczna pamięć równoległa<br />

Zapoznanie się z pamięciami rozpoczniemy od zbadania układu statycznej pamięci o<br />

organizacji 1024x4 bity typu 2114. Układ wyprowadzeń pamięci typu 2114 przedstawia<br />

rysunek<br />

Linie A0-A9 służą do podawania adresu komórki z której/ do<br />

której chcemy skorzystać.<br />

Linie I/O0-IO3 tworzą 4-biową magistral danych.<br />

Linie CE i WE sterują kierunkiem przepływu informacji.<br />

Aktywny (niski stan) na linii CE przy nieaktywnym stanie na<br />

linii WE oznacza, że odbywa się odczyt z pamięci. Jeśli oba<br />

sygnały CE i WE są aktywne to oznacza że dane są do pamięci<br />

zapisywane.<br />

Wyprowadzenia VCC i GND służą do podłączenia napięcia<br />

zasilającego i masy.<br />

Ponieważ BS2 dysponuje 20 wyprowadzeniami, pamięć będzie podłączona tak, ze<br />

możliwy będzie dostęp do 256 lokacji<br />

Przed przystąpieniem do jakichkolwiek prac odłączyć zasilanie od płytki testowej<br />

!!<br />

Podłączenie zasilania może nastąpić po sprawdzeniu poprawności montażu przez<br />

prowadzącego zajęcia.<br />

Przystępując do badania pamięci 2114 należy za pomocą dostępnych przewodów<br />

przygotować następujący układ połączeń:<br />

a) połączyć wyprowadzenie GND układu 2114 z gniazdami VSS płytki testowej.<br />

b) linie I/O1-IO4 połączyć odpowiednio z liniami P0-P3<br />

c) linie adresowe A0-A7 podłączyć odpowiednio do linii P8-P15<br />

d) linie adresowe A8 i A9 połączyć z gniazdem Vss<br />

e) sygnał CE połączyć do linii P6<br />

f) sygnał WE połączyć do linii P7<br />

g) Linie zasilania VCC połączyć do gniazd oznaczonych Vdd.<br />

Poniżej zamieszczony jest program realizujący funkcje zapisania i odczytania<br />

pojedynczego bajtu. Pamięć po włączeniu zasilania ma zawartość nieokreśloną.<br />

'{$STAMP BS2}<br />

dane VAR Nib ' szyna danych dla pamieci 2114<br />

adres VAR Byte ' linie adresu<br />

'pamiec 2114 podalczona<br />

' D0-D3 podlaczone do P0-P3 (nibble A)<br />

' A0-A7 do P8-P15<br />

' WE - P7<br />

' CS - P6<br />

cs CON 6<br />

we CON 7<br />

'ustawiamy kierunek lini<br />

start:<br />

3


DIRH =255 ' bedziemy sterowac liniami adresu<br />

DIR6=1 ' CS jako wyjscie<br />

DIR7=1 ' WE jako wyjscie<br />

DIRA=$f 'linie danych do zapisu<br />

HIGH we ' linie sterujace w stan nieakywny<br />

HIGH cs<br />

'ustalamy wartości danych i adresu<br />

adres=$55<br />

dane=$a<br />

'zapis do pamieci<br />

OUTH =adres 'wystawiamy adres na szyne adresowa<br />

OUTA =dane 'wystawiamy dane na szyne danych<br />

'wypelnienie pamieci<br />

LOW we 'aktywujemy linie sterujace<br />

LOW cs '<br />

DEBUG "zapis: adres = ",HEX adres ," wartosc = ",HEX dane,CR<br />

HIGH cs 'dezaktywujemy linie sterujace.<br />

HIGH we<br />

'odczyt zapisanej danej<br />

dane=0 'zerujemy zeby nie bylo ze zostalo w programie<br />

OUTA=$f ' ustawiamy wyjscia w stan nieaktywny<br />

DIRA=0 'zmieniamy kierunek szyny danych<br />

OUTH=adres ' ustawiamy ponownie adres<br />

LOW cs 'aktywujemy strob do odczytu<br />

dane=INA 'odczytujemy zaadresowany bajt<br />

DEBUG "odczyt: adres = ",HEX adres," wartosc = ",HEX dane,CR<br />

HIGH cs ' i dezaktywujemy linie sterujace<br />

END<br />

ZADANIE 1<br />

Przebudować program tak, aby zapis i odczyt pamięci realizowane były niezależnymi<br />

procedurami wywoływanymi za pomocą instrukcji GOSUB.<br />

Przy pomocy tak przygotowanych procedur przygotować 2 programy:<br />

Program A realizujący wypełnienie dostępnych komórek pamięci wartościami $5 , $A<br />

Program B wyświetlający zawartość całej dostępnej pamięci.<br />

Uruchomić program A wypełniając pamięć zadanymi wartościami.<br />

Uruchomić program B sprawdzając poprawność pracy programu A.<br />

Odłączyć na chwile zasilanie układu i podłączyć ponownie.<br />

Uruchomić program B sprawdzając zawartość pamięci po chwilowym zaniku zasilania.<br />

Zanotować ogólne spostrzeżenia z obserwacji.<br />

2. Szeregowa pamięć statyczna RAM<br />

Układ PCF 8583 jest przykładem statycznej pamięci o RAM o pojemności 256 bajtów i<br />

szeregowym dostępie do danych. Dostęp szeregowy jest realizowany za pośrednictwem<br />

magistrali I 2 C.<br />

Obok funkcji pamięci RAM układ może jeszcze pełnić inne funkcje. Nie jest to jednak<br />

przedmiotem obecnych rozważań.<br />

Więcej informacji na temat magistrali I2C można znaleźć w książce: Mielczarek W.:<br />

Szeregowe interfejsy cyfrowe. Wyd. Helion 1993<br />

4


Opis wyprowadzeń:<br />

OSCI, OCSO – wyprowadzenie niewykorzystywane w<br />

ćwiczeniu.<br />

A0 – wejście ustawiania adresu urządzenia dla<br />

magistrali I2C<br />

Vss – ujemny biegun zasilania.<br />

SDA – dwukierunkowa szeregowa linia danych<br />

SCL – wejście impulsów zegara<br />

INT – wyprowadzenie nie wykorzystywane w ćwiczeniu<br />

Vdd dodatni biegun zasilania.<br />

Do przeprowadzenia badania układu pamięci należy zmontować odpowiedni układ.<br />

Przed przystąpieniem do czynności montażowych odłączyć napięcie zasilania od płytki<br />

testowej!<br />

Za pomocą dostępnych przewodów zrealizować następujące połączenia:<br />

a) wyprowadzenie Vss połączyć ze złączem Vss<br />

b) wyprowadzenie A0 podłączyć do gniazda Vdd<br />

c) Wyprowadzenie SDA podłączyć do P1<br />

d) Wyprowadzenie SCL podłączyć do P0<br />

e) Wyprowadzenie Vdd podłączyć do gniazda Vdd<br />

f) Rezystorem R1 o wartości 10kohm (brązowy, czarny, pomarańczowy) połączyć<br />

wyprowadzenie SDA z gniazdem Vdd<br />

g) Rezystorem R2 o wartości 10kohm (brązowy, czarny, pomarańczowy) połączyć<br />

wyprowadzenie SCL z gniazdem Vdd<br />

Przed ponownym podłączeniem zasilania przedstawić układ do sprawdzenia<br />

prowadzącemu zajęcia.<br />

W przykładowym programie zawarte są gotowe procedury realizujące wymianę danych<br />

z układem PCF 8583 za pomocą protokołu magistrali I2C.<br />

' pcf8583.bs2<br />

' procedury obslugi pamieci PCF8583<br />

' dla BasicStamp 2<br />

' adres urzadzenia I2C $A2,$A3<br />

'{$STAMP BS2}<br />

SDA_PIN CON 1 'linia SDA podlaczona do pin1<br />

SCL_PIN CON 0 'linia SCL podlaczona do pin0<br />

SDA_OUT VAR OUT1<br />

SCL_OUT VAR OUT0<br />

SDA_IN VAR IN1<br />

SDA_DIR VAR DIR1<br />

OUT CON 1<br />

IN CON 0<br />

o_byte VAR Byte<br />

i_byte VAR Byte<br />

ack_bit VAR Bit<br />

n VAR Byte<br />

b VAR Bit<br />

' bajt przeznaczony do wyslania<br />

' bajt odczytywany<br />

' bit potwierdzenia<br />

' zm sterujaca petla<br />

' bit<br />

' ZAPIS pcf<br />

5


GOSUB i2c_start<br />

o_byte=$a2<br />

GOSUB i2c_out_byte<br />

GOSUB i2c_nack<br />

o_byte=$55<br />

GOSUB i2c_out_byte<br />

GOSUB i2c_nack<br />

' warunek startu na magistrale<br />

' adres urządzenia na magistrale<br />

'<br />

' ustawiamy adres komorki<br />

o_byte=$aa ' dana $aa do komorki 55<br />

GOSUB i2c_out_byte<br />

GOSUB i2c_nack<br />

GOSUB i2c_stop<br />

'ODCZYT pcf<br />

GOSUB i2c_start<br />

o_byte=$a2<br />

GOSUB i2c_out_byte<br />

GOSUB i2c_nack<br />

o_byte=$55<br />

GOSUB i2c_out_byte<br />

GOSUB i2c_nack<br />

'warunek stopu<br />

' adres urządzenia<br />

' ustawiamy adres komorki<br />

' do odczytu<br />

GOSUB i2c_start ' przy odczycie protokol wymaga jeszcze<br />

' raz warunku startu<br />

o_byte=$a3 ' i czytamy z urzadzenia o adresie o 1<br />

GOSUB i2c_out_byte ' wiekszym wartosc bajtu z<br />

GOSUB i2c_nack<br />

GOSUB i2c_get_byte<br />

GOSUB i2c_stop<br />

' w zmiennej I-byte mamy odczytana wartosc<br />

'i konczymy transmisje warunkiem stopu<br />

DEBUG "Wynik = ",HEX i_byte,CR<br />

STOP<br />

'<br />

***************************************************************************<br />

' Procedury obslugi magistrali i2c<br />

'<br />

***************************************************************************<br />

i2c_start<br />

' wysyla na magistrale I2C warunek startu<br />

HIGH SDA_PIN<br />

HIGH SCL_PIN<br />

DEBUG "START"<br />

DEBUG $0d<br />

LOW SDA_PIN 'przejscie na linii SDA ze stanu wysokiego w stan<br />

niski podczas wysokiego stanu na SCL<br />

LOW SCL_PIN<br />

RETURN<br />

i2c_stop<br />

' wysyla na magistrale I2C warunek stopu<br />

LOW SDA_PIN<br />

HIGH SCL_PIN<br />

PAUSE 10<br />

HIGH SDA_PIN 'przejscie na lini SDA ze stanu nisiego w wysoki<br />

gdzy SCL w stanie wysokim<br />

DEBUG "STOP"<br />

DEBUG $0d<br />

6


RETURN<br />

i2c_nack<br />

'oczekiwanie na potwierdzenie odebrania bajtu przez SLAVE<br />

SDA_DIR=IN ' zmiana kierunku lini SDA na wejscie aby odebrac<br />

bit potwierdzenia<br />

ack_bit=1<br />

HIGH SCL_PIN<br />

PAUSE 100<br />

ack_bit=SDA_IN<br />

DEBUG "A"<br />

DEBUG DEC ack_bit<br />

DEBUG $0d<br />

LOW SCL_PIN<br />

PAUSE 50<br />

SDA_DIR=OUT ' output<br />

RETURN<br />

i2c_ack_in<br />

'wystawienie potwierdzenia przy odbieraniu danych przez mastera<br />

LOW SDA_PIN<br />

HIGH SCL_PIN<br />

DEBUG "A0"<br />

DEBUG $0d<br />

PAUSE 100<br />

LOW SCL_PIN<br />

PAUSE 100<br />

RETURN<br />

i2c_get_byte<br />

' procedura zwaraca wartosc odebranego bajtu przez i2c do zmiennej i_byte<br />

SDA_DIR=IN<br />

'SDA jako wejscie<br />

i_byte=0<br />

FOR n=0 TO 7<br />

PAUSE 200<br />

HIGH SCL_PIN<br />

PAUSE 100<br />

i_byte=(i_byte > 7) & 1<br />

IF (b=1) THEN out_one<br />

SDA_DIR=OUT<br />

DEBUG "0"<br />

HIGH SCL_PIN<br />

7


out_one<br />

PAUSE 100<br />

LOW SCL_PIN<br />

PAUSE 100<br />

o_byte=o_byte


Umieszczamy układ 24c02 w podobny sposób jak PCF8583 w gnieździe testowym.<br />

Przy pomocy przewodów realizujemy następujące połączenia:<br />

a) Wyprowadzenie GND podłączamy do Vss<br />

b) Wyprowadzenie Vcc podłączamy do Vdd<br />

c) Wejścia A0-A2 łączymy ze sobą i podłączamy do wyprowadzenia GND – ustalamy w<br />

ten sposób adres urządzenia na A0. Szczegółowe informacje na ten temat można<br />

znaleźć w odpowiednim pliku pdf.<br />

d) Wejście WP łączymy z wyprowadzeniem Vss lub GND<br />

e) Linie SDA podłączamy do linii SDA układu PCF8583<br />

f) Linie SCL podłączamy do linii SCL układu PCF8583<br />

Przed ponownym podłączeniem zasilania prowadzący powinien sprawdzić poprawność<br />

połączeń.<br />

Aby dostosować procedury wymiany informacji z pamięcią wystarczy w przykładach<br />

zamienić adres urządzenia I2C z $a2 na $a0 i Z $a3 na $a1. I już mamy gotowe<br />

procedury obsługi pamięci 24c02.<br />

Należy mieć na uwadze, że procedura zapisu wartości do pamięci EEPROM jest dość<br />

czasochłonna i po jej zainicjowaniu pamięć jest niedostępna dla użytkownika.<br />

Drugim ważnym ograniczeniem jest maksymalna ilość bajtów które można zapiać w<br />

trybie blokowym. Dla układu 24c02 wynosi ona 8 bajtów.<br />

ZADANIE 4<br />

Dokonać modyfikacji procedur obsługi pamięci PCF8583 tak aby poprawnie<br />

współpracowały z pamięcią 24c02.<br />

Wykonać test ulotności informacji. Czas wyłączenia zasilania ograniczyć do kilku minut.<br />

Określić doświadczalnie czas trwania operacji zapisu. Wystarczy w tym celu ustalić jaka<br />

jest minimalna przerwa niezbędna do przeprowadzenia 2 po sobie następujących<br />

operacji zapisu nie wykonywanych w trybie przesłania blokowego.<br />

Wyniki zanotować.<br />

Wnioski<br />

Na podstawie przeprowadzonych obserwacji porównać badane układy pamięci pod<br />

względem szybkości i sposobu dostępu i innych uznanych za stosowne cech.<br />

9

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!