cwiczenie 6.pdf

(259 KB) Pobierz
54838531 UNPDF
Hit roku 2000
BASCOM College
Ćwiczenie 6
Zegar z magistralą I 2 C
Rys. 1
Dzisiaj rozpoczniemy ćwiczenia w nieco nie−
typowy sposób: musimy trochę przerobić na−
sze podstawowe narzędzie pracy, jakim jest
płytka testowa AVT−2500. Nie, nie obawiajcie
się, nie ma na niej żadnych fatalnych błędów
(no może poza jednym malutkim, który zaraz
przy okazji naprawimy). Płytkę musimy nieco
zmodyfikować z innego powodu: podczas jej
projektowania nie wszystko zostało do końca
przemyślane i zoptymalizowane. To dość nor−
malne: dopiero czas pokazuje, jakie rozwiąza−
nia sprawdziły się w praktyce, a jakie musimy
zmienić. Zmiany na płytce będą drobne i pro−
ste do przeprowadzenia i polegać będą na
przecięciu trzech ścieżek i dolutowaniu od
spodu płytki dwóch dodatkowych zworek.
Popatrzcie na rysunek 1 , na którym zosta−
ła pokazana od strony lutowania mozaika
ścieżek naszej płytki testowej. Kolorem niebie−
skim zaznaczone są zworki już istniejące na
płytce, a kolorem zielonym dwa dodatkowe
połączenia, które za chwilę wykonamy. Nato−
miast czerwone strzałki wskazują miejsca,
w których musimy przeciąć ścieżki. Przecięcia
w punktach oznaczonych jako 1 i 2 umożliwią
wykonanie nowych połączeń, a przecięcie
ścieżki w punkcie 3 pozwoli przy okazji napra−
wić drobny błąd, który powstał wprocesie pro−
dukcyjnym pierwszej serii płytek AVT−2500.
Zwarty na stałe został na niej jumper JP4, unie−
możliwiając w ten sposób odłączenie wypro−
wadzenia SCL układu IC5 od magistrali I 2 C.
Po przecięciu ścieżek musimy jeszcze
wykonać dodatkowe połączenia, zaznaczone
na rysunku kolorem zielonym. Połączenia
wykonujemy odcinkami kynaru lub zwykłe−
go przewodu w izolacji, lutując je do punk−
tów zaznaczonych na rysunku zielonymi
kropkami. Po sprawdzeniu poprawności wy−
konania przeróbek, wkładamy płytkę z po−
wrotem do obudowy.
O co właściwie chodziło i co osiągnęliśmy
w wyniku dokonania tych prostych przeróbek?
Popatrzcie na rysunek 2 , na którym został po−
kazany schemat przerobionego fragmentu
płytki. Przed przeróbką dwa układy współpra−
cujące z magistralą I 2 C zegar czasu rzeczywi−
stego IC5 i pamięć szeregowa EEPROM IC2
mogły być dołączane za pomocą jumperów do
różnych wyprowadzeń procesora. Takie roz−
wiązanie, aczkolwiek możliwe do zrealizowa−
nia na drodze programowej, nie miało naj−
mniejszego sensu, a nawet zaprzeczało idei
magistrali I 2 C. Po przeróbce do transmisji da−
nych I 2 C potrzebne będą tylko dwa wyprowa−
dzenia procesora: P3.5 i P3.7. Bardzo Was
przepraszam, że musieliście wykonać dodat−
kową pracę, ale nie wszystko przemyślałem do
końca podczas projektowania płytki.
Istnieje jeszcze jedna możliwość modyfi−
kacji naszej płytki, o której można powiedzieć
że jest “nadobowiązkowa” i dotyczy sposobu
zasilania “bohatera” naszego dzisiejszego
ćwiczenia: zegara czasu rzeczywistego
PCF8583. Układ ten zasilany jest na płytce
zupełnie prawidłowo: z szyny zasilającej
+5VDC i będzie funkcjonował zupełnie po−
prawnie. Jednak po wyłączeniu zasilania
układ ten “straci pamięć” i po powtórnym uru−
chomieniu rozpocznie zliczanie czasu od po−
czątku, czyli od ustawień zerowych. Czytelni−
cy, którzy mają zamiar wykonywać długo−
trwałe eksperymenty z RTC lub nawet chwilo−
wo wykorzystywać płytkę testową w roli do−
mowego zegara, mogą dokonać jeszcze jednej
zmiany. Układ PCF8574 do poprawnej pracy
wymaga podania napięcia zasilania nie mniej−
szego niż +5VDC. Jednak nawet po obniżeniu
tego napięcia do 1Vukład nie przestaje zliczać
upływającego czasu, traci jedynie możliwość
kontaktu z procesorem, pobierając za to prąd
rzędu kilku mikroamperów. Wynika z tego, że
warto dodać na naszej płytce dodatkowe
źródło zasilania awaryjnego dla układu
PCF8683, którym może być dowolnie mała
bateryjka 1,5V. Na rysunku 2b został pokaza−
ny schemat zmian, jakie musimy wykonać na
Rys. 2
Elektronika dla Wszystkich
23
54838531.024.png 54838531.025.png 54838531.026.png 54838531.027.png 54838531.001.png 54838531.002.png 54838531.003.png 54838531.004.png 54838531.005.png 54838531.006.png 54838531.007.png 54838531.008.png 54838531.009.png 54838531.010.png
 
