poczta - Elektronika Praktyczna

Transkrypt

poczta - Elektronika Praktyczna
SPRZĘŻENIE ZWROTNE
SPRZĘŻENIE ZWROTNE
Listy, pomysły, opinie
poczta
Tempo rozwoju elektroniki
Szanowna Redakcjo! Tempo rozwoju współczesnej elektroniki mnie
przeraża. Czasami chciałoby się krzyknąć „świecie poczekaj, bo nie nadążam!”. Ale nie o tym chciałem do Was napisać.
Nie zajmuję się elektroniką profesjonalnie, ale bardziej traktuję ją jako
hobby, dzięki któremu można trochę oderwać się od codziennych zajęć. Wykonuję na własne potrzeby urządzenia, których projekty najczęściej pochodzą z Internetu lub różnych czasopism. Przymierzyłem się do samodzielnej
konstrukcji urządzenia z mikrokontrolerem, jednak... Chciałem użyć popularnej, dobrze znanej 51-ki. Jednak straciłem cały zapał po obejrzeniu dokumentacji mikrokontrolera AT89C51RD9, która liczy sobie blisko 200 stron!
Z ciekawości wziąłem coś z AVR-ów. Tu natrafiłem na blisko 350 stron! Postanowiłem sięgnąć do popularnego PIC-a, znowuż prawie 200 stron! A widziałem i takie PDF-y, które miały po prawie 500 stron! Wyobrażam sobie (nie
sprawdzałem) jak to wygląda w przypadku procesorów z rdzeniem ARM...
Przecież nie starczy mi życia, aby przeczytać dokumentację procesorów,
których chciałbym użyć. Te wszystkie bity, rejestry, przerwania i flagi – czy
to naprawdę potrzebne? Jak inni radzą sobie z tak obszerną dokumentacją
techniczną? (...)
Pozdrawiam!
Zbyszek
(wierny czytelnik ze Szczecina)
Red. Dokumentacja mikrokontrolerów jest zwykle bardzo obszerna, ponieważ programowanie w asemblerze wymaga dogłębnej znajomości sprzętu:
nie tylko zasobów wewnętrznych używanego mikrokontrolera lecz również
jego otoczenia ze szczególnym uwzględnieniem dołączonych elementów
zewnętrznych. Wszystkie elementy architektury mikrokontrolera, których
istnienia nie zawsze jest świadomy programista piszący aplikację w języku
wysokiego poziomu (C, Bascom itp.) muszą być doskonale znane programiście używającemu asemblera. Ten pierwszy nie musi dla przykładu wiedzieć, że w wyniku odejmowania dwóch liczb może być ustawiany znacznik przeniesienia: zwalnia go od tego kompilator.
Aplikacje tworzone w asemblerze wymagają przeciętnie około 2 razy
więcej czasu na napisanie oraz kilka razy więcej czasu na usunięcie błędów, aniżeli równoważne im programy pisane w językach wysokiego poziomu. Zwłaszcza ten drugi aspekt jest bardzo często pomijany w dyskusjach
przez programistów. A co w zamian? Dobrze napisany program w asemblerze zajmuje tylko tyle miejsca w pamięci, ile jest niezbędne. W związku
z tym dobry programista może stworzyć maksymalnie efektywną aplikację,
działającą szybko i niezawodnie. Nie bez znaczenia jest również fakt, że
większość kompilatorów asemblera przeznaczonych dla mikrokontrolerów
jest udostępniana przez producentów mikrokontrolerów za darmo. Coś za
coś – czas niezbędny na stworzenie aplikacji i jej uruchomienie w zamian
za szybkość i efektywność wykorzystania zasobów mikrokontrolera. Obserwując trendy na rynkach narzędzi dla programistów stwierdzam, że ten
pierwszy czynnik przeważa. Przemawia za nim wzrost szybkości mikrokontrolerów oraz rozmiarów ich pamięci a także efektywności narzędzi
i łatwość ich stosowania.
Każdorazowo przy zmianie środowiska czy języka programowania
zachodzi konieczność nauczenia się pewnych nowych umiejętności oraz
przyswojenia sobie nowej wiedzy, co przy jednoczesnym pożądaniu szybkiego efektu, może doprowadzić do frustracji. Jak najprościej i najszybciej
nauczyć się pisać programy dla nowego mikrokontrolera?
Jedną z możliwych metod jest czytanie wszelkich materiałów na ten
temat: danych mikrokontrolerów ze strony producenta, różnego rodzaju
18
opracowań i książek, listy rozkazów i tym podobnych. Osobiście jednak
wielokrotnie uczyłem się nowych języków programowania sprawdzoną
nie tylko przeze mnie metodą: wyszukiwałem jak najwięcej pracujących
i przetestowanych programów napisanych w języku, którego chciałem się
nauczyć. Bardzo pomocni w tej sytuacji byli ludzie, którzy już posiadali umiejętności, których ja dopiero chciałem się nauczyć. „Studiowałem”
zdobyte programy próbując zrozumieć jak działają i jak skonfigurowany
jest mikrokontroler w konkretnej aplikacji, uruchamiałem program na płytce testowej, wprowadzałem modyfikacje, sprawdzałem jak działają – stąd
już tylko krok do samodzielnie napisanych programów.
Uważam dokumentację ze stron internetowych producentów za bardzo cenne źródło informacji, jednak gdy mam na przykład na ekranie lub
w rękach dokument PDF na temat mikrokontrolera ATMega128 liczący
około 350 stron, to ogarnia mnie uczucie lekkiego przerażenia. Nie dosyć,
że wydrukowanie go zajmuje mnóstwo czasu, to na przestudiowanie będę
musiał poświęcić około 2 tygodni. I tak za każdym razem? Nauczyłem się
być mądrzejszym i oszczędzać swój czas. Tak naprawdę nie są mi przecież
potrzebne szczegółowe informacje jak działa osobno każdy z bitów urządzeń, których pewnie nie użyję, jaka jest gama obudów itp. Poszukuję więc
grup informacji zawierających istotne dla mnie parametry:
- pierwszej strony zawierającej skrócony opis opcji,
- strony zawierającej szkic obudowy oraz opis wyprowadzeń,
- początkowych najczęściej stron dokumentu zawierających opis architektury,
- opisu funkcjonowania przerwań,
- opisu sposobu podziału i funkcjonowania pamięci,
- opisu sposobu dołączenia układów zewnętrznych,
- opisu rejestrów sterujących mikrokontrolera,
- opisu zestawu rozkazów asemblera.
Do reszty tekstu zaglądam rzadko lub prawie wcale. Przeważnie odwołuję się do niego już w momencie implementacji konkretnej funkcji obsługującej na przykład przetwornik A/D czy korzystającej ze specyficznego
układu peryferyjnego, w który wyposażony jest mikrokontroler.
Jacek Bogusz
Ankieta z EP11/2010
W Elektronice Praktycznej nr 11/2010 zapytaliśmy Was o to, czym się
zajmujecie i jakie kursy są Wam potrzebne do realizacji swoich celów zawodowych.
Na odpowiedzi na pytanie „Opisz w paru zdaniach nad czym ostatnio pracujesz jako elektronik (zawodowo lub amatorsko)” większość
z Was wymieniała urządzenia z mikrokontrolerami, najczęściej sterujące różnego typu napędami. Większość z Czytelników buduje swoje
urządzenia w oparciu o mikrokontrolery AVR, PIC i ARM. Stąd też
domagacie się od nas kursów programowania tych najbardziej popularnych układów. Pojawiały się też inne, bardziej „egzotyczne” prośby
o kursy programowania Freescale’owych ColdFire czy użycia Matlaba
do programowania napędów. Będziemy się starali zaspokoić te Wasze potrzeby w 2011 roku. Tematyka ARM’ów jest obecna w EP od
dawna. Tu cały czas trzymamy rękę na pulsie. Mikrokontrolerami PIC
oraz kursem ich programowania w języku C zajmiemy się na początku 2011. Podobny kurs planujemy dla mikrokontrolerów AVR, jednak
będzie on publikowany nieco później. Planujemy go rozpocząć w połowie roku 2011. W EP pojawią się również ćwiczenia z Matlabem.
Zaskoczył mnie przekrój naszych Czytelników: od hobbystów
do profesjonalistów z różnych dziedzin, nie tylko elektroników. RóżELEKTRONIKA PRAKTYCZNA 1/2011
Poczta
norodność budowanych przez Was układów jest przeogromna. Od
Transformatora Tesli, układy sterujące robotami-zabawkami i kolejkami elektrycznymi, wzmacniacze i procesory sygnału audio, transceivery krótkofalarskie, aż do profesjonalnych konstrukcji przeznaczonych do zastosowania w motoryzacji, urządzeniach medycznych
i elektronice użytkowej.
W odpowiedzi na pytanie „Jakiej wiedzy potrzebujesz, ew. jaki
kurs by Ci się przydał?” większość z Was wymieniała programy narzędziowe dla ARM, PIC oraz AVR. Królowały kursy języka C oraz prośby
o opisy IDE tego języka. Często powtarzały się też tematy związane
z funkcjonowaniem interfejsów CAN, MODBUS, elektroniką w motoryzacji oraz serwisowaniem urządzeń elektronicznych, tj. metod
lokalizacji uszkodzeń podzespołów. Prosiliście również o opisy nowoczesnych narzędzi przeznaczonych do symulowania obwodów oraz
wykonywania obliczeń związanych z elektrotechniką.
Będziemy się starali jakoś „wypośrodkować” te Wasze potrzeby,
tak aby każdy znalazł w EP coś dla siebie. Dziękujemy za udział w ankiecie! Zebrane pomysły i sugestie pozwolą nam na jeszcze lepsze
dopasowanie się do Waszych potrzeb.
Redakcja EP
Szanowna Redakcjo!
Z satysfakcją przyjąłem zamieszczenie w EP 12/2010 mojego projektu
pt. „Rewolucyjny zegar”. Ostatnie zdanie tekstu odwołuje się do tabeli, która
(...) nie została zamieszczona. Opisuje ona istotny dla projektu stan pracy
zegara. Na wszelki wypadek tabelę załączam.
Moc pozdrowień,
Marek A. Kulczycki
Tab. Znaczenie kropek dziesiętnych przy cyfrach wyświetlaczy
wyświetlaczA i wyświetlaczB – tryby wyświetlania
88:88 88
Wyświetlanie czasu24
Nie jest zaświecony żaden punkt dziesiętny
88:88.88
Wyświetlanie czasu10
Świeci się punkt dziesiętny przy jednostkach minut
88:88.88.
Wyświetlanie czasu20
Świecą się punkty przy jednostkach minut i jednostkach
sekund
wyświetlaczB –
tryb ustawiania
88:88 8 8.
Ustawianie czasu24
Świeci się punkt dziesiętny przy jednostkach sekund
88:88.88.
Ustawianie czasu10
Świecą się punkty przy jednostkach minut i dziesiątkach
sekund
88:88.8.8.
Ustawianie czasu20
Świecą się punkty przy jednostkach minut, dziesiątkach
sekund i jednostkach sekund
Używam ekspanderów PCF8574, jednak układy te posiadają ograniczone możliwości jeśli chodzi o konfigurację generowania przerwania w reakcji
na zmianę stanu wyprowadzenia. Czy istnieją jakieś podobne układy, które
pozwoliłyby na selektywne włączanie generowania przerwania oraz konfigurację reakcji na przerwanie?
Znacznie bardziej rozbudowany układ przerwań posiadają ekspandery portów produkowane przez firmę Microchip noszące oznaczenie
MCP23008. Podobnie jak układ PCF8574 są to 8-bitowe ekspandery pracujące na magistrali I2C. Układ zawiera 11 rejestrów wewnętrznych służących do konfiguracji układu oraz sterowania wyprowadzeniami portu.
Poszczególne rejestry pełnią następujące funkcje:
- IODIR (adres 0). Rejestr wyboru kierunku pracy wyprowadzeń GP0GP7. Rejestr zawiera bity [IO7...IO0]
ELEKTRONIKA PRAKTYCZNA 1/2011
1 - wyprowadzenie jest skonfigurowane jako wejście
0 - wyprowadzenie jest skonfigurowane jako wyjście
- IPOL (adres 1). Rejestr konfigurujący polaryzację sygnałów wejściowych. Rejestr zawiera bity [IP7...IP0]
1 - Bit rejestru GPIO zawiera zanegowany stan wyprowadzenia wejściowego.
0 - Bit rejestru GPIO zawiera stan wyprowadzenia wejściowego.
- GPINTEN (adres 2). Rejestr zezwolenia na przerwanie od zmiany
stanu wybranego wyprowadzenia wejściowego. Rejestr zawiera bity
[GPINT7...GPINT0].
1 - zezwolenie na przerwanie od zmiany stanu wybranego wyprowadzenia.
0 - brak zezwolenia na przerwanie od zmiany stanu wybranego wyprowadzenia
- DEFVAL (adres 3). Rejestr domyślnej wartości wyprowadzenia. Jeśli
stan wyprowadzenia jest przeciwny do stanu odpowiadającego mu
bitu w tym rejestrze (oraz odpowiednie bity w rejestrach INTCON
i GPINTEN są ustawione) generowany jest sygnał przerwania.
- INTCON (adres 4). Rejestr ustalający sposób porównania stanu wyprowadzenia. Jeśli bit w rejestrze jest w stanie wysokim, stan odpowiadającego mu wyprowadzenia jest porównywany z zanegowanym
stanem bitu rejestru DEFVAL. Jeśli bit w rejestrze INTCON jest w stanie niskim, stan odpowiadającego mu wyprowadzenia jest porównywany z poprzednim stanem tego wyprowadzenia.
- IOCON (adres 5). Rejestr zawiera kilka bitów konfigurujących pracę
układu : bit 5 – SEQOP( 1 - dostęp w trybie sekwencyjnym wyłączony, wskaźnik adresowy nie jest inkrementowany, 0 - dostęp w trybie
sekwencyjnym włączony, wskaźnik adresu jest inkrementowany), bit
4 – DISSLW (1 - funkcja Slew Rate wyłączona, 0 - funkcja Slew Rate
włączona), bit 2 – ODR (1 - wyprowadzenie INT z otwartym drenem/
wartość bitu INTPOL bez znaczenia, 0 - wyprowadzenie INT przeciwsobne/polaryzacja ustalona bitem INTPOL), bit 1 – INTPOL (1 - aktywny stan na wyjściu INT wysoki, 0 - aktywny stan na wyjściu INT
niski).
- GPPU (adres 6)Rejestr konfiguracji rezystorów podciągających na liniach GP7:GP0. Zawiera bity [PU7...PU0]
1 - rezystory podciągające włączone
0 - rezystory podciągające wyłączone
- INTF (adres 7). Rejestr flag przerwań. Wskazuje na którym wyprowadzeniu skonfigurowanym jako źródło przerwania został spełniony
warunek wystąpienia przerwania..
- INTCAP (adres 8). Rejestr przechowujący stan wyprowadzeń w momencie spełnienia warunku wystąpienia przerwania.
- GPIO (adres 9). Rejestr stanu wyprowadzeń GP7...GP0. Odczyt tego
rejestru powoduje odczyt stanu wyprowadzeń portu. Zapis do tego
rejestru powoduje zmodyfikowanie rejestru OLAT.
- OLAT (adres 10). Rejestr zatrzasków wyjściowych. Odczyt tego rejestru powoduje odczyt stanu zatrzasków wyjściowych. Zapis rejestru
modyfikuje stan wyprowadzeń skonfigurowanych jako wyjścia.
Algorytm zapisu danych do układu MCP23008 przedstawiony jest na
rysunku 1, natomiast algorytm odczytu na rysunku 2.
Rysunek 1. Algorytm zapisu do MCP23008
Rysunek 2. Algorytm odczytu z MCP23008
19