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