BASCOM
naszej płytce testowej, aby zapewnić nieprze−
rwane odliczanie czasu przez zegar RTC. Do−
datkowe połączenia i elementy zostały zazna−
czone kolorem czerwonym. Zmiany sprowa−
dzają się do dodania do układu dwóch dowol−
nych diod, np. 1N4148 i bateryjki. Jako bate−
rię proponowałbym zastosować miniaturowe
ogniwko typu AAA, umieszczone pod wy−
świetlaczem LCD.
Jeszcze jedna, ostatnia prośba. Obojętne,
czy dokonaliśmy zmiany w systemie zasilania
zegara czasu rzeczywistego, czy nie, już teraz −
zanim zaczniemy czytać dalszą część tego arty−
kułu − włączmy zasilanie naszej płytki testowej.
Ogromnym ułatwieniem w wykonywaniu
dzisiejszych ćwiczeń będzie fakt, że wszyst−
kie je możemy wykonać wyłącznie w emula−
cji sprzętowej, bez konieczności programo−
wania procesora. Jest to jedna z zalet trans−
misji I 2 C: szybkość transmisji nie jest w ża−
den sposób ograniczona “od dołu” i narzuca−
na jest przez urządzenie nadrzędne, do które−
go “niewolnicy” muszą się bezwzględnie do−
stosować. Wnaszym przypadku urządzeniem
nadrzędnym będzie komputer, który za po−
średnictwem programu BASCOM i układu
emulatora sprzętowego “udaje”, że jest za−
programowanym procesorem.
Na naszej płytce testowej umieszczone są
dwa układy mogące współpracować z magi−
stralą I 2 C: zegar czasu rzeczywistego
PCF8583 i pamięć szeregowa PCF8582
(AT24C04). Wielu z Was ma także do dyspo−
zycji układ klawiatury szesnastkowej, także
sterowany “I kwadratem”.
Cóż jednak z tego, że mamy te układy
umieszczone na płytce, jeżeli nie wiemy
o nich najważniejszego: jakie są ich adresy?
Z wykładu wiemy, że aby “dobrać się” do ja−
kiegokolwiek układu współpracującego
zI 2 C, musimy znać jego adres. A zatem mu−
simy chyba zajrzeć do kart katalogowych ....
nie, mamy też inne wyjście. Pamiętajmy
o naszej zasadzie: praktyka, praktyka i je−
szcze raz praktyka i spróbujmy doświadczal−
nie ustalić adresy obydwóch wymienionych
układów. Napiszmy sobie krótki program
i po skompilowaniu uruchommy w emulacji
sprzętowej.
Print "Pod adresem: " ; Adres ; " nie znaleziono układu!"
Cls
Lcd "Brak ukladu: " ; Adres
śmy jej na poprzedniej
lekcji. Zajmijmy się
więc zegarem czasu
rzeczywistego. Układ
PCF8583 jest jednym
z najpopularniejszych
typów zegarów stoso−
wanych w systemach
mikroprocesorowych
i komputerowych. Zaprojektowany został
już dawno temu przez firmę PHILIPS, ale do
tej pory nie ma sobie równych wśród mniej
lub bardziej doskonałych jego odpowiedni−
ków. Wyjaśnijmy sobie najpierw termin: ze−
gar czasu rzeczywistego RTC
(Real Time Clock).
Układ RTC jest przede wszy−
stkim wbudowanym w strukturę
układu scalonego szeregiem licz−
ników. Ich zadaniem jest jedynie
zliczanie upływającego czasu,
począwszy od setnych części se−
kundy do lat.
Zliczanie czasu nie jest jedyną
funkcją pełnioną przez układu
RTC. Muszą one także umożli−
wiać ustawienie stanu początko−
wego wszystkich liczników.
Taka funkcja jest absolutnie
niezbędna, ponieważ nie istnie−
je zegar idealny i wskazania
każdego czasomierza musimy
niejednokrotnie korygować.
Kolejnymi funkcjami rea−
lizowanymi przez układy RTC
są rozbudowane układy budzi−
ków i timerów. Możemy tu
wykorzystywać najróżniejsze
kombinacje: alarmy pracujące
w trybie codziennym, tygo−
dniowym, miesięcznym lub
nawet rocznym.
Układy RTC najróżniejszych typów znaj−
dują się w każdym bez wyjątku komputerze
klasy PC, w sprzęcie RTV wyposażonym
w funkcje programowania (np. w magnetowi−
dach) i w innych urządzeniach. Bywają też po−
wodem poważnych problemów, októrych wie−
le mówiono nie tak dawno temu. Mam tu na
myśli “problem roku 2000”, do której to daty
RTC starszych komputerów nie były przysto−
sowane i traktowały ją jako rok ... 1900!
Znamy już adres bazowy zegaru PCF
8583, ale jak dobrać się do przechowywanej
w nim informacji?
Schemat blokowy kostki PCF8583 został
pokazany na rysunku 4 . Wiemy zatem, pod
jakim adresem wewnętrznym mamy szukać
potrzebnych nam informacji o aktualnym
czasie. Aby np. odczytać aktualną godzinę
i minutę, musimy wykonać następujące
czynności:
1. Zainicjalizować transmisję I 2 C;
2. Podać na magistralę adres układu,
z którym chcemy nawiązać łączność;
End If
Wait 1
Next Adres
Print "Koniec przeszukiwania"
Cls
Lcd "Koniec"
End
Program testujący magistralę I 2 C wysy−
ła komunikaty jednocześnie na wyświe−
tlacz LCD umieszczony na płytce testowej
oraz do emulatora terminala w pakiecie
BASCOM.
Rys. 2b
Rys. 3
W efekcie działania tego prostego progra−
mu uzyskaliśmy informację (patrz rysunek 3 ),
że w naszym systemie znajdują się dwa ukła−
dy mogące współpracować z magistralą
I 2 C i że ich adresy bazowe to 160 i 162. Mo−
glibyśmy teraz zidenty−
fikować każdy z ukła−
dów przez proste wyję−
cie jednego z nich
z podstawki, ale szkoda
na to czasu. Powiem
Wam, że układem o ad−
resie 162 jest PCF8583,
a pamięć szeregowa
posiada adres o 2
mniejszy.
Od czego więc za−
czniemy? O pamięci
szeregowej EEPROM
mamy już pewne poję−
cie, ponieważ używali−
$sim
Config Lcd = 16 * 1a 'konfiguracja wyświetlacza LCD
Dim Adres As Byte 'deklaracja zmiennej ADRES
Print "Start poszukiwania" 'wyświetlenie komunikatu wstępnego
Cls 'wyczyść ekran wyświetlacza
Lcd "Start" 'komunikat wysyłany na LCD
Cls 'wyczyść ekran wyświetlacza
For Adres = 150 To 200 Step 2 'przeszukaj 50 adresów
I2cstart
'inicjalizacja magistrali I2C
I2cwbyte Adres
'wyślij na magistralę zapytanie
po kolejny adres
I2cstop
'koniec transmisji
If Err = 0 Then 'jeżeli wywoływane urządzenie
odpowiedziało, to:
Print "Układ pod adresem: " ; Adres ; " !" 'wydrukuj
komunikat o znalezieniu układu pod danym adresem
Cls 'wyczyść ekran wyświetlacza
Lcd "Uklad pod: " ; Adres 'komunikat o znalezieniu
układu pod danym adresem
Else
24
Elektronika dla Wszystkich
54838531.011.png 54838531.012.png 54838531.013.png 54838531.014.png 54838531.015.png
BASCOM
3. Poinformować układ, z którego rejestru ma−
my zamiar korzystać;
4. Poinformować układ, czy mamy zamiar
odczytywać, czy zapisywać dane;
5. Odczytać potrzebne informacje;
6. Ukazać odczytane dane na wyświetlaczu lub
emulatorze terminala.
Awięc, do roboty! Napiszmy sobie nastę−
pujący programik, którego zadaniem będzie
cykliczne odczytywanie danych z rejestru se−
kundowego, minutowego i godzinnego ukła−
du PCF8583. Po skompilowaniu program
uruchamiamy w emulacji sprzętowej.
dzie BCD większość zWas zpewnością słysza−
ła i wiecie, że jest to “okrojony” kod szesnast−
kowy, będący binarną reprezentacją cyfr od 0
do 9. Takim kodem sterowane są między inny−
mi dekodery wyświetlaczy siedmiosegmento−
wych. Jednak w przypadku naszego zegara
sprawa przedstawia się nieco inaczej: kod BCD
ma tu postać liczby nie cztero− ale ośmiobito−
wej i zawiera informacje o wartości dwóch cy−
fr dziesiętnych, np. dziesiątek i pojedynczych
minut. Najprościej wyjaśnić to na przykładzie.
Weźmy na przykład liczbę 57, składającą się
z dwóch cyfr: 5 i 7. A zatem binarną reprezen−
tacją dziesiątek w tej
liczbie będzie 0101,
a jednostek 0111. A za−
tem w kodzie BCD, sto−
sowanym w naszym ze−
garze, ta liczba będzie
miała postać: 0101
“sklejone” z 0111, czyli
01010111 (BCD) . Praw−
da, że proste?
Rzeczywiście, zasa−
da przedstawiania liczb
dwucyfrowych w ko−
dzie BCD jest dość
prosta, ale przeliczenie
tak przedstawio−
nych danych na
kod dziesiętny
z pewnością ta−
kim nie będzie.
Prawdę mówiąc,
nie bardzo wie−
działbym, jak
się do tego za−
brać “z marszu”,
ale na szczęście
z pomocą przy−
chodzi nam ko−
lejny “fajer−
werk” języka MCS BASIC. Aby otrzymać
prawidłowe wyświetlanie aktualnego czasu,
wystarczy dodać do naszego programu, bez−
pośrednio przed wysłaniem danych do termi−
nala, tylko jedną linijkę:
MAKEBCD [wartość] przetwarza podaną wartość,
która musi być liczbą ośmiobitową, na jej reprezentację
w kodzie BCD
MAKEDEC [wartość] przetwarza wartość podaną
w kodzie BCD na jej postać w kodzie dziesiętnym
Pamiętajmy jednak, że nie należy nigdy
wierzyć komuś wyłącznie na słowo, jeżeli ma−
my empiryczną możliwość weryfikacji gło−
szonych przez niego prawd. Azatem, piszemy
sobie króciutki programik i po skompilowaniu
uruchamiamy go w symulacji programowej:
Dim X As Word
X = 99
X = Makebcd(x)
Print "134 w kodzie BCD= " ; X
Print X ; " w kodzie BCD po konwersji na postać
dziesiętną= ";
X = Makedec(x)
Print X
$sim 'praca w emulacji sprzętowej
Config Sda = P3.5 'konfiguracja linii SDA magistrali I2C
Config Scl = P3.7 'konfiguracja linii SCL magistrali I2C
Dim M As Byte 'deklaracja zmiennej określającej minuty
Dim S As Byte 'deklaracja zmiennej określającej sekundy
Dim H As Byte 'deklaracja zmiennej określającej godziny
Do
I2cstart 'inicjalizacja magistrali I2C
I2cwbyte 162 'podanie adresu PCF8583 dla zapisu
I2cwbyte 2 'wybranie drugiego rejestru (sekund)
I2cstart 'powtórna inicjalizacja magistrali I2C
I2cwbyte 163 'podanie adresu PCF8583 dla odczytu danych
I2crbyte S , Ack 'odczyt sekund z potwierdzeniem transmisji
I2crbyte M , Ack 'odczyt minut z potwierdzeniem transmisji
I2crbyte H , Nack 'odczyt godzin bez potwierdzania transmisji
I2cstop 'koniec transmisji I2C
'wyślij na ekran terminala:
Print "Godzina: " ; H ; " Minuta: " ; M ; " Sekunda: " ; S
Loop
Wynik działania tego programu, pokazany
na rysunku 6, świadczy dobitnie, że polece−
nia konwersji kodów działają poprawnie.
Wracajmy jednak do naszego zegara, którego
budowę dopiero rozpoczęliśmy.
Jak na razie uzyskaliśmy możliwość po−
prawnego odczytywania rejestrów układu
PCF8583 i to tylko tych, w których zapisana
jest informacja o aktualnej godzinie, minucie
i sekundzie. Z pewnością zwróciliście uwagę
na fakt, że wyświetlanie sekund odbywa się
dziwnie nieregularnie. Zmiana wartości na−
stępuje, nie jak można by było się spodzie−
wać, co sekundę, ale w zależności od szybko−
ści procesora komputera, co kilka sekund.
Jest to zjawisko całkowicie normalne i wyni−
kające ze spowolnienia działania programu
w emulacji sprzętowej. Gdybyśmy tak napi−
sanym programem zaprogramowali procesor,
to zjawisko to ustąpiłoby całkowicie. Nie są−
dzę jednak, aby było warto programować pro−
cesor na tym etapie pracy. Nasz program jest
jeszcze “w powijakach” i jak na razie może
służyć wyłącznie celom szkoleniowym.
Zobaczmy teraz, “co słychać” w wy−
ższych rejestrach układu RTC, tam, gdzie po−
winny być zapisane informacje o aktualnej
dacie. Do naszego programu dopisujemy na−
stępujące linijki:
Rys. 4
Rezultaty działania naszego programu po−
kazane są na rysunku 5 . Niestety, kompletna
klapa! Ta godzina 20 to jeszcze by mogła być,
ale 87 minut? I na domiar złego jeszcze te 68
sekund! O co tu chodzi, błąd w programie czy
też może ci projektanci od Philipsa coś sknoci−
li w układzie? Ponieważ nic mądrego na razie
nie możemy wymyślić, to pozostaje nam je−
szcze jedna droga ratunku: zajrzeć do karty ka−
talogowej układu PCF8583. No i co się okazu−
je? Jeszcze raz sprawdza się stara maksyma, że
jeżeli wszystkie metody uruchomienia jakiegoś
układu zawiodły, to należy ... zajrzeć do in−
strukcji, w której jak byk jest napisane: “...
events are stored in BCD format...”. A więc
wszystko jasne, przed wyświetleniem otrzyma−
nych z RTC danych należy je przekształcić
z formatu BCD na normalną, zrozumiałą dla
człowieka postać dziesiętną. Tylko jak to zrobić
i co to właściwie jest ten format BCD? O ko−
H = Makedec(h) : M = Makedec(m) : S = Makedec(s)
Efektem działania polecenia MAKEDEC
jest dokonanie przez program automatycznej
konwersji liczb z kodu BCD na czytelną dla
człowieka postać dziesiętną. Jak BASCOM to
robi? Nie wiem i nie potrzebuję wiedzieć!
Wiem tylko, że można to zrobić jeszcze
prościej jedynie modyfikując jedną linię
programu:
Dim Day As Byte 'deklaracja zmiennej
określającej dzień miesiąca
Dim Month As Byte 'deklaracja zmiennej
określającej miesiąc roku
na początku programu,
I2crbyte Day , Ack 'odczyt dni
I2crbyte Month , Nack'odczyt miesięcy
po odczycie czasu
Print "Godzina: " ; Bcd(h) ; " Minuta: " ; Bcd(m) ; " Sekunda:
" ; Bcd(s)
Day = Makedec(day) : Month = Makedec(month)
Print "Dzień: " ; Day ; " Miesiąc: " ; Month
Zatrzymajmy się na chwilę przy polece−
niach służących konwersji liczb na różne for−
maty, ponieważ w przyszłości będą nam one
z pewnością bardzo potrzebne.
i nie zapominając o zmianie NACK na ACK
w linii odczytu godzin:
Elektronika dla Wszystkich
25
54838531.016.png 54838531.017.png
BASCOM
I2crbyte H , Ack 'odczyt godzin
z Was (malkontenci zawsze się znaj−
dą), to zapraszam do dalszej części
ćwiczenia.
Wiemy, jak odczytywać czas z ze−
gara RTC i najwyższa pora, aby dowie−
dzieć się, jak można nasz zegarek zsyn−
chronizować z realnym czasem otacza−
jącego nas świata. Okazuje się, że jest
to równie proste, jak odczytywanie da−
nych z PCF8583. Napiszmy sobie na−
stępujący program, który następnie do−
damy do napisanego już wcześniej, za−
raz po deklaracji zmiennych:
Rys. 7
Po wykonaniu tych drobnych zmian, po−
wtórnie uruchamiamy nasz program w emu−
lacji sprzętowej. Jak widać na rysunku 7 , re−
zultat jest już nieco lepszy: na ekranie mamy
już nie tylko pełną informację o aktualnym
czasie, ale i o dacie. Tylko że te liczby jakieś
dziwne: dlaczego mamy miesiąc 1, dzień 1
i do tego 0 godzin, 40 minut i jakieś tam se−
kundy? Odpowiedź na to pytanie jest zaska−
kująco prosta: ponieważ zasilanie płytki te−
stowej zostało wyłączone i ponownie włą−
czone właśnie 40 minut “z hakiem” temu!
Input "Podaj miesiąc: " , Month
Input "Podaj dzień miesiąca: " , Day
Input "Podaj godzinę: " , H
Input "Podaj minutę: " , M
Month = Makebcd(month) 'konwersja
miesiąca do formatu BCD
Day = Makebcd(day) 'konwersja
dnia do formatu BCD
H = Makebcd(h) 'konwersja godziny
doformatu BCD
M = Makebcd(m) 'konwersja minut
do formatu BCD
S = 0 'wyzerowanie sekund
I2cstart 'inicjalizacja magistrali I 2 C
I2cwbyte 162 'podanie adresu
PCF8583 do zapisu
I2cwbyte 0 'wybranie pierwszego
(kontrolnego) rejestru
I2cwbyte 8 'ustawienie zapisu
rejestru daty
I2cstop 'koniec transmisji
I2cstart 'inicjalizacja magistrali I 2 C
I2cwbyte 162 'ustawianie trybu zapisu
I2cwbyte 2 'wybranie drugiego
rejestru (sekund)
I2cwbyte S 'zapis sekund
I2cwbyte M 'zapis minut
I2cwbyte H 'zapis godzin
I2cwbyte Day 'zapis dnia
I2cwbyte Month 'zapis miesiąca
I2cstop 'koniec transmisji
Rys. 5
Rys. 8
Rys. 6
Po skompilowaniu uruchamiamy nasz
program, jak zwykle w emulacji sprzętowej.
Po starcie program zaczyna wypytywać nas
o czas i datę, które podajemy z klawiatury
komputera. Następnie dane zostają wprowa−
dzone do rejestrów układu RTC i od tego mo−
mentu nasz zegar rozpoczyna prawidłowe
zliczanie upływającego czasu.
Powyższe przykłady nie wyczerpują wszyst−
kich możliwości, jakie oferuje sterowany kontro−
lą I 2 C układ PCF8583. Nawet nie wspomnieli−
śmy o ustawianiu roku, dnia tygodnia, ani o wy−
korzystywaniu timerów i budzika. Nie możemy
jednak poruszyć wszystkich tematów, bo co zo−
stałoby dla Was, do samodzielnej pracy? Sądzę,
że zarówno temat lekcji, jak iprzerabiane ćwicze−
nia zachęciły Was do poznawania sposobu obsłu−
gi urządzeń współpracujących z magistralą I 2 C.
Zbigniew Raabe
e−mail: zbigniew.raabe@edw.com.pl
Mamy zatem zegar, ale o “rewelacyjnych”
parametrach użytkowych. Potrafi on tylko
odliczać czas, jaki upłynął od ostatniego włą−
czenia zasilania płytki testowej. Gdyby jed−
nak takie urządzenie nie zadowalało kogoś
Ciąg dalszy ze strony 22
Warto zauważyć, że polecenie I2CSEND
nie wymaga wstępnego inicjalizowania ma−
gistrali, które wykonywane jest samoczyn−
nie. Niestety, większa uniwersalność tego
polecenia okupiona jest pewnym zwiększe−
niem długości kodu wynikowego.
Poleceniem komplementarnym do
I2CSEND jest I2CRECEIVE . Składnia tego
polecenia i jego możliwości są bardzo podob−
ne do I2CSEND. W najprostszej postaci uży−
wamy tego polecenia do odczytywania jednej
wartości z urządzenia podporządkowanego:
I2CRECEIVE [adres, wartość]
Jednak składnia polecenia I2CRECEIVE
może być znacznie bardziej rozbudowana,
a to samo polecenie może służyć zarówno do
odbierania danych z magistrali I2C, jak i do
ich wysyłania:
I2CRECEIVE [adres, wartość, liczbę baj−
tów do wysłania, liczbę bajtów do odebrania]
Na przykład:
Na tym możemy zakończyć teoretyczne
rozważania na temat magistrali I2C i spo−
sobu jej obsługiwania z poziomu języka
MCS BASIC. Zapraszam Was teraz do
wykonania kilku ćwiczeń, które dadzą
nam rzecz najważniejszą: praktyczną wie−
dzę o sposobach wykorzystywania magi−
strali I2C.
Dim Wartosc(10) As Byte
Wartosc(1) = 1
Wartosc(2) = 3
I2creceive adres urządzenia, Wartosc(), 2, 1
'wysłanie na magistralę
I2C dwóch bajtów i odebranie 'jednego bajtu
Print Wartosc(1)
Zbigniew Raabe
e−mail: zbigniew.raabe@edw.com.pl
Konsultacje: Sławomir Surowiński
e−mail: slawomir.surowinski@ep.com.pl
26
Elektronika dla Wszystkich
'wydruk odebranej wartości
54838531.018.png 54838531.019.png 54838531.020.png 54838531.021.png 54838531.022.png 54838531.023.png
Zgłoś jeśli naruszono regulamin