Systemy cyfrowe z podstawami elektroniki i miernictwa
Wyższa Szkoła Zarządzania i Bankowości w Krakowie Informatyka II rok studia dzienne
Ćwiczenie nr 11: Podstawy programowania mikrokontrolerow cz. 2
1 Cel ćwiczenia
Celem ćwiczenia jest poznanie podstaw budowy prostych aplikacji opartych o mikrokontrolery jednoukładowe , oraz elementów programowania mikrokontrolerów w językach wysokiego poziomu..
1.1 Wymagane wiadomości
• Budowa mikrokontrolera BasicStamp2
• Zestaw edukacyjny StampInClass – budowa i obsługa
• Język PBASIC.
Wykorzystywany sprzęt
Komputer PC z oprogramowaniem do obsługi zestawu BasicStamp.
Zestaw edukacyjny StampInClass firmy Parallax inc.
Literatura
www.parallaxinc.com
www.stampsinclass.com
2
2.1 Przycisk monostabilny
Przycisk monostabilny jest najprostszym możliwym do zrealizowania urządzeniem wejściowym. Do jego budowy niezbędne są zaledwie 2 elementy: rezystor 10kohm i sam przycisk typu pushbutton.
Przycisk działa tak, że wciśnięcie go spowoduje połączenie określonych wyprowadzeń.
Dodatkowy rezystor pełni funkcje elementu ustalającego stan linii wejściowej w chwili gdy przycisk jest niewciśnięty. Schemat układu przełącznika wykorzystywany w tej części przedstawiono poniżej.
Do obsługi tego typu urządzenia służy w języku PBASIC funkcja BUTTON.
Zadaniem w tej części będzie przygotowanie programu zapalającego i gaszącego wykorzystywaną już wcześniej diodę LED w zależności od stanu przycisku.
Dla ułatwienia montażu oznaczmy pola na płytce montażowej jak na rysunku:
Aby przygotować układ testowy należy wykonać następujące połączenia:
• Umieścić przełącznik tak aby wyprowadzenia znalazły się w otworach J3,J8,L3,L8.
• Rezystor 10k (brązowy, czarny, pomarańczowy) umieścić jednym końcem w złączu X3
oznaczonym Vdd, a drugim w otworze J1.
• Kawałek przewodu umieścić w otworze J0 i otworze P7 złącza X2.
• Innym kawałek przewodu połączyć Vss ze złącza X3 do dowolnego otworu w wierszu L (np. L9) .
• Połączyć diodę świecącą zgodnie ze schematem
Rezystor 200 Ω (czerwony, czarny, brązowy) umieścić jednym końcem w otworze P0 złącza X2 , a drugim w jednym z otworów R0 –R3. Diodę umieścić dłuższym wyprowadzeniem w otworze R4 a krótszym w otworze R5. Kawałkiem przewodu połączyć Vss do jednego z otworów R6-R9.
J4 J5
L4 L5
Do obsługi przycisku wykorzystywane jest polecenie BUTTON. Przykładowy program poniżej ilustruje użycie tej funkcji do sterowania zapaleniem się diody LED.
'{$STAMP BS2} ‘dyrektywa wskazujaca na modul BS2
' =========================================================================
' File: BUTTON.BS2 '
' ilustracja uzycia funkcji BUTTON
' =========================================================================
LEDpin CON 0 ' dioda podłączona do pinu P0 ButtonPin CON 7 ' włącznik do Pin 1
DlyTm CON 100 ' czas zwłoki w milisekundach BtnWrk VAR BYTE 'zmienna dla funkcji BUTTON.
' ---
Loop:
BUTTON ButtonPin,0,255,250,BtnWrk,0,NoPress ' jesli przycisk nie wcisniety 'to idz do NoPress
HIGH LEDpin ' wlacz diode GOTO Loop
NoPress:
LOW LEDpin ' wylacz diode PAUSE DlyTm
GOTO Loop END
Wynikiem wykonania tego programu jest błyśniecie diody po naciśnięciu przycisku.
Zmodyfikować program tak, aby wciśniecie przycisku gasiło diodę.
W przedstawionym przykładzie aktywnym stanem przycisku jest stan niski ( wciśnięcie przycisku powoduje podanie na odpowiednią linie portu stanu niskiego).
Możliwa jest realizacja przycisku tak, aby stanem aktywnym był stan wysoki.
Zaproponować realizacje takiego przycisku. Zmienić program, aby prawidłowo obsługiwał tak przygotowany układ ( przestudiować parametry wywołania funkcji BUTTON).
4
2.2 Obsługa wejścia analogowego
Celem tego eksperymentu będzie zapoznanie się z metodą obsługi wejścia analogowego bez wykorzystania przetwornika AC. Metoda opiera się na pomiarze czasu ładowania i
rozładowania kondensatora o znanej pojemności C poprzez nieznaną rezystancję Rx W podobny sposób można dokonywać cyfrowego pomiary temperatury z wykorzystaniem czujnika termorezystywnego.
Sygnał wejściowy stanowić będzie wartość rezystancji potencjometru podłączonego do linii P15 mikrokontrolera. Wynikiem działania programu będzie zapalenia proporcjonalnie do położenia suwaka potencjometru diod w linijce diodowej wykorzystywanej w jednym z wcześniejszych eksperymentów.
Obwód do tego ćwiczenia:
Sposób wykonania połączeń:
1. Potencjometr umieścić tak aby wyprowadzenia znalazły się w wierszach A,B i C w kolumnie 8 lub 9.
2. Kondensator 0.1 uF umieścić jednym wyprowadzeniem w gnieździe VDD złącza X3 a drugim w otworze B6
3. Rezystor 200Ω (lub 220Ω umieścić jednym końcem w otworze B5 a drugim w otworze P15 złącza X2.
4. Kawałkiem przewodu połączyć wyprowadzenie VSS złącza X3 z otworem C5.
5. Zmontować linijkę diodową (tak jak w poprzednim ćwiczeniu) podłączając ją za pomocą rezystorów 200Ω do wyprowadzeń P0-P7
Po zmontowaniu obwodu uruchomić przykładowy program:
' =========================================================================
' Plik: LEDGRAGH.BS2
' sterowanie linijka diodowa za pomoca potencjometru ' {$STAMP BS2}
' =========================================================================
LEDs VAR OutL ' diody wyjściowe
PotPin CON 15 ' gniazdko dla potencjometru
DotGraf CON 0 ' tryb wyswietlania->pojedyncza dioda BarGraf CON 1 ' tryb wyswietlania->wiele diod
GrMode CON BarGraf ' definiuje aktualny tryb
rawVal VAR Word ' wartość dla pojedyńczej diody grafVal VAR Byte ' wartość dla wielu diod
bits VAR Byte ' bit dla najwyżej świecącej diody
newBar VAR Byte ' przestrzeń robocza dla nowego wyświetlacza ' --- Initialize:
DirL = %11111111 ' wszystkie gniazda diod ustaw jako wyjścia
' --- Main:
HIGH PotPin ' rozładowanie kondensatora
PAUSE 1 ' przerwa, dla próbkowania co jedną milisekundę RCTIME PotPin,1,rawVal 'odczytaj aktualną wartość potencjometru
grafVal = rawVal */ $005F 'przeskalowanie zawartości 'potencjometru na przedział 0-8
GOSUB ShowGraph 'wskocz do podprocedury odpowiadającej za wyświetlanie PAUSE 50
GOTO Main ' i tak w pętelce END
' --- ShowGraph:
LEDs = DCD (grafVal / 32) ' zaświeć pojedynczą diodę
' funkcja DCD zamienia argument na kod „1 z N”
RETURN
Po inicjalizacji program czyta aktualną zawartość potencjometru, przy użyciu instrukcji RCTIME, i zwraca ją do rawVal. Można użyć trybu DEBUG do odczytania aktualnej zawartości zmiennej rawVal. Wartość zwracana przez RCTIME jest z przedziału 0 (potencjometr ustawiony ma wartość minimalną) do 685 (potencjometr ustawiony na wartość maksymalną). Ponieważ grafVal może przyjmować wartości 0-255 a rawVal zwraca 0- 685 należy to przeskalować, stąd po podzieleniu wychodzi 0.372 . Do dzielenia liczb zmiennoprzecinkowych, z zaokrągleniem do jedności używa się operatora */
Używany jest operator DCD do zamiany 4 bitowej liczby całkowitej kod 1 z n.
W trybie zapalania pojedynczej diody te działania są wystarczające do jej zaświecenia.
Przekonstruować funkcje wyświetlającą tak, aby wynik był reprezentowany w postaci świecącej linijki diod.
Do konstrukcji danej do wyświetlenia można wykorzystać operatory przesuwania o 1 bit w prawo „>>” i o 1 bit w lewo „<<” oraz przypisanie : zmienna.nr_bitu = wartosc_bitu które na pozycji określonej przez nr_bitu w zmiennej zmienna ustawia zadaną warość_bitu.