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