TM Kolos 2 Cennik 05/10 1) moc obliczeniowa / adresowanie 2 obsługa WE/WY 2 przerwania 2 zarządzanie energią 2 inne (bezpieczeństwo, gabaryty, programowanie, reprogramowanie itp) 2 -------razem: 10 2) sterowanie ROM 2 sterowanie RAM 3 dekodowanie pamięci 3 szybki zapis RAM 3 sterowanie WE/WY 2 implementacja WE/WY 2 -------razem: 15 3) przypisanie portów 2 podłączenie klawiatury / wyświetlacza 3 podłączenie UART 2 inicjowanie systemu 3 obsługa UART 3 obsługa klawiatury / wyświetlacza 4 przetwarzanie / dekompozycja 3 zarządzanie energią 5 -------razem: 25
1A. Sformułować założenia projektowe dla systemu mikroprocesorowego sterującego działaniem automatu z napojami albo bankomatu (do wyboru). Bankomat: - układ oparty będzie na paru współpracujących ze sobą mikrokontrolerach MSP430, ze względu na złożoność operacji wyświetlania, autoryzacji i komunikacji poprzez łącze modemowe z centralą. - układ posiada zasilanie stałe z sieci oraz zasilanie awaryjne, tak aby w przypadku trwającej transakcji mógł ją dokończyć oraz wysłać informacje do centrali o zaniku zasilania - system powinien posiadać watchdoga, który monitorować będzie poprawność działania systemu oraz stabilny poziom zasilania. - obsługa monitora, przycisków, czytnika kart oraz modemu do łączności z centralą zostanie zaimplementowana sprzętowo. Jednak logika autoryzacji, przetwarzanie danych wysyłanych i odbieranych, wyświetlany pulpit i przypisanie przycisków do konkretnych działań zostanie przeniesione na płaszczyznę programową, aby urządzenie mogło być wykorzystywane przez różne banki. - układ powinien posiadać możliwość prostej aktualizacji oprogramowania, która ściągana byłaby bezpośrednio z centrali przez łącze modemowe. - pamięć flash musi zostać jak najlepiej zabezpieczona, tak aby niemożliwa była jakakolwiek nieautoryzowana ingerencja w zapisany kod - ze względu na skomplikowanie samego programu, środowiskiem programowym powinno być c++ 1B Sformułować założenia projektowe dla systemu mikroprocesorowego sterującego działaniem cyfrowego dyktafonu lub pilota RTV. Pilot RTV: - układ oparty będzie na mikrokontrolerze MSP430 - zasilanie układu stanowić będą dwie baterie AA. Zasilanie awaryjne jest zbędne, ponieważ przerwanie działania układu w trakcie nie powoduje żadnych negatywnych konsekwencji - układ powinien posiadać watchdoga który w przypadku zawieszenia się programu, zrestartuje urządzenie - za logikę działania urządzenia odpowiadać będzie w większosci sprzęt, program powinien być jak najprostszy - przypisanie klawiszy powinno być zachowane na pamięci nieulotnej flash - zw względu na prostotę programu, środowiskiem programowym będzie assembler 1C. sformułować założenia projektowe dla systemu mikroprocesorowego sterującego działaniem aparatu fotograficznego lub alarmu samochodowego. Alarm samochodowy: - układ oparty będzie na dwóch mikrokontrolerach MSP430, gdzie jeden będzie w stanie aktywnym, a drugi będzie występował w roli jednostki zapasowej w przypadku wykrycia błędu bądź uszkodzenia jednostki głównej - układ powinien być zasilany bezpośrednio z akumulatora samochodowego, jednak posiadać własną, pojemną baterię ładowaną przez akumulator, tak aby w przypadku ocięcia głównego źródła zasilania alarm mógł samodzielnie działać jeszcze przez dłuższy czas, co ze względu na przeznaczenie systemu jest wymogiem krytycznym - układ musi uniemożliwiać jakąkolwiek ingerencję w program, a w przypadku naruszenia dostępu do pamięci powinien uruchomić alarm. Aktualizacja oprogramowania wiązałaby się z wymianą jednostki centralnej w autoryzowanym serwisie, jednak takie postępowanie zapewnia większe bezpieczeństwo. - system musi posiadać sprawną diagnostykę, monitorującą sprawność wszystkich swoich komponentów. - w przypadku wykrycia błędu lub zaniku zasilania, układ powinien zablokować komputer pokładowy w samochodzie i oczekiwać na wpisanie specjalnego kodu przez właściciela
2A. Zaprojektować i opisać system z procesorem Z80, pamięcią EPROM 16KB+32KB oraz pamięcią RAM 4x8KB. Należy zapewnić przełączanie fragmetów RAM w przestrzeni adresowej pamięci o rozmiarze 16KB Adresy zostały poddane stronnicowaniu na 4 strony: jedna dla EPROM 32 KB, druga dla EPROM 16 KB, trzecia i czwarta dla dwóch kolejnych par kostek RAM po 8 KB. W pierwszym cyklu należy wykonać operacje zapisu do adresu większego bądź równego 0x8000 ( A15 = 1 ) i w zapisywanych danych wskazać stronę: 0x01 dla EPROM 32 KB, 0x2 dla EPROM 16 KB, 0x4 dla pierwszej pary RAM, 0x8 dla drugiej pary RAM. Rozróżnienie między dwoma kostakami w parze zapewnia A13.
2A. Rozwiązanie alternatywne
2A. rozwiązanie alternatywne'
2B. Zaprojektować i opisać system z procesorem Z80, pamięcią EPROM 2x16KB, pamiecią RAM 3x8KB i czterema 8 bitowymi portami wyjściowymi. Układy RAM są mapowane zarówno w przestrzeni pamięci, jak i w przestrzeni we/wy Z80 posiada tylko 8 bitów adresowych. Pamięć EPROM adresujemy A0-A13, a do wyboru kości używamy A14. Aby wybrac EPROM należy zaadresować zatrzask ( A15 = 1) a następnie D7 ustawić na 0. Dla D7 = 1, D6, D5 = 0 wybrane są porty wyjściowe, a dla innych kombinacji D6, D5 konkretne kostki pamięci RAM. Pamięć RAM jest adresowana bitami A0-A7 adresu oraz D0-D4 danych.
2B - rozwiązanie alternatywne Chcemy zamapować 3x8kB RAMu i 2x16kB ROMu = 56kB. Pozostaje nam 8kB wolnej przestrzeni adresowej, w którą możemy zmapować porty wyjściowe. Nie potrzebujemy stronicowania. W zadaniu jest wskazane, że RAM ma być mapowany zarówno w pamięci jak i IO. Pamięci EPROM mapujemy tylko w MEM. Ponieważ w ROMie będzie zapisany program, wg mnie adresy 0066h i 0038h, adresujące w Z80 procedury obsługi przerwań, powinny mapować się w ROM: 00xxxxxxxxxxxxxx E16.0 01xxxxxxxxxxxxxx E16.1 Pamięci RAM mapujemy w MEM i IO: 100xxxxxxxxxxxxx R8.0 101xxxxxxxxxxxxx R8.1 110xxxxxxxxxxxxx R8.2 Porty wyjściowe - możemy zamapować albo tylko w IO albo w MEM + IO (nie wiem którą opcję Chrząszcz by wolał). Jeśli wybierzemy opcję "MEM + IO": Ponieważ pod adresami zaczynającymi się od '0' znajduje się EPROM, do którego na pewno nie będziemy pisać, to możemy te adresy wykorzystać dla portów wyjściowych, z których z kolei nie będziemy czytać. Jeśli wybierzemy opcję "tylko IO", nic nie stoi na przeszkodzie żeby również takie adresowanie zastosować. Zysk względem skorzystania z wolnego obszaru przestrzeni adresowej (adresy 111xxxxxxxxxxxxx) jest taki, że wystarczy nam dekodowanie 3ech, nie 5ciu bitów adresu. 000xxxxxxxxxxxxx P0 001xxxxxxxxxxxxx P1 010xxxxxxxxxxxxx P2 011xxxxxxxxxxxxx P4 Sposób podłączenia CS: Wystarczą nam pamięci z pojedynczym wejściem CS + bramki OR4. Jeśli użyjemy pamięci z podwójnym CS wystarczą bramki OR2. E16.0::CS = OR(A15, A14, MREQ, 0) E16.1::CS = OR(A15,!A14, MREQ, 0) R8.0::CS = OR(!A15, A14, A13, 0) (mapujemy zarówno w IORQ jak i MREQ, więc te dwa sygnały olewamy) R8.1::CS = OR(!A15, A14,!A13, 0) R8.2::CS = OR(!A15,!A14, A13, 0)
Sposób podłączenia portów: Opcja "tylko IO". Sygnały WR oraz IORQ (oba są ustawiane jednocześnie) chcemy mieć jak najbliżej układu buforującego, żeby po ustaleniu się linii adresowych, a następnie IORQ,WR = 0, zapis nastąpił jak najszybciej, więc rozwiązanie z pdf było nietrafione. Konstrukcja poniższa zużywa więcej bramek, niż gdybyśmy inaczej rozłożyli sygnały, za to działa najszybciej. Jeśli byśmy mapowali porty zarówno w MEM jak i IO, to pod sygnał LE podpinamy dla powyższego 573: NOR4(A15, A14, A13, WR).
2C. Zaprojektować i opisać system z mikroprocesorem Z80, pamięcią EPROM 4x8KB, pamięcią RAM 32KB i czterema 8-bitowymi portai wejściowymi dekodowanymi w przestrzeni adresowej pamięci. Pamięć EPROM jest podłączona w taki sposób, że kolejne kilobajty są przechowywane w różnych układach. EPROM + RAM + 4 Porty dają w sumie więcej adresów, niż Z80 jest w stanie zaadresować. Dlatego użyto tutaj stronnicowania. Zatrzask stronnicuje dostępne adresy. Wymaga to dwóch cykli dostępu: pierwszy to zapis na adres równy lub większy 0x8000 ( A15 bit aktywny ) danych które wskażą docelowe urządzenie: 0x1 pamięć EPROM, 0x2 pamięć RAM, 0x4 porty wejściowe. Układ kombinacyjny przy pamięci EPROM zapewnia odczyt każdego kolejnego kilobajtu z innej kości pamięci. Porty wejściowe są zbudowane w czterech trójstanowych buforów 541. Dostępne adresy to 0x0000 dla pierwszego, 0x0001 dla drugiego, 0x0002 dla trzeciego, 0x0003 dla czwartego
2C. Rozwiązanie alternatywne
2D. zaprojektować i opisać system z procersorem z80, pamięcią eprom 4x8kB oraz pamięcią ram 128kb. należy zapewnić przełącznie fragmentów ram w oknie przestrzeni adresowej o rozmiarze 32kb. Podział na 5 stron: 4 dla RAMu 128 KB oraz 1 strona dla wszystkich EPROM. Aby zaadresować EPROM należy w pierwszym cyklu napisać pod adres większy bądź równy 0x8000 ( A15 musi być = 1 ) wartość w której pierwszy najmniej znaczący bit musi być równy 0, a następnie wykonać cykl dostępu do tej pamięci. Aby zaadresować którąś ze stron RAMu należy w pierwszym cyklu napisać pod adres większy bądź równy 0x8000 ( A15 musi być = 1 ) wartość w której pierwszy najmniej znaczący bit musi być równy 1, a dwa następne określają w kodzie NKB numer strony. Drugi i trzeci najmniej znaczący bit idą jako bity uzupełniające na wejście adresowe pamięci RAM.
2D. Rozwiązanie alternatywne
3A. Zaprojektować i opisać system z kontrolerem MSP430, 9 wejściam (styki zwierne) i 3 wyjściami sterującymi diody LED. Zwarcie styku na wyróżnionym wejściu strującym powoduje zgłoszenie przerwania. Napisać program, który co 5 sekund lub po uaktywnieniu wejście sterującego aktualizuje na wyjściach informacje o liczbie zwartych styków na pozostałych 8 wejściach, przy czym zwarcie wszystkich styków należy sygnalizować w szczególny sposób int counter = 200; // tykamy 40/s czyli musimy zliczyc do 200, aby miec 5 sek int special_mode = 0; int specjal_tick = 0; int switch_enable = 0; void main(void) WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0x00; // 8 styków zwieranych jako dane wejściowe P2DIR = 0x07; // wejście 4 jako zgłaszający przerwanie styk, 3 diody na wyjściu P2IE = 0x08 // tylko 4 styk może zgłaszać przerwanie P2IES = 0x08 // zglasza przerwanie przy narastajacym zboczu zegara CCTL0 = CCIE; // Timer może zgłaszać przerwania CCR0 = 819; // zegar 32768Hz, zlicza do 819, czyli tyka 40/s TACTL = TASSEL_1 + MC_1; // ACLK, upmode _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt #pragma vector=timera0_vector interrupt void Timer_A (void) // odszumianie przycisku if(switch_enable >= 10) UpdateOutput(); switch_enable = 0; else if(switch_enable > 0) if(!(p2in & 0x08)) switch_enable = 0; else switch_enable++; counter--; if(counter > 0 ) return; counter = 200; UpdateOutput(); #pragma vector=port2_vector _interrupt void Port_2(void) switch_enable = 1; void UpdateOutput() char count = 0; char c = P1IN; for(int i=0;i<7;i++) if(c & 0x1) count++; c >>= 1; if(count == 8) special_mode = 1; else special_mode = 0; if( special_mode == 1) if(tick == 0) P2OUT = 0x0; tick = 1; else(tick == 1) P2OUT = 0x07; tick = 0; else P2OUT = count;
3B. zaprojektować i opisać system z kontrolerem msp430 obsługujący 8 wejść (styki zwierne) i 8 wyjść sterujących diody led. napisać program, który co 2 sekundy wyświetla informację o liczbie zmian stanów styków wkyrytej wciągu ostatnich 5 sekund, z nasyceniem na wartości 255. program powinien w możliwie jak najmniejszym stopniu obciążać procesor. int counter_a = 200; // tykamy 40/s czyli musimy zliczyc do 200, aby miec 5 sek int counter_b = 80; // tykamy 40/s czyli musimy zliczyc do 80, aby miec 2 sek char switch_counter = 0; char switch_status = 0; int switch_enable = 0; void main(void) WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0x00; // 8 styków zwieranych jako dane wejściowe P2DIR = 0xFF; // 8 wyjsc sterujacych diody P1IE = 0xFF // wszystkie 8 stykow moze zglaszac przerwanie P1IES = 0xFF // zglasza przerwanie przy narastajacym zboczu zegara CCTL0 = CCIE; // Timer może zgłaszać przerwania CCR0 = 819; // zegar 32768Hz, zlicza do 819, czyli tyka 40/s TACTL = TASSEL_1 + MC_1; // ACLK, upmode _BIS_SR(LPM0_bits + GIE); #pragma vector=port1_vector _interrupt void Port_1(void) switch_enable = 1; switch_status = P1IN; // Enter LPM0 w/ interrupt #pragma vector=timera0_vector interrupt void Timer_A (void) if(switch_enable > 10) switch_enable = 0; switch_counter++; if( switch_counter >=255) witch_counter = 0; else if( switch_enable > 0) if(!( switch_status & P1IN)) switch_enable = 0; else switch_enable++; counter_a--; counter_b--; if(counter_b <= 0) counter_b = 80; P2OUT = switch_counter; if(counter_a <= 0 ) switch_counter = 0; counter_a = 200;
Zad3-2010L) Zaprojektować i opisać system z kontrolerem MSP430 obsługujący 64 styki zwierne i port UART. Napisać energooszczędny program sterujący, który monitoruje stan styków i po wykryciu zwarcia trwającego dłużej niż 30 sekund wysyła przez łącze szeregowe bajt zawierający numer styku. (...) Mamy 64styki do obsłużenia, wepniemy je poprzez AND'y do portu P1 generującego przerwania chcemy go wykorzystać, żeby układ był najbardziej energooszczędny kosztem skomplikowania metody dostępu do portu, więc: 64 / 8bit = 8 niezależnych zestawów styków dla portu P2 Sposób podłączenia AND-ów między stykami a P1: ANDujemy wszystkie styki nr 0 z 8miu zestawów styków i wpinamy wyjście AND'a do pinu 0 portu P1 ANDujemy wszystkie styki nr 1 z 8miu zestawów styków i wpinamy wyjście AND'a do pinu 1 portu P1, itd... UWAGA: Należy koniecznie narysować schemat połączeń. Za opis bez schematu: 2/6pkt. Do portu P2 podpinamy wyjścia zestawu 8 x MUX[8->1](151). Sygnały sterujące: A,B,C - wybór wejścia MUXa, (G == L) - 151 zachowuje się jak MUX, (G == H) -> 151 wypluwa L na wyjście niezależnie od wejść Pozostałe połączenia: PORT3 - piny UART PORT4 - dane UART PORT5 - słowo wybierające zestaw styków dla P2: xxxxg1,a1,b1,c1 PORT6 - nieużywany Kolejne zwarcia danego styku oraz wszystkie zwarcia styków odczytanych jako zwarte bezpośrednio po starcie systemu są ignorowane. Zapewnimy to, korzystając z maski bitowej: char port_mask[8]; - char dla każdego z 8miu zestawów styków. Jeśli bit == 1, to zwarcie styku ma jeszcze szansę zostać zdekodowane i wysłane. Procedura obsługi przerwania portu 1: i = 0; wake_app = 0; while (wake_app == 0) if (!P1IN & port_mask[i]) //jesli zwarty styk i jest zezwolenie port_mask[i] &= P1IN; // skasuj zezwolenie candidate_mask2 = P1IN; _BIS_SR(LPM0_EXIT); wake_app = 1; i++;
W aplikacji musimy zbadać (na porcie P2) który z 8miu zestawów styków wygenerował przerwanie zwarcia styku. candidate_maskx jest stanem portu który następnie sprawdzamy co czas t przez 30sekund (łatwiejsza opcja) albo przełączamy zbocze wyzwalające przerwanie i sprawdzamy czy nie wystąpi przerwanie (trudniejsza opcja). Powyższy opis dotyczy oczywiście sytuacji gdy tylko jeden styk może być jednocześnie zwarty, opcja z wieloma stykami byłaby dużo trudniejsza :] Zad2-2010Z) Zaprojektować i opisać system z procesorem Z80, pamięcią EPROM 32KB z programem sterującym i pamięcią RAM 2x128KB. Układy RAM wymagają wstawiania jednego taktu oczekiwania w cyklach zapisu. komentarz Chrząszcza: kluczowe było zauważenie, że nie potrzeba wstawiać żadnego układu opóźniającego zapisy do RAM. Wystarczyło zamapować RAM w przestrzeń IO, wówczas Z80 sam zapewni odpowiednie opóźnienie. Zad2-2010Z - drugi termin) Zaprojektować i opisać system z procesorem Z80, pamięcią EPROM 32KB z programem sterującym i pamięcią RAM 2x128KB. Oprócz standardowego dostępu należy zapewnić możliwość zastąpienia pamięci EPROM jej kopią przepisaną do RAM. Komentarze Chrząszcza: najważniejsza jest szybkość działania - zamiast stronicować RAM na duże strony w przestrzeni IO i tracić takt oczekiwania WAIT, powinniśmy stronicować RAM przy użyciu mniejszych stron na górnej połowie przestrzeni MEM (dolną połowę zajmuje EPROM wymienialny z RAMem). W przestrzeń IO pakujemy mechanizmy stronicowania. stronicowanie RAMu w przestrzeni MEM ma też drugą zaletę - w zadaniu wspomniana była potrzeba kopiowania zawartości EPROM do RAM. W Z80 istnieje instrukcja LDIR, kopiująca dane bezpośrednio pamięć->pamięć, z szybkością porównywalną z rozwiązaniami wspomaganymi sprzętowo. Umieszczenie EPROM i RAM w przestrzeni MEM umożliwia nam szybkie kopiowanie danych między nimi przy pomocy tej instrukcji. jeśli korzystamy z układów stronicowania, musimy zapewnić że sygnał RESET ustawi je w sposób deterministyczny Zad1-2010Z) Przeanalizować właściwości użytkowe Z80 i MSP430 pod kątem możliwości użycia w urządzeniach przenośnych Dwa rozwiązania na 10 punktów zadania nr1. 1 wersja: Cechy posiadane przez MSP430, a nie posiadane przez Z80: - posiada wbudowane przetworniki A/C - jeśli tylko rozdzielczość uznajemy za wystarczającą, nie ma potrzeby dołączanie zewnętrznych układów, - mniejsze gabaryty fizyczne,
- posiada wbudowaną pamięć trwałą - brak potrzeby rozszerzania układu o dodatkowe kości pamięci - przy oczywistym założeniu, że wbudowane zasoby wystarczą do realizacji pomiaru, - wbudowany układ kontroli zasilania - łatwa realizacja mechanizmu odrzucania pomiarów/wstrzymywanie pracy w warunkach mogących wprowadzić zakłócenia, - wbudowana obsługa interfejsów komunikacyjnych - łatwiejsza i tańsza akwizycja wyników pomiarów, - możliwość kolekcji próbek z przetwornika A/C i ich zapis do pamięci (DMA) w czasie przebywania mikroprocesora w stanie obniżonego poboru mocy - mikroprocesor wykonuje tylko obliczenia natury analitycznej -> mniejszy pobór mocy. Wyróżnione cechy wskazują na MSP430 jako układ lepiej pasujący do użycia w urządzeniach pomiarowych. Z80 nie posiada znaczących cech dających mu przewagę nad MSP430 na polu tych zastosowań. 2 wersja: Z80: Z80 może być zbyt wolny do niektórych pomiarów. Możliwość łączenia urządzeń w łańcuch pomiarów pozwoli na użycie dużej ich liczby. MSP430: - Wbudowane timery MSP430 mogą być bardzo przydatne przy pomiarach okresowych - do wysyłania danych przydatny będzie układ UART - tryby oszczędzania energii pozwala zmniejszyć koszty przy rzadkich pomiarach - w zastosowaniach analogowych, na przykład temperatury, zastosowanie znajdzie konwersja ADC - timer watchdog pozwoli pracować procesorowi w warunkach trudno dostępnych dla konstruktora