70100 Image187 (3)

70100 Image187 (3)




<3vww.dexon.pl


TECHNIKA

NAGŁOŚNIENIOWA


Czemu zachęcam do stosowania skryptu start.bat zamiast prostego polecenia make alt! Okazało się bowiem, że podczas kompilacji zapisywane są do pliku main.cpp instrukcje asemblera, w związku z czym program jest niszczony! Ten prosty skrypt skopiuje plik main.cpp przed rozpoczęciem kompilacji i przywróci go po jej zakończeniu. Czasem zdarza się, że coś pójdzie źle i utracie ulega program z pliku main.cpp. W takiej sytuacji nie należy wpadać w panikę: kopia jest w pliku main_copy.cpp.

Jest jeszcze jedna rzecz, która może przyprawić niezorientowanych o białą gorączkę. Nic wiem z czego ten problem wynika, jednak zmienne... się nie zmieniają! Oznacza to, że jakakolwiek operacja na zmiennych nic zostanie wykonana/zauważona przez kompilator. Sposób na to jest prosty, brutalny i skuteczny: trzeba używać słówka volatile przy deklaracji zmiennej. Wymusi ono szczególną dbałość o zmienne i praw idłową ich obsługę, np. volatilc int zmienna - O ;

Porty, podobnie jak w rodzinie AVR, wymagają zadeklarowania trybu pracy: wejście czy wyjście? Dokonuje się tego 32-bito-wym rejestrem GP/OnIODIR, który kontroluje 32 końcówki portu PO. Wpisując liczbę OxOOOOOOOF do GPIOOJODIR (bitowo: 00..001111), porty PO.O, PO. 1, P0.2, P0.3 będą pracowały jako wyjścia.

Ustawienie stanu wysokiego na wybranym pinie wymaga wpisania jedynki na odpowiedniej pozycji rejestru GPIOnJOSET. Stan niski (uwaga! nowość) wymusza się, WPISUJĄC JEDYNKĘ, ale do rejestru GPlOnJOCLR. Można odczytywać stan poszczególnych pinów, wykorzystując GP/On lOPlN. Litera n oznacza numer portu. Układ LPC2103 posiada tylko PO. więc istnieje możliwość pominięcia n i w rezultacie można pisać np. GPIO_D/R. Chciałbym w tym miejscu jeszcze uświadomić Czytelników, jak dodawać definicje własnych rejestrów, gdyż podczas przygotowywania ilumi-nofonii zaszła taka potrzeba. Dokonuje się tego, edytując plik lpc21Q3.h dołączony do programów. Dodanie własnego rejestru jest proste i sprowadza się tylko do dopisania instrukcji:

