cwiczenie 8.pdf

(354 KB) Pobierz
54838598 UNPDF
Hit roku 2000
BASCOM College
Ćwiczenie 8
Uwaga!
Następne spotkanie w ramach BASCOM
College będzie już spotkaniem dwuna−
stym, ostatnim w ramach regularnego
kursu. W styczniowym numerze oprócz
ostatniego wykładu przedstawimy pyta−
nia sprawdzające. Osoby, które wykażą
się znajomością BASCOM−a otrzymają
zapowiadane dyplomy. Zakończenie kur−
su nie oznacza jednak, że BASCOM zni−
ka z łamów EdW. Fakultatywne zajęcia
będą trwać nadal, a ich podstawą będą
mniej lub bardziej regularne artykuły re−
dakcyjne oraz projekty nadsyłane przez
Czytelników.
Programowanie szeregowych pamięci EEPROM
W tym miesiącu spotykamy się znowu, tym
razem w laboratorium. Do przerobienia ma−
my cała masę materiału, który możemy
podzielić na dwie części. Pierwsza z nich to
temat "na żądanie", sygnalizowany już na
wykładzie w ubiegłym miesiącu. W ekspre−
sowym tempie zbudujemy sobie aż trzy urzą−
dzenia służące kompleksowej obsłudze sze−
regowych pamięci EEPROM. Abstrahując
od wartości użytkowej urządzeń, które wy−
konamy, temat jest ciekawy sam w sobie. Za−
uważmy bowiem, że znaleźliśmy całkiem
nowe zastosowanie dla naszego BASCOM−a,
zastosowanie którego nie przewidział nawet
jego Twórca. Do naszego pakietu dodamy
bowiem nową funkcję: będzie on pracował
jako samodzielny programator pamięci EE−
PROM i to bez wyposażania go w jakikol−
wiek dodatkowy hardware. Do wszelkich
operacji na pamięciach EEPROM wystarczy
nam bowiem nasza płytka testowa, no może
po maleńkiej i odwracalnej przeróbce.
Wykonamy trzy ćwiczenia, będące jedno−
cześnie konstruowaniem pełnosprawnych
i użytecznych programatorów EEPROM:
1. "Ręczny" programator umożliwiający
zapisanie dowolnej wartości pod dowolny,
wskazany adres pamięci.
2. Programator automatyczny, zapełniają−
cy wskazany obszar pamięci danymi umie−
szczonymi w tabeli.
3. Kopiarkę pamięci EEPROM umożli−
wiającą przeniesienie zwartości jednej pa−
mięci do drugiej.
Po zakończeniu "ujarzmiania" pamięci EE−
PROM przejdziemy do drugiej części ćwi−
czeń, chyba znacznie ciekawszej od pierwszej.
Naszym zadaniem będzie zbudowanie dwóch
urządzeń testowych: cyfrowego termometru
z układem DS1820 i "rdzenia" programu ob−
sługi najprostszego zamka − blokady do urzą−
dzeń elektronicznych z tabletkami DS1990.
Jednak tym razem nie obejdzie się bez pewnej
rozbudowy posiadanego przez nas hardwa−
re’u. Podam Wam dwie konfiguracje sprzęto−
we: minimalną i maksymalną, które umożli−
wią Wam przeprowadzenie ćwiczeń:
1. Konfiguracja maksymalna:
− jedna lub kilka tabletek DALLAS
DS1990
− czytnik TOUCH MEMORY
− jeden lub kilka układów DS1820
2. Konfiguracja minimalna:
− jeden układ DS1820
Wszystkie potrzebne elementy znajdują
się w ofercie handlowej AVT, a także są do−
stępne w większości sklepów z częściami
elektronicznymi. Wybór zestawu części do
przeprowadzenia ćwiczeń zależy tylko od
Waszych planów na przyszłość. Dysponując
zaledwie jednym układem DS1820 będziemy
mogli wykonać wszystkie dzisiejsze ćwicze−
nia z części drugiej, ale praca nie będzie na−
leżeć do najwygodniejszych. Jeżeli zatem
mamy zamiar w przyszłości wykonać np. za−
mek elektroniczny, którego otwarcie "sposo−
bem" będzie absolutnie niemożliwe, to ra−
dziłbym zakupić czytnik TOUCH MEMORY
i co najmniej jedna tabletkę DALLAS
DS1990. Po wykonaniu ćwiczeń elementy te
posłużą Wam bowiem do budowy konkretne−
go układu użytkowego.
Zacznijmy od pierwszej grupy ćwiczeń,
związanej z obsługą pamięci EEPROM.
Przygotowałem dla Was trzy proste progra−
my, które możemy wykorzystać do ćwi−
czeń, a także w dowolny sposób moderni−
zować, dostosowując je do własnych po−
trzeb. Wszystkie programy mogą zostać
wykorzystane bez konieczności programo−
wania procesora, wyłącznie w środowisku
emulatora sprzętowego BASCOM−a 8051
połączonego płytką testową AVT2500.
A zatem, zaczynamy!
"Ręczne" zapisywanie
danych w pamięci
EEPROM, pod wskazanym
adresem
Pierwszy program, którego treść pokazana jest
na listingu 1 jest bardzo podobny do progra−
mu, który napisaliśmy podczas przerabiania
ćwiczenia z obsługi magistrali I 2 C. Umożliwia
on zapisanie dowolnej wartości (oczywiście
z zakresu jednego bajta, czyli 0 ... 255) pod
dowolny adres szeregowej pamięci EEPROM.
Działanie tego programu zostało szczegółowo
opisane w komentarzach. Warto jedynie zwró−
cić uwagę, że każdy zapis poddawany jest na−
tychmiastowej weryfikacji. Daje to nam abso−
lutną pewność, że pamięć została zapisana
zgodnie z naszymi intencjami.
Dane, które mamy zapisać w pamięci EE−
PROM w celu ich późniejszego wykorzysta−
nia przez program obsługujący procesor nie
pochodzą zwykle z "naszej głowy", ale są wy−
nikiem mniej lub bardziej skomplikowanych
obliczeń matematycznych, wykonywanych
Elektronika dla Wszystkich
21
54838598.011.png 54838598.012.png
 
