{"id":1043,"date":"2018-01-09T19:43:44","date_gmt":"2018-01-09T19:43:44","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=1043"},"modified":"2018-01-14T08:06:22","modified_gmt":"2018-01-14T08:06:22","slug":"rejestr-przesuwny-74hc595-2","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=1043","title":{"rendered":"Sygna\u0142y analogowe"},"content":{"rendered":"<h1>Konwerter analogowo cyfrowy (DAC)<\/h1>\n<p>Sygna\u0142y analogowe to takie sygna\u0142y elektroniczne, kt\u00f3re mo\u017cemy zapisywac nie tylko jako&nbsp;<strong>0<\/strong> lub&nbsp;<strong>1 <\/strong>(tak\/nie, prawda\/fa\u0142sz &#8211; tylko&nbsp;<strong>dwie<\/strong> warto\u015bci), ale w wielu &#8222;odcieniach&#8221; &#8211; w ko\u0144cu pomi\u0119dzy zerem a jedynk\u0105 jest niesko\u0144czenie wiele liczb. Oczywi\u015bcie w informatyce wszystko musi byc sko\u0144czone, tak wi\u0119c tych &#8222;odcieni&#8221; (poziom\u00f3w pomi\u0119dzy zerem a jedynk\u0105) jest sko\u0144czona liczba. Uk\u0142ad zamianiaj\u0105cy sygna\u0142 elektroniczny na informacj\u0119 cyfrow\u0105 nazywa si\u0119 <em>konwerter analogowo cyffrowy<\/em> (DAC) i m\u00f3wi\u0105c o nim podajemy jego zakres &#8211; liczb\u0119 bit\u00f3w.&nbsp;Dla 8-bitowego DACa mamy warto\u015bci sygna\u0142u analogowego z przedzia\u0142u od <strong>0..255<\/strong> (256 poziom\u00f3w = 2^8), natomiast w przypadku 10-bit\u00f3w&nbsp;<strong>0..1023&nbsp;<\/strong>(1024 poziomy = 2^10).<\/p>\n<h1>Potencjometr<\/h1>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-390 size-medium\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k-300x300.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k-150x150.jpg 150w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k.jpg 600w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Wygl\u0105da do\u015b\u0107 topornie &#8211; ale je\u015bl macie w domu zbyteczn\u0105 ga\u0142k\u0119 z kryszta\u0142\u00f3w Swarowskiego to prosz\u0119 \u015bmia\u0142o przynie\u015b\u0107 i uatrakcyjnimy wygl\u0105d tego podzespo\u0142u elektronicznego \ud83d\ude09 Trzeba pami\u0119ta\u0107 o sposobie pod\u0142\u0105czania go do budowanych uk\u0142ad\u00f3w. Widzimy&nbsp;<strong>trzy n\u00f3\u017cki<\/strong> wi\u0119c:<\/p>\n<ul>\n<li>jedna skrajna n\u00f3\u017cka (nie ma r\u00f3\u017cnicy kt\u00f3ra) powinna by\u0107 pod\u0142\u0105czona do masy (nazwijmy j\u0105 GND i oznacza napi\u0119cie zero V)<\/li>\n<li>druga skrajna n\u00f3\u017cka musi by\u0107 pod\u0142\u0105czona do danego napi\u0119cia, nazwijmy je VCC<\/li>\n<li>\u015brodkowa n\u00f3\u017cka b\u0119dzie &#8222;wyprowadza\u0107&#8221; napi\u0119cie od zera do VCC w zale\u017cno\u015bci od ustawienia pokr\u0119t\u0142a na potencjometrze.&nbsp;<\/li>\n<\/ul>\n<p>Na zaj\u0119ciach do\u015b\u0107 szczeg\u00f3\u0142owo om\u00f3wi\u0142em budow\u0119 potencjometru i zasad\u0119 jego dzia\u0142ania &#8211; dzielnik napi\u0119\u0107 &#8211; ale do tego jeszcze obiecuj\u0119 wr\u00f3ci\u0107. Na razie skupmy si\u0119 na powy\u017cszych informacjach jak potencjometr \u0142\u0105czymy w uk\u0142ad. Jako przyk\u0142ad mo\u017cemy pod\u0142\u0105czy\u0107 &#8222;minus&#8221; bateryjki AAA do pierwszej n\u00f3\u017cki, &#8222;plus&#8221; do trzeciej &#8222;n\u00f3\u017cki&#8221;, w\u00f3wczas z pinu numer dwa otrzymamy napi\u0119cie od 0..1.5V. Innym przyk\u0142adem pod\u0142\u0105czenia jest wykorzystanie Arduino i pin\u00f3w GND (pod\u0142\u0105czamy do pinu 1 na potencjometrze) oraz 5V (do pinu 3 na potencjometrze) &#8211; w\u00f3wczas mamy kontrol\u0119 potencjometrem nad napi\u0119ciem 0..5V (pin 2 na potencjometrze).&nbsp;<\/p>\n<p>Pinem #2 z potencjometru mo\u017cemy zasila\u0107 jaki\u015b uk\u0142ad &#8211; sprawdzali\u015bmy to z LED-em wpi\u0119temym pomi\u0119dzy piny #1 (GND) i #2(0..3.3V) potencjometru, lub mozemy pod\u0142\u0105czy\u0107 pin #2 do <strong>wej\u015bcia A0<\/strong> w Arduino &#8211; w\u00f3wczas odczytamy warto\u015b\u0107 napi\u0119cia ustawionego potencjometrem jako liczb\u0119 z przedzia\u0142u 0..1023 (Arduino UNO ma DAC 10-bitowy).<\/p>\n<h1>Kalibracja<\/h1>\n<p>Konieczne jest sprawdzenie poziomu napi\u0119cia 5V w Arduino &#8211; mo\u017ce si\u0119 zdarzy\u0107, \u017ce nasza p\u0142ytka jest uszkodzona lub producent nie trzyma\u0142 standart\u00f3w i zamiast 5V mamy 5.1V. To spora r\u00f3\u017cnica. W przypadku uszkodzonych p\u0142ytek &#8211; kt\u00f3rych wcale nie ma co wyrzuca\u0107 &#8211; napi\u0119cie zamiast 5V mo\u017ce by\u0107 nawet 4.5V co jest ju\u017c ogormn\u0105 r\u00f3\u017cnic\u0105! Dlatego konieczne jest sprawdzenie <strong>multimetrem<\/strong> warto\u015bci napi\u0119cia produkowanego przez Arduino z pinu 5V.&nbsp;<\/p>\n<h1>Odczytywanie sygna\u0142u &#8211; analogRead<\/h1>\n<pre class=\"lang:arduino mark:10 decode:true\" title=\"Odczyt sygna\u0142u analogowego\">void setup(){\r\n  Serial.begin(9600);\r\n}\r\nint odczyt;\r\nvoid loop(){\r\n  odczyt = analogRead(A0);\r\n  Serial.print(\"Odczytalem \");\r\n  Serial.print(odczyt);\r\n  Serial.print(\" ---&gt; \");\r\n  Serial.print(odczyt*4.9\/1024);\r\n  Serial.println(\" [V] \");   \r\n}<\/pre>\n<p>Ten prosty program odczytuje sygna\u0142 pod\u0142\u0105czony do pinu A0 w Arduino (mo\u017cesz wybrac inne wyj\u015bcia: A1,A2&#8230;A5) i wypisuje jego warto\u015b\u0107 jako liczb\u0119 z przedzia\u0142u 0..1023 (gdy\u017c Arduino UNO ma przetwornik DAC 10-cio bitowy, czyli 2^10=1024) a tak\u017ce podaje warto\u015b\u0107 w woltach. Sprawdzi\u0142em, \u017ce w moim Arduino napi\u0119cie z pinu 5V wcale nie wynosi\u0142o 5V a 4.9V i dlatego linia #10 zawiera w\u0142a\u015bnie takie przeliczenie na wolty. Zwr\u00f3\u0107 te\u017c uwag\u0119 na spos\u00f3b komunikowania si\u0119 z ekranem &#8211; budowanie napisu w jednej linii i dopiero na koniec u\u017cycie funkcji Serial.print<strong>ln<\/strong>().<\/p>\n<p>Pos\u0142uguj\u0105 si\u0119 powy\u017cszym programem najpierw sprawdzamy odczytywane napi\u0119cie z pinu 3.3V Arduino, potem 5V Arduino &#8211;&nbsp; por\u00f3wnuj\u0105c warto\u015bci wypisywane na ekranie z&nbsp;<strong>multimetrem<\/strong>. Potem mo\u017cemy u\u017cy\u0107 jaki\u015b baterii a w ko\u0144cu wykorzysta\u0107 potencjometr i jego \u015brodkowy pin.<\/p>\n<h1>PWM (cyfrowe piny z &#8222;tyld\u0105&#8221; ~)<\/h1>\n<p>PWM to szybkozmienny sygna\u0142 cyfrowy (cyfrowy, a wi\u0119c tylko dwie warto\u015bci: 0V oraz 5V). Szybkozmienny oznacza naprawd\u0119 szybkie zmiany, <strong>500x<\/strong> na sekund\u0119 &#8211; czyli co <strong>2ms<\/strong>! Musimy poda\u0107 jaki u\u0142amek czasu (z przedzia\u0142u 2ms) b\u0119dzie napi\u0119ciem wysokim (5V) a w\u00f3wczas pozosta\u0142y czas b\u0119dzie napi\u0119ciem 0V. Ten u\u0142amek czasu musimy wyrazi\u0107 jako liczb\u0119 ca\u0142kowit\u0105 z przedzia\u0142u 0..255 (gdzie 255 to 100%) gdy\u017c w Arduino UNO piny PWM s\u0105 8-bitowe (a 2^8=256). Warto\u015b\u0107 0..255 nazywa si\u0119 to&nbsp;<strong>wype\u0142nieniem sygna\u0142u.<\/strong><\/p>\n<h1>Sterowanie wype\u0142nieniem &#8211; analogWrite<\/h1>\n<pre class=\"lang:default decode:true\" title=\"Sterowanie pinem PWM\">void setup(){\r\n  pinMode(3, INPUT);\/\/pin cyfrowy z tyld\u0105 = PWM \r\n}\r\n\r\nvoid loop(){ \r\n  analogWrite(3, 0);\r\n  delay(5000);\r\n  analogWrite(3, 100);\r\n  delay(5000);\r\n  analogWrite(3, 200);\r\n  delay(5000);\r\n  analogWrite(3, 255);\r\n  delay(5000);\r\n}<\/pre>\n<p>Powy\u017cszy program wybiera pin #3 Arduino UNO (zwr\u00f3\u0107 uwag\u0119, \u017ce jest on onzaczony &#8222;tyld\u0105&#8221; na p\u0142ytce &#8211; czylli jest to pin PWM, ale mo\u017cna wybrac inne piny PWM) i steruje jego wype\u0142nieniem. W tym celu u\u017cywamy funkcji <a href=\"https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/analog-io\/analogwrite\/\">analogWrite(int,int)<\/a> podaj\u0105c numer pinu kt\u00f3rego ma dotyczy\u0107 zmiana (koniecznie pin z tyld\u0105!) oraz warto\u015b\u0107 wype\u0142nienia (koniecznie z przedzia\u0142u 0..255). Co 5 sekund zmienia jego warto\u015b\u0107, kt\u00f3r\u0105 mo\u017cemy odczyta\u0107 na multimetrze &#8211; ale uwaga, b\u0119dzie to tylko <strong>warto\u015b\u0107 \u015brednia!&nbsp;<\/strong>Aby zobaczy\u0107 zmiany napi\u0119cia w okresach 2ms nale\u017ca\u0142o by u\u017cy\u0107 oscyloskopu.&nbsp;<\/p>\n<h1>Praca domowa<\/h1>\n<p>Wykorzystuj\u0105c informacje z dzisiejszych zaj\u0119\u0107 uruchomi\u0107 wirtualne Arduino i zbudowa\u0107 program z potencjometrem, kt\u00f3ry steruje jasno\u015bci\u0105 LED-a. Musimy wi\u0119c odczytywa\u0107 warto\u015bci z potencjometru a nast\u0119pnie odpowiednio sterowa\u0107 zasilaniem LED-a. Powodzenia!<\/p>\n<p style=\"text-align: right;\">(c) KG, 2017<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Konwerter analogowo cyfrowy (DAC) Sygna\u0142y analogowe to takie sygna\u0142y elektroniczne, kt\u00f3re mo\u017cemy zapisywac nie tylko jako&nbsp;0 lub&nbsp;1 (tak\/nie, prawda\/fa\u0142sz &#8211; tylko&nbsp;dwie warto\u015bci), ale w wielu &#8222;odcieniach&#8221; &#8211; w ko\u0144cu pomi\u0119dzy zerem a jedynk\u0105 jest niesko\u0144czenie wiele liczb. Oczywi\u015bcie w informatyce wszystko musi byc sko\u0144czone, tak wi\u0119c tych &#8222;odcieni&#8221; (poziom\u00f3w pomi\u0119dzy zerem a jedynk\u0105) jest sko\u0144czona [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":990,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[67,203,75,98,94,9],"class_list":{"0":"post-1043","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-analogread","9":"tag-analogwrite","10":"tag-dzielnik-napiec","11":"tag-multimetr","12":"tag-potencjometr","13":"tag-pwm","15":"post-with-thumbnail","16":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1043"}],"version-history":[{"count":5,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1043\/revisions"}],"predecessor-version":[{"id":1048,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1043\/revisions\/1048"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/990"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}