Mefine NAZWA (*(REG32 (ADRES))) gdzie, jak łatwo się domyślić, NAZWA określa, jak będzie wywoływany rejestr (np. G'P/0 IODIR). a ADRES to adres tegoż rejestru. Kontrowersje może wzbudzić pytanie: skąd wziąć adres? Na końcu artykułu jest odwołanie do dokumentacji producenta - tam należy szukać odpowiedzi...

Mając podstawową wiedzę o działaniu portów i pracy ze środowiskiem WinARM. proponuję napisać prosty program sterujący trzema kolorami diody RGB. Włącza on kolejne kolory, a następnie je wygasza. Funkcja wait generuje opóźnienie. W Elporta-lu w materiałach dodatkowych do tego numeru można też znaleźć dwa proste programy realizujące takie proste ćwiczenia.

PLL - co to jest i jak to włączyć?

Być może z ciekawości zajrzałeś do dokumentacji układu LPC2103. Wiesz wtedy, że mikrokontroler może pracować z częstotliwością do 70MHz. Widziałeś również schemat-kwarc ma „tylko" trochę ponad 11MHz. Zapytasz może: „czemu nic szybciej*’? W handlu nie spotyka się raczej rezonatorów kwarcowych o częstotliwości większej niż 24MHz. Do uzyskiwania większych częstotliwości stosuje się mechanizm zwany PLL (ang. Phase Locked Loop). Jego zadanie polega na zwielokrotnianiu częstotliwości rdzenia, np. zamiast 11MHz otrzymujemy 22. 33 czy nawet 66MHz. Dzięki niemu model pracuje z częstotliwością ponad 55MHz.

Przygotowując się do uruchomienia PLL, należy w pierwszym kroku ustawić mnożnik. Częstotliwość rezonatora kwarcowego zostanie adekwatnie zwielokrotniona. Np. instrukcja: SCBPLLCFG = 0x05; spowoduje pięciokrotne zwiększenie częstotliwości (zamiast 11MHz będzie 55MIIz). Następnie należy uaktywnić obwód PLL i dołączyć go do rdzenia za pomocą instrukcji: SCBJPLLCON |= 0x03;

Powstaje w tym miejscu pewien problem: przypadkowa zmiana częstotliwości taktowania rdzenia może być źródłem wielu problemów. np. niespełnione będą zależności czasowe (funkcja opóźniająca o lOOms opóźni program tylko o 20ms). Chcąc ustrzec programistów przed taką pułapką, wprowadzono specjalną „sekwencję startową". Dopiero po jej podaniu zmiany (mnożnik i uruchomienie PLL) zostaną wprowadzone. Oto ta sekwencja:

SCB_PLLFEED=OxAA: SCB_PLLFEED=0x55;

Po tych czterech instrukcjach mikrokontroler rozpocznie pracę pięć razy szybciej.

Teraz będzie przysłowiowy kubeł zimnej wody i mroczna strona PLL. Nadmierne zwiększenie taktowania rdzenia zakończy się bardzo niestabilną pracą: program będzie się zawieszał, reagował błędnie, etc. Nie jest to fizycznie szkodliwe dla LPC2103. ale wyjątkowo frustrujące dla programisty, który ma problem z ustaleniem źródła błędu (sprawdziłem).

Sprawę związaną z sygnałem zegarowrym określa eszcze jedna instrukcja: SCB_VPBDIV = 0x01: //PCLK = CCLK

Sprawia ona. że wewnętrzne moduły (np. ADC. liczniki, etc...) są taktowane z prędkością taką samą jak rdzeń. Bez tej instrukcji częstotliwość taktowania peryferii byłaby dwa razy mniejsza. Podniesienie prędkości taktowania peryferii sprawi, że generator PWM będzie pracował z większą częstotliwością. co jest zjawiskiem korzystnym.

PWM, ADC, RS232 - obsługa

Generator PWM (ang. Pulsc Width Modulator) to specjalny układ zdolny generować sygnał cyfrowy o zmiennym wypełnieniu. Zmieniając wypełnienie impulsów, można sterować np. jasnością świecenia diod LED. LPC2103 posiada wbudowane trzy generatory PWM. a każdy ma cztery kanały. Do zrealizowania iluminofonii wystarczy jeden generator i tylko trzy kanały: jeden steruje diodą czerwoną (tony niskie), drugi diodą zieloną (tony średnie), natomiast 3 diodą niebieską (tony wysokie). Przygotowanie PWM do pracy sprowadza się do ustawienia wartości w kilku rejestrach. Do niniejszego przykładu wykorzystano licznik T2 (16-bitowy).

PCBPINSELO |= OxOOASOGO;

//podłącz PWM

Instrukcja ta podłącza wyjścia PWM do fizycznych wyprowadzeń mikrokontrolera. Bez zmiany wartości w tym rejestrze porty P0.7..9 pełniłyby funkcję zwyczajnych portów wejścia-wyjścia. Rejestr PCB PINSELO oraz PCB_PINSELJ służą do konfiguracji funkcji spełnianej przez dane wyprow adzenie. T2JCR |= 0x0! ; //wlacz licznik

Ta instrukcja uruchamia licznik T2. Jego wartość jest sukcesywnie zwiększana w takt sygnału zegarowego. Działanie PWM jest bardzo ściśle związane z pracą licznika. PWM2_CON |- 0x07;

Powyższa instrukcja uruchamia trzy kanały PWM na potrzeby iluminofonii. Pozostaje jeszcze kwestia ustawienia rozdzielczości PWM. Inaczej mówiąc, trzeba określić górny zakres zliczania. Po jego osiągnięciu nastąpi wyzerowanie licznika T2, ustawienie zera logicznego na wszystkich kanałach i zliczanie od początku. Załóżmy, że licznik będzie zliczał do 255 (OxFF). W takim wypadku wpisanie wartości O do rejestru PWM spowoduje, iż dioda będzie wygaszona. Wartość 255 spowoduje natomiast zaświecenie diody z pełną mocą. Wartości pośrednie pozwolą sterować jasnością LED. Instrukcje:

T2_MR3 |= OxFF ://zakres PWM T2_MCR - Oa0400 ;//ustu»v zerowania /.hj/u u -z MRJ wymuszają pracę PWM zgodnie z naszymi założeniami. Pierwsza z nich ustawia górny zakres, a druga wymusza, aby po stwierdzeniu równości pomiędzy rejestrem T2 \1R3 i wartością licznika wpisać zero do T2.

Przygotowanie ADC do pracy przebiega podobnie, tzn. poprzez ustawienie portu jako weiście przetwornika, instrukcja:

PCB PINSELl |= 0x3000:

Następnie trzeba określić sposób pracy przetwornika, jego prędkość i parę dodatkowych rzeczy. Odbywa się to za pomocą instrukcji: ADO_CR = 0x206801;

Nie ma wątpliwości, że pow yższa instrukcja nic nie mówi o podejmowanych działaniach. Zerknijmy na opis rejestru ADO CR -tabela 1. Bity SEL pozwalają wyhrać wejście z którego będzie mierzony sygnał W trybie pojedynczego pomiani (czyli tym. którymi operujemy) należy wpisać tylko JEDNĄ je-

Elektronika dla Wszystkicn Grudzień 2006 15


Wyszukiwarka

Podobne podstrony:
Image100 (3) Top www5hrww.dexon.pl TECHNIKA NAGŁOŚNIENIOWA r diod - Zaświecone zielone świadczą o ty
Image200 (4) Top www■zn*ii/w w. dexon.pl TECHNIKA NAGŁOŚNIENIOWA Przy projektowaniu większych system
skanuj0052 Stosowanie technik kreatywnego pisania zachęca do wzbogacenia lub zmiany indywidualnych s
IMG 1312023023 Działanie 3.1 I Realizacja obowiązku ot^fcło badaniami technicznymi będącego w utyci
Image128 (2) Top www"Mw.dexon. TECHNIKA NAGŁOŚNIENIOWA densalor należy okleić taśmą i dodatkowo
60 (91) TECHNIKA NAGŁOŚNIENIOWAWW1AM 8.08U . 8.tum p=g<gh! 0=0nu U Rys. 2 Obciążenie —^

więcej podobnych podstron