BASCOM
najczęściej za pomocą arkuszy kalkulacyj−
nych. Mozolne ręczne "wklepywanie" 255
liczb do pamięci byłoby nie tylko czynnością
żmudną, ale z całą pewnością prowadzącą do
powstania nieuchronnych pomyłek. Najwyż−
szy zatem czas, aby praktycznie wykorzystać
wiadomości zdobyte na dzisiejszym wykła−
dzie i dane przeznaczone do zapisania w pa−
mięci EEPROM umieścić wstępnie w tabeli,
z której następnie będą odczytywane za pomo−
cą instrukcji READ i umieszczane w pamięci.
weryfikacji. Tylko że w procesie automatyczne−
go zapisu nic z tego nie wynika. Po prostu pro−
gram nie wyświetli na ekranie terminala napisu
potwierdzającego poprawny zapis i będzie pra−
cował dalej, jakby nic się nie stało. Jeżeli zatem
program ten ma Wam służyć do czegoś więcej,
niż do demonstracji możliwości pakietu BA−
SCOM8051, to warto go uzupełnić o bardziej
rozbudowaną procedurę zabezpieczającą przed
zapisaniem do pamięci fałszywych danych.
Kolejnym problemem, na jaki możemy na−
potkać podczas wykorzystywania w naszej pra−
cy pamięci szeregowych EEPROM, jest ko−
nieczność zbadania zawartości pamięci zapro−
gramowanej w wyniku działania jakiegoś pro−
gramu lub dostarczonej przez producenta i sko−
piowanie jej zawartości. Program realizujący
czynność kopiowania danych z jednej pamięci
do drugiej jest banalnie prosty, ale w pierwszej
chwili możemy natknąć się na problemy sprzę−
towe. Na naszej płytce testowej jest miejsce na
jedną pamięć szeregową EEPROM, a co z dru−
gą pamięcią do której lub z której będziemy ko−
piować dane? Na szczęście nie ma sytuacji bez
wyjścia: popatrzmy na schemat naszej płytki
AVT2500. Mamy tam miejsce na jeszcze jeden
układ scalony w obudowie 8−pinowej, na zegar
czasu rzeczywistego typu PCF8583. Jeżeli wni−
kliwie przyjrzymy się schematowi, to zauważy−
my z pewnością, że rozmieszczenie pinów
SDA i SCL jest w tym układzie identyczne jak
w typowej pamięci szeregowej EEPROM.
Różnica polega na tym, że w układzie zegara
mamy dostępne tylko jedno wejście adresowe:
A0 na pinie 3, a piny 1 i 2 wykorzystane są do
dołączenia do układu rezonatora kwarcowego.
Na płytce pin A0 jest na stałe dołączony do plu−
sa zasilania. Co z tego wynika? A no to, że bez
najmniejszych przeszkód możemy umieścić
drugiego EEPROM−a w podstawce przezna−
czonej na zegar czasu rzeczywistego, a piny 1
i 2 po prostu zewrzeć do masy za pomocą cien−
kiego drucika włożonego w podstawkę razem
z układem scalonym. Dołączony do podstawki
kwarc i kondensator nie będą w niczym prze−
szkadzać, w żadnym przypadku nie grozi im też
uszkodzenie. Konieczne przeróbki pokazane są
na rysunku 1 , a po ich wykonaniu uzyskamy
możliwość zainstalowania na naszej płytce dru−
giej pamięci EEPROM, o adresach 162 i 163.
Na listingu 3 pokazana jest treść progra−
mu, którego zadaniem jest przekopiowanie
zawartości pamięci umieszczonej w podstaw−
ce IC2 do pamięci, która zagarnęła podstaw−
kę przeznaczoną zwykle na zegar RTC. Pro−
gram jest tak prosty, że możemy pozostawić
go bez komentarza, a wymagający Czytelnicy
mogą jedynie rozbudować go o procedury
sprawdzania poprawności kopiowania.
Do pierwszego programu umożliwiającego
"ręczne" programowanie pamięci trudno mieć
jakiekolwiek zastrzeżenia. Jego bardzo wolna
praca, spowodowana opóźnieniami wnoszo−
nymi przez emulator sprzętowy, nie powinna
przy tym trybie pracy sprawić najmniejszych
kłopotów. Natomiast zarówno drugi, jak i trze−
ci program będą pracować w emulacji sprzęto−
wej rozpaczliwie wolno. Przeprowadziłem
stosowne próby i z procesorem PENTIUM III
600MHz zainstalowanym w komputerze, czas
kopiowania pamięci wyniósł nieco ponad 1,5
minuty! Jeżeli zatem będziemy mieli zamiar
kopiować większą ilość pamięci, to może war−
to by było zaprogramować procesor i użyć go
do obsługi naszej kopiarki.
'Listing 2
$sim
Config Sda = P3.5
Config Scl = P3.7
Declare Sub Read_eeprom(adres As Byte, Test As Byte)
Declare Sub Write_eeprom(adres As Byte, Value As Byte)
Dim Adres As Byte, Value As Byte
Dim Test As Byte
Dim R As Byte
Restore Randomdata
For R = 0 To 255
Read Value
Call Write_eeprom R, Value
Call Read_eeprom R, Test
If Value = Test Then
Print Value; " "; Test; " OK"
End If
Next R
End
'Listing 1
$sim
'praca w symulacji
Config Sda = P3.5
'konfiguracja magistrali I 2 C
Config Scl = P3.7
'konfiguracja magistrali I 2 C
Declare Sub Read_eeprom(adres As Byte, Test As Byte)
'deklaracja podprogramu
odczytu pojedynczej komórki pamięci EEPROM
Declare Sub Write_eeprom(adres As Byte, Value As Byte)
'deklaracja podprogramu
zapisu do pojedynczej komórki pamięci EEPROM
Dim Adres As Byte, Value As Byte
'deklaracja zmiennej
określającej adres w pamięci i zapisywaną wartość
Dim Test As Byte
'deklaracja zmiennej pomocniczej
Do
Input "Podaj adres w pamięci EEPROM ", Adres
'zapytanie o adres, pod który ma być zapisana informacja
Input "Podaj wartość danej do zapisania ", Value
'zapytanie o wartość, jak ma być umieszczona
w podanej komórce pamięci
Call Write_eeprom Adres, Value
'wezwanie podprogramu zapisania wskazanej
komórki pamięci podaną wartością
Call Read_eeprom Adres, Test 'kontrolny odczyt
zapisanej uprzednio wartości
Sub Read_eeprom(adres As Byte, Value As Byte)
I2cstart
I2cwbyte 160
I2cwbyte Adres
I2cstart
I2cwbyte 161
I2crbyte Test, 9
I2cstop
End Sub
Sub Write_eeprom(adres As Byte, Value As Byte)
I2cstart
I2cwbyte 160
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End Sub
Randomdata:
Data 128 , 124 , 152 , 247 , 72 , 240 , 147 , 153 ,
231 , 80 , 40 , 98 , 220 ,
Data 22 , 31 , 25 , 115 , 241 , 39 , 18 , 247 , 38 ,
127 , 95 , 121 , 85 , 234,
Data 150 , 217 , 8 , 5 , 101 , 58 , 242 , 192 , 148 ,
99 , 93 , 135 , 54 , 216 ,
Data 201 , 75 , 16 , 82 , 221 , 137 , 251 , 47 , 118 , 64 , 154,
Data 41 , 115 , 208 , 234 , 201 , 241 , 105 , 212 ,
136 , 113 , 199 , 165 , 135 ,
Data 22 , 20 , 51 , 24 , 210 , 58 , 97 , 39 , 42 , 254
, 196 , 20 , 93 , 111 , 5,
Data 216 , 65 , 141 , 237 , 32 , 79 , 212 , 241 , 14 ,
134 , 223 , 158 , 53 ,
Data 163 , 118 , 60 , 53 , 21 , 190 , 140 , 111 , 224
, 198 , 58 , 199 , 222 ,
Data 211 , 40 , 148 , 102 , 95 , 37 , 173 , 187 , 121
, 134 , 120 , 114 , 207 ,
Data 195 , 241 , 71 , 126 , 14 , 246 , 41 , 178 , 224
, 35 , 197 , 14 , 118 ,
Data 74 , 21 , 18 , 76 , 112 , 165 , 196 , 103 , 127 ,
166 , 28 , 42 , 61 , 62 ,
Data 39 , 132 , 68 , 101 , 84 , 246 , 131 , 181 , 163
, 0 , 8 , 16 , 46 , 146 ,
Data 105 , 58 , 138 , 139 , 157 , 216 , 227 , 89 , 158
, 187 , 81 , 160 , 42 ,
Data 157 , 55 , 150 , 16 , 253 , 42 , 83 , 59 , 219 ,
123 , 241 , 24 , 114 , 119
Data 93 , 157 , 242 , 103 , 26 , 177 , 92 , 115 , 166
, 29 , 91 , 86 , 82 , 201,
Data 21 , 10 , 110 , 59 , 126 , 115 , 70 , 201 , 39 ,
197 , 24 , 129,
Data 201 , 39 , 197 , 24 , 129 , 46 , 47 , 215 , 191 ,
240 , 166 , 204 , 243,
Data 117 , 32 , 5 , 81 , 224 , 9 , 4 , 176 , 170 , 101
, 96 , 117 , 86 , 153,
Data 50 , 25 , 110 , 226 , 247 , 101 , 86 , 146 , 218
, 227 , 72 , 172 , 238 ,
Data 1 , 100 , 174 , 194
If Value = Test Then 'jeżeli wynik porównania
wartości podanej z odczytaną jest pomyślny, to:
Print "OK"
'wyświetl na
ekranie terminala napis "OK."
End If
'koniec warunku
Loop
'Poniższe podprogramy zostały już opisane podczas
przerabiania ćwiczeń z obsługi magistrali I 2 C.
Sub Read_eeprom(adres As Byte, Value As Byte)
I2cstart
I2cwbyte 160
I2cwbyte Adres
I2cstart
I2cwbyte 161
I2crbyte Test, 9
I2cstop
End Sub
Sub Write_eeprom(adres As Byte, Value As Byte)
I2cstart
I2cwbyte 160
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End Sub
Ulokowanie danych w tabeli jest szczegól−
nie łatwe w przypadku korzystania z arkusza
kalkulacyjnego. Obliczone wartości możemy
bowiem zapisać w "czystym" pliku teksto−
wym i stamtąd przenieść je przez clipboard
do tekstu programu pisanego w MCS BASIC.
Analizy sposobu działania drugiego progra−
mu, który po uruchomieniu automatycznie prze−
pisze dane z tabeli do pamięci EEPROM umie−
szczonej w podstawce na płytce testowej
AVT2500, nie musimy chyba szczegółowo
omawiać. Podobnie jak w pierwszym progra−
mie, dane zapisywane w pamięci poddawane są
22
Elektronika dla Wszystkich
54838598.013.png 54838598.001.png
BASCOM
Powyższe przykłady nie wyczerpują, rzecz
jasna wszystkich możliwości, jakie dają nam
operacje wykonywane na pamięciach EE−
PROM bezpośrednio z poziomu BASCOM'a.
Sama możliwość odczytania zawartości pa−
mięci może oddać w wielu przypadkach nieo−
cenione usługi. Za chwilę zajmiemy się ukła−
dami 1WIRE i będziemy odczytywać numery
seryjne "magicznych" tabletek DALLAS,
a następnie zapisywać je i odczytywać z pa−
mięci EEPROM. Podczas wykonywania tych
czynności łatwo o wystąpienie błędu w opro−
gramowaniu. Mając możliwość natychmiasto−
wego odczytania zawartości pamięci możemy
stwierdzić, czy przynajmniej proces zapisu da−
nych przebiegał prawidłowo.
jakimi układami 1WIRE aktualnie dysponu−
jemy. Może to być równie dobrze tabletka
DS1990 jak i cyfrowy termometr DS1820.
Każdy bowiem z tych układów posiada swój
indywidualny i niepowtarzalny numer seryj−
ny, który odczytywany jest w identyczny
sposób. Wynika z tego jedno, ciekawe spo−
strzeżenie: każdy układ wyprodukowany
przez firmę DALLAS i pracujący z magistra−
lą 1WIRE może być elektronicznym klu−
czem, niezależnie od pełnionych przez niego
zasadniczej funkcji. Oczywiście, stosowanie
w tej roli układów DS1990 jest najwygo−
dniejsze, głównie ze względu na ich obudo−
wę, ułatwiającą dołączanie ich do czytników.
Przygotowałem dla Was krótki program,
który może posłużyć jako baza do dalszych
1WIRE
No nareszcie, zaczynamy pracę z jedną z naj−
bardziej interesujących rodzin układów scalo−
nych, jakie kiedykolwiek zostały skonstruo−
wane. Stosowanie tych układów zawsze bu−
dziło, częściowo tylko uzasadnione lęki wśród
początkujących elektroników, uważających
"Dallasy" za przejaw działalności sił nieczy−
stych i czarnej magii. Za chwilę przekonamy
się, jak bardzo ta opinia była niesłuszna i że
będziemy w stanie "dobrać się" do wszystkich
możliwości oferowanych przez układy 1WI−
RE za pomocą tylko trzech, prostych w obsłu−
dze poleceń języ−
ka MCS BASIC.
Do wykonania
ćwiczeń potrzeb−
ne będą elementy
wymienione
w pierwszej czę−
ści artykułu oraz
procesor typu
89CX051. Nie−
stety, żadna
z operacji związa−
nych z obsługą
magistrali 1WI−
RE nie jest możli−
wa do przeprowa−
dzenia w emulacji
sprzętowej
i wszystkie ćwi−
czenia będziemy
musieli wykonać
dysponując za−
programowanym
uprzednio procesorem. Czytnik 1WIRE TO−
UCH MEMORY dołączmy do naszej płytki te−
stowej tak, jak zostało pokazane na rysunku 4 .
Jeżeli nie posiadamy takiego czytnika, to mo−
żemy zastąpić go prowizorycznie dwoma od−
cinkami przewodu, do których będziemy dołą−
czać tabletki DS1990 lub termometru DS1820.
Informacje o pracy programu kierowane będą
na wyświetlacz alfanumeryczny LCD.
Do końca dzisiejszych
zajęć pozostało już nie−
wiele czasu i dlatego zdą−
żymy przerobić tylko jed−
no ćwiczenie, ale za to
mające zasadnicze zna−
czenie dla opanowania
techniki posługiwania się
układami 1WIRE. Nau−
czymy się odczytywać
numery seryjne tych
układów, co w najbliższej
przyszłości umożliwi
nam skonstruowanie kil−
ku ciekawych urządzeń.
Na tym etapie nauki
jest całkowicie obojętne,
Rys. 1
Połączenie dodatkowe, wykonane
przewodem na podstawce
5
XTAL1
+P1.0
12
13
−P1.1
14
P1.2
4
3
2
1
15
P1.3
4
16
IC5
XTAL2
P1.4
N
D
0
S
C
O
S
C
I
17
PCF8583
P1.5
1
18
RESET
P1.6
19
P1.7
AT24C04
2
RXD/P3.0
S
D
A
S
C
L
I
N
T
V
C
C
3
TXD/P 3.1
20
6
VCC
INT0/P3.2
7
INT1/P3.3
8
SDA
T0/P3.4
T1/P3.5
9
5 6 7 8
10
11
GND
P3.7
SCL
2
I C
Rys. 2
CON1/IC6
1
A0
UCC
8
Rys. 3
2
7
A1
TST
3
6
A2
SCL
4
5
GND
SDA
IC2
AT24C04
JP5
JP4
JP3
JP2
'Listing 3
$sim
Config Sda = P3.5
Config Scl = P3.7
Declare Sub Read_eeprom(adres As Byte, Test As Byte)
Declare Sub Write_eeprom(adres As Byte, Value As Byte)
Dim Adres As Byte, Value As Byte
Dim Test As Byte
Dim R As Byte
For R = 0 To 255
Call Read_eeprom R, Value: Print Value
Call Write_eeprom R, Value
Next R
End
Rys. 4
P1.0
Sub Read_eeprom(adres As Byte, Value As Byte)
I2cstart
I2cwbyte 160
I2cwbyte Adres
I2cstart
I2cwbyte 161
I2crbyte Value, 9
I2cstop
End Sub
GND
1WIRE
1
2
3
4
5
GREEN
DS1990
BROWN
BIAŁY
WHITE
ŻÓŁTY
YELLOW
SZARY
GREY
TOUCH MEMORY
TOUCH MEMORY
Sub Write_eeprom(adres As Byte, Value As Byte)
I2cstart
I2cwbyte 162
I2cwbyte Adres
I2cwbyte Value
I2cstop
Waitms 10
End Sub
1
2
3
4
5
GREEN
DS1820
BROWN
WHITE
YELLOW
GREY
TOUCH MEMORY
TOUCH MEMORY
Elektronika dla Wszystkich
23
54838598.002.png 54838598.003.png 54838598.004.png 54838598.005.png 54838598.006.png 54838598.007.png
BASCOM
doświadczeń z układami 1WIRE, a także jako
podstawa do napisanie konkretnych progra−
mów użytkowych. Chciałbym, abyście prze−
myśleli dokładnie jego treść i zastanowili się,
jakie bardzo, ale to bardzo ciekawe urządze−
nie można zbudować wykorzystując jego
składniki i oczywiście, dodając nowe. Zada−
niem tego programu jest odczytanie z przyło−
żonego do czytnika układu 1WIRE ośmiu
bajtów jego numeru seryjnego. Tak napraw−
dę, to numer seryjny składa się tylko z sied−
miu bajtów (w tym jeden bajt identyfikujący
grupę układów) i jednego bajtu zawierającego
sumę kontrolną, umożliwiającą zweryfikowa−
nie poprawności odczytu. Dla ułatwienia mo−
żemy jednak nazywać odczytaną z układu
liczbę 64 bitową numerem seryjnym. Po od−
czytaniu numeru program zapisuje go w pa−
mięci EEPROM, weryfikuje ten zapis i wy−
świetla kolejne bajty numeru na ekranie wy−
świetlacza LCD. Zastanówcie się teraz, jakie
urządzenie możemy zbudować dodając je−
szcze kilka − kilkanaście linijek programu?
Urządzenie to może być wyjątkowo spekta−
kularnym pokazem możliwości stosowania
układów 1WIRE, głównie tabletek DS1990.
Zbigniew Raabe
e−mail: zbigniew.raabe@edw.com.pl
'Listing 4
Config 1wire = P1.0 'wskazanie kompilatorowi,
do którego pinu dołączona jest magistrala 1WIRE
Config Lcd = 16 * 1a
Dim Number(8) As Byte
Dim R As Byte
Declare Sub Read_numbers
Declare Sub Write_eeprom(r As Byte, Number As
Byte)
Declare Sub Read_eeprom(r As Byte, Number As
Byte)
Cls
Cursor Off
Do
Call Write_eeprom R, Number(r) 'zapisz do pamięci
EEPROM kolejne bajty numeru seryjnego układu
Next R
For R = 1 To 8 'ośmiokrotnie:
Call Read_eeprom R, Number(r) 'dla kontroli
odczytaj zapisany w pamięci numer
1wreset
'inicjalizacja magistrali 1WIRE
For R = 1 To 8
'ośmiokrotnie
Cls
'wyczyść ekran wyświetlacza
Waitms 255
'zaczekaj 255ms
Lcd Number(r)
'wyświetl kolejne bajty numeru seryjnego układu
Wait 1
'zaczekaj 1 sekundę
Next R
End Sub
If Err = 1 Then
'jeżeli żaden układ nie
odpowiedział na wezwanie, to:
Cls
'wyczyść wyświetlacz
Lcd "No device!"
'wyświetl stosowny komunikat
Waitms 25
'zaczekaj 250 ms
Else
'w przeciwnym wypadku:
Cls
Call Read_numbers 'wezwij podprogram czytania
numeru seryjnego dołączonego do magistrali
układu 1WIRE
Sub Write_eeprom (eeprom_adres Byte, Value As
Byte)
I2cstart
I2cwbyte 160
I2cwbyte R
I2cwbyte Number
I2cstop
Waitms 10
End Sub
End If
'koniec warunku
Loop
Sub Read_numbers
1wwrite &H33 'żądanie podania przez
odnaleziony układ jego numeru seryjnego
For R = 1 To 8 'ośmiokrotnie:
Number(r) = 1wread(): 'odczytaj z
magistrali 1WIRE kolejne bajty numeru układu
Next R
Cls
Lcd "Device found!" 'wyświetl komunikat o
zgłoszeniu się układu
Sub Read_eeprom (eeprom_adres As Byte, Value
As Byte)
I2cstart
I2cwbyte 160
I2cwbyte R
I2cstart
I2cwbyte 161
I2crbyte Number, Nack
End Sub
For R = 1 To 8
'ośmiokrotnie:
24
Elektronika dla Wszystkich
Next R
'początek pętli programowej
54838598.008.png 54838598.009.png 54838598.010.png
Zgłoś jeśli naruszono regulamin