Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00196 005994 14079335 na godz. na dobę w sumie
Programowanie układów AVR dla praktyków - ebook/pdf
Programowanie układów AVR dla praktyków - ebook/pdf
Autor: Liczba stron: 432
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-9504-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> elektronika >> elektronika
Porównaj ceny (książka, ebook (-20%), audiobook).

Programowanie układów AVR dla pasjonatów!

Współczesny świat elektroniki jest podbijany przez układ Arduino. Przemawia za nim wygoda oraz proste tworzenie całkiem zaawansowanych projektów. Jeżeli jednak wymagasz najwyższej wydajności, reakcji na zdarzenia w czasie rzeczywistym lub wielozadaniowości, warto, żebyś wykonał kolejny krok i poznał układy AVR firmy Atmel. Brzmi zachęcająco?

Doskonale! W Twoje ręce oddajemy książkę, która pozwoli Ci poznać pasjonujący świat tych układów. W kolejnych rozdziałach nauczysz się wykorzystywać ich potencjał do pisania swoich własnych programów w języku C oraz komunikowania się ze światem zewnętrznym. Ponadto dowiesz się, jak korzystać z komunikacji szeregowej, wejść cyfrowych oraz przerwań sprzętowych. Na sam koniec, w części poświęconej zaawansowanym zagadnieniom, zobaczysz, jak używać przełączników i protokołu I2C oraz sterować silnikami. Książka ta przyda się wszystkim pasjonatom elektroniki, którzy pragną odkryć potencjał układów AVR.

Dzięki tej książce:

Wykorzystaj potencjał układów AVR!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Make: AVR Programming Tłumaczenie: Wojciech Moch ISBN: 978-83-246-9501-0 © 2014 Helion S.A. Authorized Polish translation of the English edition of Make: AVR Programming, ISBN 9781449355784 © 2014 Elliot Williams, published by Maker Media Inc. This translation is published and sold by permission of O’Reilly Me-dia, Inc., which owns or controls all rights to sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/prouka.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/prouka Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci Wst(cid:218)p ........................................................................................................................11 Cz(cid:218)(cid:258)(cid:202) I Podstawy 1. Wprowadzenie ................................................................................................................. 19 Czym jest mikrokontroler? Obraz ogólny ............................................................................................19 Komputer w jednym uk(cid:239)adzie… ...................................................................................................19 …naprawd(cid:218) ma(cid:239)y komputer ........................................................................................................20 Co mog(cid:200) mikrokontrolery? ..........................................................................................................21 Sprz(cid:218)t: obraz ogólny ..........................................................................................................................21 Rdze(cid:241): procesor, pami(cid:218)(cid:202) i uk(cid:239)ady wej(cid:258)cia-wyj(cid:258)cia ......................................................................23 Uk(cid:239)ady peryferyjne: u(cid:239)atwianie sobie (cid:285)ycia ...................................................................................25 2. Programowanie uk(cid:239)adów AVR ........................................................................................ 29 Programowanie uk(cid:239)adu AVR ...............................................................................................................29 (cid:146)a(cid:241)cuch narz(cid:218)dzi ........................................................................................................................29 Narz(cid:218)dzia programowe ......................................................................................................................32 Konfiguracja w systemie Linux ....................................................................................................33 Konfiguracja w systemie Windows ..............................................................................................33 Konfiguracja w systemie Mac ......................................................................................................34 Konfiguracja modu(cid:239)u Arduino ......................................................................................................34 Program make i pliki makefile ......................................................................................................34 AVR i Arduino ....................................................................................................................................35 Zalety platformy Arduino ..............................................................................................................35 Wady platformy Arduino ..............................................................................................................35 3 Kup książkęPoleć książkę Arduino: sprz(cid:218)t czy oprogramowanie? I to, i to! ...........................................................................37 Arduino to AVR ............................................................................................................................37 Arduino to programator uk(cid:239)adów AVR ..........................................................................................40 Inne programatory sprz(cid:218)towe .............................................................................................................42 Moje ulubione programatory ........................................................................................................42 Zaczynamy: b(cid:239)yskaj(cid:200)ce diody LED .....................................................................................................43 Pod(cid:239)(cid:200)czenia .................................................................................................................................44 Z(cid:239)(cid:200)cza ISP ...................................................................................................................................46 Program AVRDUDE .....................................................................................................................48 Konfigurowanie plików makefile ...................................................................................................51 Pami(cid:218)(cid:202) Flash ...............................................................................................................................53 Rozwi(cid:200)zywanie problemów .........................................................................................................53 3. Wyj(cid:258)cia cyfrowe .............................................................................................................. 55 blinkLED wersja 2.0 ...........................................................................................................................56 Struktura kodu j(cid:218)zyka C dla uk(cid:239)adu AVR .......................................................................................57 Rejestry sprz(cid:218)towe ......................................................................................................................57 Podsumowanie programu blinkLED .............................................................................................60 Zabawka (cid:258)wietlna ..............................................................................................................................61 Budowanie uk(cid:239)adu .......................................................................................................................61 (cid:146)adne wzorki: kod zabawki ..........................................................................................................65 Eksperymentuj! ...........................................................................................................................67 4. Manipulacje na bitach ..................................................................................................... 69 Praca z kodem: oczy Cylonów ...........................................................................................................70 Manipulowanie bitami a oczy Cylonów ...............................................................................................71 Przesuwanie bitów ......................................................................................................................71 Zaawansowane manipulowanie bitami: co(cid:258) wi(cid:218)cej ni(cid:285) oczy Cylonów .................................................74 W(cid:239)(cid:200)czanie bitów operatorem OR ..................................................................................................76 Prze(cid:239)(cid:200)czanie bitów operatorem XOR ............................................................................................78 Wy(cid:239)(cid:200)czanie bitów operatorami AND i NOT ...................................................................................79 Popisy ...............................................................................................................................................81 Podsumowanie ..................................................................................................................................83 5. Szeregowe wej(cid:258)cie i wyj(cid:258)cie .......................................................................................... 85 Komunikacja szeregowa ....................................................................................................................85 Implementowanie komunikacji szeregowej w uk(cid:239)adzie AVR: projekt p(cid:218)tli zwrotnej ..............................88 Konfigurowanie: uk(cid:239)ad AVR .........................................................................................................88 Konfigurowanie: komputer ...........................................................................................................90 Konfigurowanie: adapter USB-port szeregowy .............................................................................90 Sprawdzanie ca(cid:239)o(cid:258)ci: testowanie p(cid:218)tli zwrotnej ............................................................................91 Usuwanie problemów z po(cid:239)(cid:200)czeniami szeregowymi .....................................................................94 4 Spis tre(cid:258)ci Kup książkęPoleć książkę Konfigurowanie modu(cid:239)u USART: szczegó(cid:239)y ........................................................................................94 Organy z uk(cid:239)adu AVR .........................................................................................................................99 Muzyka z mikrokontrolera ..........................................................................................................101 Biblioteka muzyczna ..................................................................................................................103 Kod ...........................................................................................................................................104 Superdodatki .............................................................................................................................106 Podsumowanie ................................................................................................................................108 6. Wej(cid:258)cia cyfrowe ............................................................................................................ 109 Przyciski, prze(cid:239)(cid:200)czniki itd. ................................................................................................................109 Konfigurowanie wej(cid:258)(cid:202): rejestry DDR, PORT i PIN .......................................................................111 Interpretowanie naci(cid:258)ni(cid:218)(cid:202) przycisków ........................................................................................113 Zmiana stanu ...................................................................................................................................115 Eliminowanie odbi(cid:202) ..........................................................................................................................116 Przyk(cid:239)ad kodu obs(cid:239)uguj(cid:200)cego odbicia ..............................................................................................118 Pozytywka .......................................................................................................................................120 Kod programu ...........................................................................................................................120 Przycisk na szefa .............................................................................................................................122 Skrypty dla komputera stacjonarnego ........................................................................................123 Rozszerzenia .............................................................................................................................126 7. Konwerter analogowo-cyfrowy — cz(cid:218)(cid:258)(cid:202) 1. ................................................................. 129 Przegl(cid:200)d elementów uk(cid:239)adu AVR ......................................................................................................130 Miernik (cid:258)wiat(cid:239)a .................................................................................................................................133 Schemat ....................................................................................................................................133 Kod programu ...........................................................................................................................137 Inicjacja konwertera AC .............................................................................................................140 Rozszerzenia .............................................................................................................................141 Powolny oscyloskop ........................................................................................................................141 Kod dla uk(cid:239)adu AVR ...................................................................................................................143 Kod dla komputera ....................................................................................................................145 Podobie(cid:241)stwa ...........................................................................................................................147 O(cid:258)wietlenie nocne i multiplekser ......................................................................................................147 Multiplekser ...............................................................................................................................147 Konfigurowanie bitów multipleksera ...........................................................................................148 Schemat ....................................................................................................................................149 Kod ...........................................................................................................................................150 Podsumowanie ................................................................................................................................151 Spis tre(cid:258)ci 5 Kup książkęPoleć książkę Cz(cid:218)(cid:258)(cid:202) II (cid:165)rednio zaawansowana 8. Przerwania sprz(cid:218)towe ................................................................................................... 155 Przerwania zewn(cid:218)trzne: przyk(cid:239)ady u(cid:285)ycia przycisku ..........................................................................157 Przyk(cid:239)ad z zewn(cid:218)trznym przerwaniem INT0 ...............................................................................158 Przyk(cid:239)ad przerwania wywo(cid:239)ywanego zmian(cid:200) stanu pinu .............................................................163 Czujnik pojemno(cid:258)ciowy ...................................................................................................................165 Czujnik ......................................................................................................................................167 Kod programu ...........................................................................................................................169 Zmienne ulotne i globalne ..........................................................................................................171 Debugowanie uk(cid:239)adu ........................................................................................................................173 9. Wprowadzenie do sprz(cid:218)towego zegara/licznika ........................................................... 175 Zegary i liczniki — do czego maj(cid:200) s(cid:239)u(cid:285)y(cid:202)? .......................................................................................175 Sprawd(cid:283) swój refleks .......................................................................................................................177 U(cid:285)ycie zegara numer 0 do poprawienia 8-bitowych organów ...........................................................182 Radio AM ........................................................................................................................................185 Schemat ....................................................................................................................................187 Szybko(cid:258)(cid:202) procesora ..................................................................................................................187 Radio AM: kod programu ...........................................................................................................191 Podsumowanie ................................................................................................................................195 10. Modulacja szeroko(cid:258)ci impulsu ...................................................................................... 197 Jasne i ciemne diody: technika PWM ...............................................................................................198 Si(cid:239)owe rozwi(cid:200)zanie PWM .................................................................................................................200 Modulowanie impulsów za pomoc(cid:200) liczników ..................................................................................201 Inicjowanie liczników dla trybu PWM .........................................................................................203 Modulowanie szeroko(cid:258)ci impulsu na dowolnym pinie ......................................................................206 Przyk(cid:239)ad modulacji impulsu na dowolnym pinie .........................................................................206 Zako(cid:241)czenie: inne mo(cid:285)liwo(cid:258)ci dla PWM i listy kontrolne liczników ....................................................208 11. Sterowanie serwomotorami .......................................................................................... 213 Serwomotory ...................................................................................................................................214 Sekretne (cid:285)ycie serwomotorów ...................................................................................................215 Schemat ....................................................................................................................................216 Kod programu ...........................................................................................................................217 Zegar s(cid:239)oneczny z serwomotorem ....................................................................................................220 Budowanie zegara .....................................................................................................................221 Przygotuj lasery! ........................................................................................................................223 Kod programu ...........................................................................................................................225 Kalibracja serwomotoru zegara s(cid:239)onecznego .............................................................................232 6 Spis tre(cid:258)ci Kup książkęPoleć książkę 12. Konwerter analogowo-cyfrowy — cz(cid:218)(cid:258)(cid:202) 2. ................................................................. 237 Woltomierz ......................................................................................................................................238 Schemat ....................................................................................................................................239 Kod programu ...........................................................................................................................242 Wykrywacz kroków ..........................................................................................................................246 Schemat ....................................................................................................................................246 Teoria ........................................................................................................................................251 Wyk(cid:239)adniczo wa(cid:285)ona (cid:258)rednia krocz(cid:200)ca ......................................................................................252 Kod programu ...........................................................................................................................255 Podsumowanie ................................................................................................................................258 Cz(cid:218)(cid:258)(cid:202) III Tematy zaawansowane 13. Zaawansowane sztuczki z PWM ................................................................................... 263 Bezpo(cid:258)rednia synteza cyfrowa .........................................................................................................264 Tworzenie fali sinusoidalnej .............................................................................................................267 Nast(cid:218)pny krok: miksowanie i g(cid:239)o(cid:258)no(cid:258)(cid:202) ............................................................................................269 Miksowanie ...............................................................................................................................271 Dynamiczna kontrola g(cid:239)o(cid:258)no(cid:258)ci .................................................................................................273 Odpytywanie portu USART ...............................................................................................................276 Obwiednia ADSR .............................................................................................................................276 Pliki uzupe(cid:239)niaj(cid:200)ce ............................................................................................................................277 14. Prze(cid:239)(cid:200)czniki .................................................................................................................... 279 Sterowanie du(cid:285)ymi pr(cid:200)dami: prze(cid:239)(cid:200)czniki .........................................................................................280 Tranzystory bipolarne ................................................................................................................281 Tranzystory polowe (MOSFET) ..................................................................................................283 Polowe tranzystory mocy ..........................................................................................................284 Przeka(cid:283)niki ................................................................................................................................285 Triaki i przeka(cid:283)niki statyczne ......................................................................................................286 Prze(cid:239)(cid:200)czniki: podsumowanie ......................................................................................................287 Silniki pr(cid:200)du sta(cid:239)ego .........................................................................................................................288 15. Zaawansowane sterowanie silnikami ........................................................................... 295 Cofanie: mostki typu H .....................................................................................................................296 Program: zakr(cid:218)(cid:202)my sobie mostkiem ................................................................................................299 Mostek H tylko dla ekspertów ....................................................................................................301 Mostek H i modulacja szeroko(cid:258)ci impulsu ........................................................................................302 Tryb nap(cid:218)du znak-modu(cid:239) ...........................................................................................................303 Tryb nap(cid:218)du blokada-antyfaza ...................................................................................................304 Porównanie trybów nap(cid:218)du .......................................................................................................305 Silniki krokowe .................................................................................................................................307 Spis tre(cid:258)ci 7 Kup książkęPoleć książkę Rodzaje silników krokowych ............................................................................................................308 Pe(cid:239)ne kroki i pó(cid:239)kroki ........................................................................................................................308 Identyfikowanie przewodów silnika krokowego ................................................................................311 Zbyt wiele przewodów! ..............................................................................................................312 Podwójny mostek H: uk(cid:239)ad SN754410 .............................................................................................312 Kod programu ..................................................................................................................................315 Kontrola przyspiesze(cid:241) ......................................................................................................................318 Mikrokroki ........................................................................................................................................320 16. SPI .................................................................................................................................. 325 Jak dzia(cid:239)a protokó(cid:239) SPI? ...................................................................................................................326 Przyk(cid:239)ad wymiany bitów ............................................................................................................328 Rejestry przesuwaj(cid:200)ce ...............................................................................................................328 Zewn(cid:218)trzna pami(cid:218)(cid:202) EEPROM ...........................................................................................................331 Pami(cid:218)(cid:202) zewn(cid:218)trzna ....................................................................................................................332 Po(cid:239)(cid:200)czenia elektryczne przyk(cid:239)adu z protoko(cid:239)em SPI ..........................................................................334 Kod programu demonstracyjnego ....................................................................................................335 Plik nag(cid:239)ówkowy biblioteki .........................................................................................................337 Kod biblioteki obs(cid:239)uguj(cid:200)cej pami(cid:218)ci EEPROM SPI ......................................................................339 Funkcja initSPI() ........................................................................................................................341 Funkcja SPI_tradeByte() ............................................................................................................342 Funkcje pomocnicze ..................................................................................................................343 Podsumowanie ................................................................................................................................344 17. I2C .................................................................................................................................. 347 Jak dzia(cid:239)a protokó(cid:239) I2C? ...................................................................................................................348 Po(cid:239)(cid:200)czenia w przyk(cid:239)adowym projekcie .............................................................................................352 Biblioteka obs(cid:239)ugi magistrali I2C ......................................................................................................353 Termometr z interfejsem I2C ............................................................................................................356 Protoko(cid:239)owanie danych z u(cid:285)yciem protoko(cid:239)ów I2C i SPI ...................................................................359 Wska(cid:283)niki w pami(cid:218)ci EEPROM ..................................................................................................363 Menu tworzone przez port szeregowy ........................................................................................363 P(cid:218)tla g(cid:239)ówna termometru protoko(cid:239)uj(cid:200)cego .................................................................................364 18. U(cid:285)ywanie pami(cid:218)ci programu ......................................................................................... 367 Wykorzystanie pami(cid:218)ci programu ....................................................................................................367 Adresy pami(cid:218)ci .........................................................................................................................368 Operator adresu: ....................................................................................................................369 Wska(cid:283)niki ........................................................................................................................................372 Wska(cid:283)niki w skrócie ..................................................................................................................372 Wska(cid:283)niki jak parametry funkcji .................................................................................................376 8 Spis tre(cid:258)ci Kup książkęPoleć książkę Podsumowanie .........................................................................................................................379 Opcjonalnie: dereferencje wska(cid:283)ników .......................................................................................380 Gadaj(cid:200)cy woltomierz ........................................................................................................................381 Struktury danych w pami(cid:218)ci programu i plik nag(cid:239)ówkowy ..........................................................382 Odtwarzanie d(cid:283)wi(cid:218)ku i odczyt warto(cid:258)ci napi(cid:218)cia: plik .c .............................................................386 Generowanie danych audio ..............................................................................................................391 Ró(cid:285)nicowa modulacja kodowo-impulsowa ................................................................................391 Kodowanie d(cid:283)wi(cid:218)ku metod(cid:200) dwubitowego DPCM ......................................................................391 Kodowanie DPCM: program wave2DPCM.py .............................................................................394 19. EEPROM ......................................................................................................................... 399 U(cid:285)ywanie pami(cid:218)ci EEPROM .............................................................................................................400 Zapisywanie danych w pami(cid:218)ci .................................................................................................400 Odczytywanie danych z pami(cid:218)ci ................................................................................................405 Zapisywanie i odczytywanie pami(cid:218)ci EEPROM ...........................................................................407 Organizacja danych w pami(cid:218)ci EEPROM ...................................................................................408 Projekt: szyfrator kodu Vigenère’a ....................................................................................................412 20. Wnioski, po(cid:285)egnanie i zach(cid:218)ta ...................................................................................... 421 Uk(cid:239)ad AVR: brakuj(cid:200)ce rozdzia(cid:239)y ........................................................................................................421 Licznik watchdog .......................................................................................................................421 Oszcz(cid:218)dzanie energii .................................................................................................................422 Zewn(cid:218)trzne oscylatory i inne (cid:283)ród(cid:239)a taktowania ..........................................................................422 Programy rozruchowe ...............................................................................................................422 Komparator analogowy .............................................................................................................423 Debugowanie ...................................................................................................................................423 Od(cid:239)ó(cid:285) ksi(cid:200)(cid:285)k(cid:218) i twórz! ......................................................................................................................423 Skorowidz ............................................................................................................................ 425 Spis tre(cid:258)ci 9 Kup książkęPoleć książkę 10 Spis tre(cid:258)ci Kup książkęPoleć książkę szeroko(cid:258)ci impulsu 10 Modulacja Przygaszanie diod i „analogowe” wyj(cid:258)cie Dot(cid:200)d w naszych programach wszystko by(cid:239)o tylko w(cid:239)(cid:200)czone albo wy(cid:239)(cid:200)czone, czyli ca(cid:239)kowicie cyfrowe. Diody by(cid:239)y albo w(cid:239)(cid:200)czone, albo zgaszone. Membrana g(cid:239)o(cid:258)nika by(cid:239)a albo w pe(cid:239)ni wci(cid:200)gni(cid:218)ta, albo ca(cid:239)kowicie wypchni(cid:218)ta. Takie przepychanie elektronów w t(cid:218) lub tamt(cid:200) stron(cid:218) nie by(cid:239)o zbyt finezyjne. Samo w(cid:239)(cid:200)czanie i wy(cid:239)(cid:200)czanie mo(cid:285)e sprawia(cid:202) frajd(cid:218), ale czasami, zamiast b(cid:239)yska(cid:202) diodami, woleliby(cid:258)my je powoli wygasi(cid:202) albo urucho- mi(cid:202) silnik z po(cid:239)ow(cid:200) pr(cid:218)dko(cid:258)ci. Mo(cid:285)na te(cid:285) pokusi(cid:202) si(cid:218) o wygenerowanie faktycznych fal d(cid:283)wi(cid:218)kowych, a nie tylko fali prostok(cid:200)tnej, i dodatkowo zapewni(cid:202) im regulacj(cid:218) g(cid:239)o(cid:258)no(cid:258)ci. Aby osi(cid:200)gn(cid:200)(cid:202) takie efekty, musimy znale(cid:283)(cid:202) sposób generowania po(cid:258)rednich warto(cid:258)ci napi(cid:218)cia za pomoc(cid:200) jedynie logicznych sygna(cid:239)ów uk(cid:239)adu AVR. Jedn(cid:200) z najcz(cid:218)(cid:258)ciej stosowanych metod jest modulacja szeroko- (cid:258)ci impulsu (pulse width modulation — PWM). W skrócie polega ona na bardzo szybkim w(cid:239)(cid:200)czaniu i wy(cid:239)(cid:200)- czaniu wyj(cid:258)cia logicznego, na tyle szybkim, (cid:285)eby element pod(cid:239)(cid:200)czony do tego wyj(cid:258)cia nie zd(cid:200)(cid:285)y(cid:239) w pe(cid:239)ni zareagowa(cid:202) na zmian(cid:218). W efekcie odczuwalna warto(cid:258)(cid:202) napi(cid:218)cia na tym elemencie jest proporcjonalna do (cid:258)redniego procenta czasu, w jakim wej(cid:258)cie uk(cid:239)adu AVR by(cid:239)o w stanie wysokim. (Na razie mo(cid:285)e to brzmie(cid:202) bardzo dziwnie, ale do ko(cid:241)ca rozdzia(cid:239)u na pewno wszystko si(cid:218) wyja(cid:258)ni). W rozdziale 13. wykorzystamy technik(cid:218) PWM do odtwarzania d(cid:283)wi(cid:218)ków na syntezatorze. W rozdzia(cid:239)ach 14. i 15. u(cid:285)yjemy jej do sterowania silnikiem z ró(cid:285)nymi pr(cid:218)dko(cid:258)ciami, a nawet do poruszania nim w odwrotnym kierunku. I w ko(cid:241)cu, w rozdziale 18., technika PWM pozwoli na zbudowanie gadaj(cid:200)cego woltomierza, który b(cid:218)dzie podawa(cid:239) warto(cid:258)(cid:202) napi(cid:218)cia Twoimi s(cid:239)owami. Jak wida(cid:202), w kolejnych rozdzia(cid:239)ach do(cid:258)(cid:202) cz(cid:218)sto b(cid:218)dzie- my korzystali z modulacji szeroko(cid:258)ci impulsu, dlatego prosz(cid:218) mi wybaczy(cid:202), (cid:285)e tutaj zajmiemy si(cid:218) prostym pulsowaniem diod LED. Technika PWM jest tak powszechn(cid:200) metod(cid:200) tworzenia analogowego napi(cid:218)cia przez cyfrowe urz(cid:200)dzenia, (cid:285)e niemal wszystkie mikrokontrolery, w tym i uk(cid:239)ady AVR, maj(cid:200) dedykowane elementy peryferyjne, które zaj- muj(cid:200) si(cid:218) takim szybkim prze(cid:239)(cid:200)czaniem stanu wyj(cid:258)cia. Zdecydowanie zalecam korzystanie z tej mo(cid:285)liwo(cid:258)ci. W tym rozdziale przyjrzymy si(cid:218) te(cid:285) ca(cid:239)kowicie manualnej procedurze generowania modulowanych impulsów, która pozwoli lepiej pozna(cid:202) zasady tej techniki. Dodatkowo zaprezentuj(cid:218) te(cid:285) metod(cid:218) wykorzystuj(cid:200)c(cid:200) modu(cid:239) zegara i licznika w po(cid:239)(cid:200)czeniu z przerwaniami, która pozwala na wygenerowanie modulowanych impulsów na dowolnym wyj(cid:258)ciu mikrokontrolera. Przejd(cid:283)my zatem do rzeczy. 197 Kup książkęPoleć książkę Czego potrzebujesz? Oprócz zestawu podstawowego b(cid:218)dziemy potrzebowa(cid:202): • diod LED wraz z opornikami ograniczaj(cid:200)cymi, których u(cid:285)ywali(cid:258)my w poprzednich rozdzia(cid:239)ach, • adaptera USB-port szeregowy. Jasne i ciemne diody: technika PWM PWM jest chyba naj(cid:239)atwiejsz(cid:200) do zaimplementowania technik(cid:200) pozwalaj(cid:200)c(cid:200) na uzyskanie analogowego efektu cz(cid:218)(cid:258)ciowego w(cid:239)(cid:200)czenia. Jak wspomina(cid:239)em wcze(cid:258)niej, musimy na tyle szybko prze(cid:239)(cid:200)cza(cid:202) wyj(cid:258)cie cyfrowe mi(cid:218)dzy stanem wysokim i niskim, (cid:285)eby pod(cid:239)(cid:200)czone urz(cid:200)dzenie nie mog(cid:239)o odpowiednio zareagowa(cid:202) na pojedyn- cze impulsy i w zwi(cid:200)zku z tym otrzymywa(cid:239)o tylko (cid:258)redni(cid:200) warto(cid:258)(cid:202) napi(cid:218)cia. Mo(cid:285)emy wtedy ci(cid:200)gle powta- rza(cid:202) takie impulsy, zmieniaj(cid:200)c warto(cid:258)(cid:202) (cid:258)redni(cid:200) napi(cid:218)cia przez dopasowywanie procenta czasu, w którym wyj(cid:258)cie by(cid:239)o w stanie wysokim. Efekt takich manipulacji mo(cid:285)na zobaczy(cid:202) na rysunku 10.1. Rysunek 10.1. Wykresy oscyloskopowe techniki PWM Na rysunku 10.1 górny (cid:258)lad pochodzi bezpo(cid:258)rednio z wyj(cid:258)cia uk(cid:239)adu AVR. Jak wida(cid:202), procent czasu, w jakim wyj(cid:258)cie utrzymywane jest w stanie wysokim, zmienia si(cid:218) od niskiego do wysokiego, pó(cid:283)niej znowu wraca do niskiego. Na dolnym wykresie wida(cid:202) wynik przes(cid:239)ania tych impulsów do filtra sk(cid:239)adaj(cid:200)cego si(cid:218) z opornika i kondensatora, podobnego do tego, z którego b(cid:218)dziemy korzysta(cid:202) w rozdziale 13. Taki filtr ma d(cid:239)ugi czas reakcji, dzi(cid:218)ki czemu modulowane d(cid:239)ugo(cid:258)ci impulsów przek(cid:239)adaj(cid:200) si(cid:218) na u(cid:258)rednion(cid:200), analogow(cid:200) warto(cid:258)(cid:202) napi(cid:218)cia. 198 10. Modulacja szeroko(cid:258)ci impulsu Kup książkęPoleć książkę Gdy modulowany sygna(cid:239) wi(cid:218)kszo(cid:258)(cid:202) czasu sp(cid:218)dza na napi(cid:218)ciu 5 V, warto(cid:258)(cid:202) analogowego napi(cid:218)cia jest wy(cid:285)sza i vice versa. Oczywi(cid:258)cie sygna(cid:239) modulowanych impulsów jest ca(cid:239)kowicie cyfrowy — mo(cid:285)e by(cid:202) jedynie wysoki lub niski — ale wynikowe (filtrowane), u(cid:258)rednione napi(cid:218)cie mo(cid:285)e przyjmowa(cid:202) dowoln(cid:200) warto(cid:258)(cid:202) pomi(cid:218)dzy tymi dwoma stanami. By u(cid:285)y(cid:202) techniki PWM, musimy zdefiniowa(cid:202) dwa wa(cid:285)ne parametry. Procent czasu, jaki w cyklu sp(cid:218)dzimy w stanie w(cid:239)(cid:200)czonym, nazywany jest wspó(cid:239)czynnikiem wype(cid:239)nienia (duty cycle). Z kolei cz(cid:218)stotliwo(cid:258)(cid:202), z jak(cid:200) powtarzamy pojedynczy cykl, nazywana jest cz(cid:218)stotliwo(cid:258)ci(cid:200) PWM. Najcz(cid:218)(cid:258)ciej regulowa(cid:202) b(cid:218)dziemy jednak wspó(cid:239)czynnik wype(cid:239)nienia. Oznacza to, (cid:285)e musimy cz(cid:218)sto zmienia(cid:202) jego warto(cid:258)(cid:202), by(cid:202) mo(cid:285)e nawet w spo- sób ci(cid:200)g(cid:239)y, aby w efekcie otrzyma(cid:202) na wyj(cid:258)ciu „analogowe” napi(cid:218)cie, takie jak na rysunku 10.1. W wi(cid:218)kszo(cid:258)ci przypadków cz(cid:218)stotliwo(cid:258)(cid:202) PWM wybiera si(cid:218) tylko raz, zaraz na pocz(cid:200)tku pracy uk(cid:239)adu. Jak ju(cid:285) mówi(cid:239)em wcze(cid:258)niej, wa(cid:285)ne jest, (cid:285)eby ta cz(cid:218)stotliwo(cid:258)(cid:202) by(cid:239)a na tyle wysoka, by sterowany system nie mia(cid:239) czasu odpowiednio szybko zareagowa(cid:202) na poszczególne impulsy i musia(cid:239) pracowa(cid:202) z ich u(cid:258)rednion(cid:200) war- to(cid:258)ci(cid:200). O jakiej cz(cid:218)stotliwo(cid:258)ci zatem mówimy? To zale(cid:285)y od konkretnego rozwi(cid:200)zania i tolerancji uk(cid:239)adu na t(cid:218)tnienia, czyli niewielkie pozosta(cid:239)o(cid:258)ci impulsów moduluj(cid:200)cych, które z pewno(cid:258)ci(cid:200) przedostan(cid:200) si(cid:218) przez filtr. Na rysunku 10.1 wybra(cid:239)em cz(cid:218)stotliwo(cid:258)(cid:202) PWM na poziomie zbli(cid:285)onym do cz(cid:218)stotliwo(cid:258)ci fali wyj(cid:258)ciowej, dlatego na wykresie sygna(cid:239)u wyj(cid:258)ciowego wida(cid:202) ca(cid:239)kiem sporo takich t(cid:218)tnie(cid:241). Je(cid:285)eli cz(cid:218)stotliwo(cid:258)(cid:202) PWM by(cid:239)aby znacznie wi(cid:218)ksza, t(cid:218)tnienia zmniejszy(cid:239)yby si(cid:218) znacznie (ale nie da(cid:239)oby si(cid:218) wtedy przygotowa(cid:202) tak (cid:239)adnego przyk(cid:239)adu). Cz(cid:218)stotliwo(cid:258)(cid:202) PWM wymagana do uzyskania zak(cid:239)adanej wielko(cid:258)ci t(cid:218)tnie(cid:241) zale(cid:285)y od tego, jak wolno dane urz(cid:200)- dzenie lub filtr reaguj(cid:200) na zmiany sygna(cid:239)u wej(cid:258)ciowego. Przyk(cid:239)adowo silniki zwykle bardzo powoli dopaso- wuj(cid:200) swoj(cid:200) pr(cid:218)dko(cid:258)(cid:202), co wynika z ich du(cid:285)ej bezw(cid:239)adno(cid:258)ci ramienia, ko(cid:239)a lub innego nap(cid:218)dzanego przez nie elementu. Dla wi(cid:218)kszo(cid:258)ci silników ca(cid:239)kowicie wystarczaj(cid:200)ce by(cid:239)yby cz(cid:218)stotliwo(cid:258)ci PWM na poziomie od 50 do 500 Hz. Mówi(cid:218) by(cid:239)yby, poniewa(cid:285) s(cid:200) to cz(cid:218)stotliwo(cid:258)ci s(cid:239)yszalne dla cz(cid:239)owieka, a wi(cid:218)kszo(cid:258)(cid:202) ludzi woli jednak, gdy silniki nie „(cid:258)piewaj(cid:200)”. Wiele nowoczesnych uk(cid:239)adów sterowania silnikami wykorzystuje cz(cid:218)stotliwo(cid:258)ci PWM o warto(cid:258)ci lekko przekra- czaj(cid:200)cej 20 kHz (to mniej wi(cid:218)cej maksymalna cz(cid:218)stotliwo(cid:258)(cid:202), jak(cid:200) mo(cid:285)e us(cid:239)ysze(cid:202) cz(cid:239)owiek), dzi(cid:218)ki czemu unika si(cid:218) dr(cid:285)e(cid:241) wywo(cid:239)ywanych w uzwojeniach. Od tej regu(cid:239)y istniej(cid:200) te(cid:285) pewne wyj(cid:200)tki. Wi(cid:218)kszo(cid:258)(cid:202) silników nap(cid:218)dzaj(cid:200)cych wagony metra zasilana jest za pomoc(cid:200) s(cid:239)yszalnych cz(cid:218)stotliwo(cid:258)ci PWM. To dlatego dosko- nale s(cid:239)ycha(cid:202) proces rozp(cid:218)dzania i hamowania silników. Po prostu buduj(cid:200)cy je in(cid:285)ynierowie bardziej kon- centrowali si(cid:218) na wydajno(cid:258)ci tych uk(cid:239)adów, a mniejsz(cid:200) wag(cid:218) przywi(cid:200)zywali do generowanych d(cid:283)wi(cid:218)ków. Tworzenie sygna(cid:239)ów audio odpowiednich dla ludzkich uszu, czym b(cid:218)dziemy si(cid:218) zajmowa(cid:202) w rozdziale 13., wymaga znacznie wy(cid:285)szych cz(cid:218)stotliwo(cid:258)ci PWM. Potrzebna jest cz(cid:218)stotliwo(cid:258)(cid:202) przynajmniej dwukrotnie wi(cid:218)ksza od najwy(cid:285)szej cz(cid:218)stotliwo(cid:258)ci, jak(cid:200) chcemy odwzorowa(cid:202), a to oznacza, (cid:285)e do modulowania musimy u(cid:285)y(cid:202) cz(cid:218)- stotliwo(cid:258)ci przynajmniej 40 kHz. (W naszym przyk(cid:239)adzie z 8-bitowym sygna(cid:239)em audio i wbudowanym zegarem procesora o warto(cid:258)ci 8 MHz zostaniemy ograniczeni do 32,5 kHz, ale i to powinno wystarczy(cid:202)). Oko, w przeciwie(cid:241)stwie do ludzkiego ucha, mo(cid:285)emy zaliczy(cid:202) do elementów reaguj(cid:200)cych powoli. Widzieli(cid:258)my to ju(cid:285) w przyk(cid:239)adzie wykorzystuj(cid:200)cym bezw(cid:239)adno(cid:258)(cid:202) wzroku, w którym generowali(cid:258)my impulsy o d(cid:239)ugo(cid:258)ci 2 milisekund (500 Hz). Okazuje si(cid:218), (cid:285)e aby unikn(cid:200)(cid:202) migotania diod, wcale nie musimy u(cid:285)ywa(cid:202) a(cid:285) tak wyso- kich cz(cid:218)stotliwo(cid:258)ci. W moim przypadku okres o d(cid:239)ugo(cid:258)ci 18 milisekund (nieco poni(cid:285)ej 60 Hz) ca(cid:239)kowicie wystarcza(cid:239) do wyeliminowania migotania. Przypominam, (cid:285)e mówi(cid:218) tu o czasie reakcji ludzkiego oka, a nie diod LED, które mog(cid:200) si(cid:218) w(cid:239)(cid:200)cza(cid:202) i wy(cid:239)(cid:200)cza(cid:202) z cz(cid:218)stotliwo(cid:258)ci(cid:200) dochodz(cid:200)c(cid:200) do megaherców, cho(cid:202) tego nie zauwa(cid:285)ymy. W tym przypadku ludzki system optyczny jest tym powolnym mechanizmem, którego u(cid:285)yjemy do u(cid:258)redniania warto(cid:258)ci impulsów. Jasne i ciemne diody: technika PWM 199 Kup książkęPoleć książkę Si(cid:239)owe rozwi(cid:200)zanie PWM Nie musisz mi wierzy(cid:202) na s(cid:239)owo. Na listingu 10.1 zapisa(cid:239)em w pe(cid:239)ni konfigurowaln(cid:200), manualn(cid:200) procedur(cid:218) gene- rowania modulowanych impulsów. Zapisz w mikrokontrolerze program pwm.c i sprawd(cid:283), gdzie le(cid:285)(cid:200) Twoje granice mo(cid:285)liwo(cid:258)ci widzenia migotania. Wystarczy, (cid:285)e zmienisz warto(cid:258)(cid:202) opó(cid:283)nienia zdefiniowan(cid:200) na pocz(cid:200)tku programu. Potem przyjrzymy si(cid:218) p(cid:218)tli zdarze(cid:241) i wykonywanym przez ni(cid:200) dzia(cid:239)aniom. Listing 10.1. Kod programu pwm.c /* Prosty przyk(cid:225)ad modulacji impulsu */ // ------- Preambu(cid:225)a -------- // #include avr/io.h #include util/delay.h #include pinDefines.h /* Definicje pinów, portów itp. */ /* Funkcje marnuj(cid:261)ce czas */ #define LED_DELAY 20 /* mikrosekundy */ void pwmAllPins(uint8_t brightness) { uint8_t i; LED_PORT = 0xff; for (i = 0; i 255; i++) { if (i = brightness) { LED_PORT = 0; } _delay_us(LED_DELAY); } } /* w(cid:225)(cid:261)czenie */ /* po odczekaniu do(cid:286)(cid:252) d(cid:225)ugiego czasu */ /* wy(cid:225)(cid:261)czenie */ int main(void) { uint8_t brightness = 0; int8_t direction = 1; // -------- Inicjacja --------- // // Inicjowanie wszystkich diod LED_DDR = 0xff; // ------ P(cid:266)tla zdarze(cid:276) ------ // while (1) { // Rozja(cid:286)nianie i przygaszanie if (brightness == 0) { direction = 1; } if (brightness == 255) { direction = -1; } brightness += direction; pwmAllPins(brightness); } return (0); } /* Koniec p(cid:266)tli zdarze(cid:276) */ /* ta instrukcja nie zostanie wykonana */ 200 10. Modulacja szeroko(cid:258)ci impulsu Kup książkęPoleć książkę Powy(cid:285)szy kod zosta(cid:239) podzielony na dwie cz(cid:218)(cid:258)ci. Funkcja pwmAllPins() zajmuje si(cid:218) implementacj(cid:200) modulo- wania impulsu, a pozosta(cid:239)y kod w p(cid:218)tli zwi(cid:218)ksza i zmniejsza warto(cid:258)(cid:202) zmiennej brightness. Wywo(cid:239)ywanie funkcji pwmAllPins() ze zmieniaj(cid:200)c(cid:200) si(cid:218) warto(cid:258)ci(cid:200) zmiennej brightness powoduje rozja(cid:258)nianie i wyga- szanie diod LED. W funkcji pwmAllPins() mamy p(cid:218)tl(cid:218) sterowan(cid:200) zmienn(cid:200) i, która wykonuje dok(cid:239)adnie 256 iteracji. Wewn(cid:200)trz tej p(cid:218)tli porównujemy warto(cid:258)(cid:202) zmiennej i z warto(cid:258)ci(cid:200) parametru brightness i utrzymujemy diody w stanie w(cid:239)(cid:200)czonym, dopóki i jest mniejsze. W efekcie diody w(cid:239)(cid:200)czone na pocz(cid:200)tku ka(cid:285)dego zestawu 256 iteracji b(cid:218)d(cid:200) (cid:258)wieci(cid:239)y, a(cid:285) p(cid:218)tla wykona brightness iteracji. Oznacza to, (cid:285)e dla wi(cid:218)kszych warto(cid:258)ci parametru diody b(cid:218)d(cid:200) zapalone przez d(cid:239)u(cid:285)sz(cid:200) cz(cid:218)(cid:258)(cid:202) ka(cid:285)dego z tych cykli. Oto mamy modulacj(cid:218) szeroko(cid:258)ci impulsu! (Pami(cid:218)taj jednak, (cid:285)e na potrzeby rozja(cid:258)niania i przyciemniania diod zu(cid:285)ywamy ca(cid:239)(cid:200) moc obliczeniow(cid:200) procesora). Dodatkowo mo(cid:285)emy te(cid:285) modyfikowa(cid:202) czas opó(cid:283)nienia ka(cid:285)dej iteracji i w ten sposób sprawdzi(cid:202), w którym momencie zauwa(cid:285)ymy migotanie diod. (Jako zadanie domowe mo(cid:285)esz pod(cid:239)(cid:200)czy(cid:202) do uk(cid:239)adu potencjometr i regulowa(cid:202) nim czas opó(cid:283)nienia iteracji p(cid:218)tli). Do(cid:258)(cid:202) szybko powinno Ci si(cid:218) uda(cid:202) ustali(cid:202) minimaln(cid:200) cz(cid:218)sto- tliwo(cid:258)(cid:202), przy której nie widzisz jeszcze migotania. Zauwa(cid:285), (cid:285)e poruszaj(cid:200)c g(cid:239)ow(cid:200), ponownie zobaczysz efekty zwi(cid:200)zane z bezw(cid:239)adno(cid:258)ci(cid:200) wzroku. Sprawdzaj(cid:200)c ró(cid:285)ne warto(cid:258)ci opó(cid:283)nienia, pami(cid:218)taj, (cid:285)e w ka(cid:285)dym cyklu wykonujemy 256 kroków, co w po(cid:239)(cid:200)- czeniu z opó(cid:283)nieniem 20 mikrosekund na iteracj(cid:218) sprawia, (cid:285)e ka(cid:285)dy cykl b(cid:218)dzie trwa(cid:239) 5120 mikrosekund, czyli 5,12 milisekundy. W ka(cid:285)dej sekundzie mie(cid:258)ci si(cid:218) 1000 milisekund, a zatem nasza cz(cid:218)stotliwo(cid:258)(cid:202) PWM wynosi 1000/5,12 czyli 195 Hz. Kod znajduj(cid:200)cy si(cid:218) w funkcji main() ustala warto(cid:258)(cid:202) zmiennej direction (liczba ca(cid:239)kowita ze znakiem), która umo(cid:285)liwia zwi(cid:218)kszanie i zmniejszanie aktualnej jasno(cid:258)ci diod. Gdy w ko(cid:241)cu osi(cid:200)gni(cid:218)ta zostanie maksy- malna lub minimalna jasno(cid:258)(cid:202), nast(cid:218)puje zmiana znaku warto(cid:258)ci zmiennej direction. W efekcie otrzymu- jemy naprzemiennie rozja(cid:258)niaj(cid:200)ce i przyciemniaj(cid:200)ce si(cid:218) diody. Przygl(cid:200)daj(cid:200)c si(cid:218) efektom pracy tego programu, mo(cid:285)esz zauwa(cid:285)y(cid:202), (cid:285)e ludzkie oko nie reaguje jednakowo na sta(cid:239)e zmiany jasno(cid:258)ci. W naszym przyk(cid:239)adzie diody sprawiaj(cid:200) wra(cid:285)enie, jakby szybciej przechodzi(cid:239)y przez ciemniejsz(cid:200) cz(cid:218)(cid:258)(cid:202) cyklu ni(cid:285) przez jego ja(cid:258)niejsz(cid:200) cz(cid:218)(cid:258)(cid:202). To tylko pozory, poniewa(cid:285) dobrze wiemy, (cid:285)e w ka(cid:285)- dym cyklu jasno(cid:258)(cid:202) zmienia si(cid:218) o 1 w ka(cid:285)d(cid:200) stron(cid:218). Ludzkie oko znacznie lepiej radzi sobie z odró(cid:285)nianiem ni(cid:285)szych poziomów o(cid:258)wietlenia ni(cid:285) przy bardzo jasnym (cid:258)wietle. Oznacza to, (cid:285)e reakcje oka na (cid:258)wiat(cid:239)o nie s(cid:200) liniowe, co jest wykorzystywane w wielu zastosowa- niach diod LED sterowanych modulowanymi impulsami. Je(cid:285)eli przesuwaj(cid:200)c szybko g(cid:239)ow(cid:218) przed (cid:258)wiat(cid:239)ami sygnalizacyjnymi na skrzy(cid:285)owaniu, zauwa(cid:285)ysz ich migotanie, wynika ono w(cid:239)a(cid:258)nie ze stosowania modulacji impulsów. Powodem tak cz(cid:218)stego stosowania techniki PWM przy sterowaniu diod LED jest to, (cid:285)e cz(cid:239)owiek nie zauwa(cid:285)a ró(cid:285)nicy mi(cid:218)dzy 100 a 90 wspó(cid:239)czynnikiem wype(cid:239)nienia, co pozwala sterowa(cid:202) lampami na skrzy(cid:285)owaniu na poziomie 90 i oszcz(cid:218)dzi(cid:202) tym samym 10 kosztów energii. Modulowanie impulsów za pomoc(cid:200) liczników Je(cid:285)eli nie wierzysz, (cid:285)e Twoje oczy nieliniowo reaguj(cid:200) na (cid:258)wiat(cid:239)o, przeprowad(cid:283)my ma(cid:239)y eksperyment. Na lis- tingu 10.2 program pwmTimer.c pobiera przez port szeregowy wpisywane przez Ciebie znaki i przekszta(cid:239)ca je w liczbowe wspó(cid:239)czynniki wype(cid:239)nienia. Przy okazji poznasz znacznie lepsz(cid:200) metod(cid:200) implementowania tech- niki PWM — przerzucenie szczegó(cid:239)ów na sprz(cid:218)t. Zapisz program w mikrokontrolerze, a potem w oknie terminala wpisz warto(cid:258)(cid:202) 10, 20 lub 30 i sprawd(cid:283), przy której z tych warto(cid:258)ci diody b(cid:218)d(cid:200) (cid:258)wieci(cid:239)y najja(cid:258)niej. A teraz wpisz 210, 220 albo 230 i spróbuj jeszcze raz. Modulowanie impulsów za pomoc(cid:200) liczników 201 Kup książkęPoleć książkę Przyznasz, (cid:285)e znacznie (cid:239)atwiej odró(cid:285)ni(cid:202) jasno(cid:258)(cid:202) ciemniejszych diod. Reakcja naszych oczu na zmiany jasno(cid:258)ci jest zbli(cid:285)ona do procentowej warto(cid:258)ci takiej zmiany, a nie do bezwzgl(cid:218)dnej warto(cid:258)ci nat(cid:218)(cid:285)enia (cid:258)wiat(cid:239)a. Warto o tym pami(cid:218)ta(cid:202), przygotowuj(cid:200)c o(cid:258)wietlenie diodowe — równe odst(cid:218)py warto(cid:258)ci modulacji impulsu nie prze- k(cid:239)adaj(cid:200) si(cid:218) na równe odst(cid:218)py jasno(cid:258)ci o(cid:258)wietlenia. Mo(cid:285)esz si(cid:218) zastanawia(cid:202), dlaczego zapalamy tutaj jedynie trzy diody. Przykr(cid:200) przyczyn(cid:200) takiego ograniczenia jest fakt, (cid:285)e sprz(cid:218)t generuj(cid:200)cy modulowane impulsy zosta(cid:239) ograniczony i jeden licznik mo(cid:285)e sterowa(cid:202) co najwy(cid:285)ej dwoma pinami. W sumie daje to maksymalnie sze(cid:258)(cid:202) pinów: cztery sterowane dwoma licznikami 8-bitowymi oraz dwa piny sterowanie licznikiem 16-bitowym. Nasz program zapala zatem jedynie trzy diody LED, wykorzystuj(cid:200)c do tego warto(cid:258)ci wpisane na klawiaturze. Teraz przyjrzyjmy si(cid:218) zasadzie dzia(cid:239)ania pro- gramu przedstawionego na listingu 10.2. Listing 10.2. Kod programu pwmTimers.c /* Modulacja szeroko(cid:286)ci impulsu sterowana portem szeregowym */ // ------- Preambu(cid:225)a -------- // #include avr/io.h #include util/delay.h #include pinDefines.h #include USART.h /* Definicje pinów, portów itp. */ /* Funkcje marnuj(cid:261)ce czas */ static inline void initTimers(void) { // Licznik 1 A,B TCCR1A |= (1 WGM10); TCCR1B |= (1 WGM12); TCCR1B |= (1 CS11); TCCR1A |= (1 COM1A1); TCCR1A |= (1 COM1B1); /* Szybki tryb PWM, 8-bitów */ /* Szybki tryb PWM, pkt. 2 */ /* Cz(cid:266)stotliwo(cid:286)(cid:252) PWM = F_CPU/8/256 */ /* Wyj(cid:286)cie PWM na OCR1A */ /* Wyj(cid:286)cie PWM na OCR1B */ // Licznik 2 /* Szybki tryb PWM */ TCCR2A |= (1 WGM20); /* Szybki tryb PWM, pkt. 2 */ TCCR2A |= (1 WGM21); TCCR2B |= (1 CS21); /* Cz(cid:266)stotliwo(cid:286)(cid:252) PWM = F_CPU/8/256 */ /* Wyj(cid:286)cie PWM na OCR2A */ TCCR2A |= (1 COM2A1); } int main(void) { uint8_t brightness; // -------- Inicjacja --------- // initTimers(); initUSART(); printString( -- Przyk(cid:239)ad PWM z diodami LED --\r\n ); LED_DDR |= (1 LED1); LED_DDR |= (1 LED2); LED_DDR |= (1 LED3); /* w(cid:225)(cid:261)cza wyj(cid:286)cia diod prze(cid:225)(cid:261)czanych przez sprz(cid:266)t do PWM */ 202 10. Modulacja szeroko(cid:258)ci impulsu Kup książkęPoleć książkę // ------ P(cid:266)tla zdarze(cid:276) ------ // while (1) { printString( \r\nWprowad(cid:283) wspó(cid:239)czynnik wype(cid:239)nienia cyklu (0-255): ); brightness = getNumber(); OCR2A = OCR1B; OCR1B = OCR1A; OCR1A = brightness; } return (0); /* Koniec p(cid:266)tli zdarze(cid:276) */ /* ta instrukcja nie zostanie wykonana */ } Podobnie jak we wszystkich dotychczasowych programach u(cid:285)ywaj(cid:200)cych liczników, p(cid:218)tla zdarze(cid:241) zawiera raczej niewiele kodu. Pobiera ona liczb(cid:218) z portu szeregowego i przesuwa warto(cid:258)ci pomi(cid:218)dzy rejestrami porów- nuj(cid:200)cymi, steruj(cid:200)cymi diodami LED1, LED2 i LED3. Zauwa(cid:285), (cid:285)e nie musimy korzysta(cid:202) z dodatkowych zmiennych do przechowywania „poprzednich” warto(cid:258)ci otrzymanych z portu szeregowego, poniewa(cid:285) s(cid:200) one przecho- wywane w rejestrach OCRnx, które traktujemy tu jak zmienne. Przepisanie tych warto(cid:258)ci zajmuje procesorowi kilka mikrosekund, nawet je(cid:285)eli dzia(cid:239)a z szybko(cid:258)ci(cid:200) 1 MHz. Pozosta(cid:239)(cid:200) cz(cid:218)(cid:258)(cid:202) czasu procesor sp(cid:218)dza na oczekiwaniu na dane z portu szeregowego i odpowiednim prze- twarzaniu otrzymanych danych. Zauwa(cid:285), (cid:285)e w wersji z programowym modulowaniem impulsów (plik pwm.c) w ogóle nie mieliby(cid:258)my takiej opcji. Gdyby(cid:258)my czekali na dane z portu szeregowego, diody przestawa(cid:239)yby b(cid:239)yska(cid:202). Je(cid:258)li nawet jedynie sprawdzaliby(cid:258)my, czy port szeregowy odebra(cid:239) jakie(cid:258) dane, to i tak powodo- wa(cid:239)oby to zmian(cid:218) zale(cid:285)no(cid:258)ci czasowych modulowanych impulsów. (cid:191)eby teraz utrzymywa(cid:202) b(cid:239)yskanie diod, nasz kod musi tylko zapisywa(cid:202) w(cid:239)a(cid:258)ciwe warto(cid:258)ci wspó(cid:239)czynnika wype(cid:239)nienia do odpowiednich rejestrów OCSnx. Ca(cid:239)(cid:200) reszt(cid:200) prac, czyli odliczaniem, porównywaniem oraz w(cid:239)(cid:200)czaniem i wy(cid:239)(cid:200)czaniem pinów, zajmuj(cid:200) si(cid:218) elementy sprz(cid:218)towe. W tym przyk(cid:239)adzie zyskujemy zatem mo(cid:285)liwo(cid:258)(cid:202) wykorzystania procesora do obs(cid:239)ugi portu szeregowego. Inicjowanie liczników dla trybu PWM Konfigurowanie licznika na potrzeby modulacji impulsów jest bardzo podobne do sposobu ich u(cid:285)ycia, jaki opisa(cid:239)em w rozdziale 9., z tym (cid:285)e zamiast trybu normalnego albo CTC, do generowania przebiegu wybieramy tryb PWM. Przyjrzyjmy si(cid:218) teraz dok(cid:239)adniej funkcji initTimers(), (cid:285)eby zobaczy(cid:202) kod przypominaj(cid:200)cy ten, którego u(cid:285)ywa- li(cid:258)my ju(cid:285) w rozdziale 9. Konfigurujemy tryb generowania przebiegów, ustalamy warto(cid:258)(cid:202) podzielnika zegara i definiujemy piny wyj(cid:258)ciowe, (cid:285)eby sygna(cid:239)y skierowa(cid:202) bezpo(cid:258)rednio do pinów OCR1A, OCR1B i OCR2A. I to wszystko. Jeszcze raz musimy zajrze(cid:202) do arkusza danych, aby upewni(cid:202) si(cid:218), (cid:285)e wiemy przynajmniej, sk(cid:200)d wzi(cid:218)(cid:239)y si(cid:218) nazwy bitów ustawianych w funkcji inicjuj(cid:200)cej. Zauwa(cid:285), (cid:285)e licznik numer 1 jest bardziej z(cid:239)o(cid:285)ony, poniewa(cid:285) jest licznikiem 16-bitowym, a uk(cid:239)ad AVR daje mo(cid:285)liwo(cid:258)(cid:202) dzia(cid:239)ania w trybie 8-, 10- i 16-bitowym. Pe(cid:239)n(cid:200) roz- dzielczo(cid:258)(cid:202) licznika wykorzystamy w rozdziale 11. do sterowania serwomotorem, ale na razie wybieramy tylko 8-bitow(cid:200) rozdzielczo(cid:258)(cid:202) licznika, aby uzyska(cid:202) zgodno(cid:258)(cid:202) dzia(cid:239)a(cid:241) z licznikiem numer 2. Modulowanie impulsów za pomoc(cid:200) liczników 203 Kup książkęPoleć książkę Szybki tryb PWM Szybki tryb PWM jest chyba najcz(cid:246)(cid:311)ciej u(cid:344)ywanym trybem tej kategorii, a jednocze(cid:311)nie jest zdecydowanie najprostszy w u(cid:344)yciu. Licznik odlicza w p(cid:246)tli od zera do warto(cid:311)ci maksymalnej (w zale(cid:344)no(cid:311)ci od licznika i trybu b(cid:246)dzie to 255, 65535 albo inna warto(cid:311)(cid:228) zapisana w rejestrze OCRxA) z szybko(cid:311)ci(cid:226) definiowan(cid:226) przez podzielnik sygna(cid:286)u zegara. Przy okazji warto(cid:311)(cid:228) licznika porównywana jest z zawarto(cid:311)ci(cid:226) rejestru porównuj(cid:226)cego OCRnx. Je(cid:344)eli obie warto(cid:311)ci s(cid:226) takie same, wyj(cid:311)cie PWM mo(cid:344)e zosta(cid:228) wyczyszczone albo ustawione, a dodatkowo mo(cid:344)na wywo- (cid:286)a(cid:228) odpowiednie przerwanie. Szybki tryb PWM to sprz(cid:246)towa wersja programu pwm.c, w której przechodzili(cid:311)my w p(cid:246)tli przez warto(cid:311)ci od 0 do 255 i porównywali(cid:311)my warto(cid:311)(cid:228) licznika z warto(cid:311)ci(cid:226) zmiennej wspó(cid:286)- czynnika wype(cid:286)nienia. Jednak u(cid:344)ycie sprz(cid:246)tu do modulowania szeroko(cid:311)ci impulsu jest znacznie szybszym rozwi(cid:226)zaniem ni(cid:344) wykonywanie tych wszystkich operacji programowo, a dodat- kowo zupe(cid:286)nie nie obci(cid:226)(cid:344)a procesora. Wyliczanie cz(cid:246)stotliwo(cid:311)ci PWM w trybie szybkim jest naprawd(cid:246) proste. Wystarczy podzieli(cid:228) cz(cid:246)stotliwo(cid:311)(cid:228) zegara procesora przez warto(cid:311)(cid:228) podzielnika, a potem podzieli(cid:228) j(cid:226) jeszcze przez liczb(cid:246) kroków wykonywanych w cyklu. Przyk(cid:286)adowo przy podzielniku ustawionym na 8, przy u(cid:344)yciu 8-bitowego licznika z 256 krokami i procesora o szybko(cid:311)ci 1 MHz uzyskamy cz(cid:246)sto- tliwo(cid:311)(cid:228) PWM: 1 000 000 Hz / 8 / 256 = 488 Hz. Tutaj inaczej ni(cid:285) w trybie CTC wygl(cid:200)da te(cid:285) sposób konfigurowania wyj(cid:258)cia za pomoc(cid:200) bitów COM. Po pierw- sze, poszczególne bity maj(cid:200) inne znaczenie ni(cid:285) w trybie CTC, szyb
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Programowanie układów AVR dla praktyków
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: