{"id":1006,"date":"2024-07-09T09:13:00","date_gmt":"2024-07-09T07:13:00","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=1006"},"modified":"2024-07-06T13:08:50","modified_gmt":"2024-07-06T11:08:50","slug":"rust-embebido-arduino-pwm-parte-4","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/09\/rust-embebido-arduino-pwm-parte-4\/","title":{"rendered":"Rust-Embebido \u00abArduino\u00bb PWM parte 4"},"content":{"rendered":"\n<p>Llegamos a la cuarta entrega de esta programaci\u00f3n embebida de Arduino con Rust:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/09\/rust-embebido-arduino-introduccion-parte-1\/\" data-type=\"post\" data-id=\"994\">Introducci\u00f3n parte <\/a><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/09\/rust-embebido-arduino-introduccion-parte-1\/\" data-type=\"post\" data-id=\"994\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/29\/rust-embebido-arduino-e-s-digitales-parte-2\/\" data-type=\"post\" data-id=\"1000\">E\/S Digitale<\/a><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/29\/rust-embebido-arduino-e-s-digitales-parte-2\/\" data-type=\"post\" data-id=\"1000\" target=\"_blank\" rel=\"noreferrer noopener\">s parte<\/a><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/29\/rust-embebido-arduino-e-s-digitales-parte-2\/\" data-type=\"post\" data-id=\"1000\"> 2<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/07\/03\/rust-embebido-arduino-entradas-analogicas-parte-3\/\" data-type=\"post\" data-id=\"1004\">Entradas anal\u00f3gicas parte 3<\/a><\/li>\n<\/ul>\n\n\n\n<p>En esta ocasi\u00f3n hablaremos de la modulaci\u00f3n por pulso que nos permite emular una salida analogica, OJO es una emulaci\u00f3n pero no una salida anal\u00f3gica ya que nos dara valores 0V y 5V y emular\u00edamos por ejemplo 3V pero si nuestro dispositivo conectado solo aguanta hasta 3V lo podr\u00edamos estropear ya que le entrar\u00eda +5V.<\/p>\n\n\n\n<figure class=\"wp-block-image alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"476\" height=\"319\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image-5.png\" alt=\"\" class=\"wp-image-1059\" style=\"width:327px;height:auto\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image-5.png 476w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image-5-300x201.png 300w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/figure>\n\n\n\n<p>La modulaci\u00f3n por pulso (PWM) es una se\u00f1al digital que se repite durante un periodo definido (ejemplo 1Hz que es aproximadamente un segundo) y se mantiene en alto un porcentaje de tiempo y el resto en bajo y as\u00ed repetidamente. Al usar periodos cortos los cambios son tantos que no se aprecia el cero (apagado en un led) pero si una reducci\u00f3n de la velocidad en un motor o brillo en un LED. Se puede ver gr\u00e1ficamente en la figura. <\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"236\" height=\"66\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image-6.png\" alt=\"\" class=\"wp-image-1060\" style=\"width:248px;height:auto\"\/><\/figure>\n\n\n\n<p>La formula que nos permite el calculo es la siguiente: <\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"157\" height=\"213\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/06\/image-7.png\" alt=\"\" class=\"wp-image-1061\"\/><\/figure>\n\n\n\n<p>Los pines PWM se vieron en la tabla presentada al hablar de las <a href=\"https:\/\/www.pinguytaz.net\/index.php\/2024\/06\/29\/rust-embebido-arduino-e-s-digitales-parte-2\/\" data-type=\"post\" data-id=\"1000\" target=\"_blank\" rel=\"noreferrer noopener\">E\/S Digitales<\/a> y el ciclo se genera gracias a los timer, ponemos una tabla en la que vemos los Timer-Counter que utiliza cada entrada. La resoluci\u00f3n es de 8bits (0-255) y la frecuencia del ciclo es de 490Hz y para los pines D5 y D6 es de 980Hz.<\/p>\n\n\n\n<p>El <a href=\"https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/pwm.rs\" data-type=\"link\" data-id=\"https:\/\/github.com\/pinguytaz\/Arduino-ESP32\/blob\/master\/CuadernoTecnico\/RustArduino\/src\/bin\/pwm.rs\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00f3digo de este POST<\/a> se encuentra en <a href=\"https:\/\/github.com\/pinguytaz\" data-type=\"link\" data-id=\"https:\/\/github.com\/pinguytaz\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a> como siempre, en este caso tendremos dos LEDs que realizaran un FADE, utilizamos dos LEDs para usar dos contadores diferentes.<\/p>\n\n\n\n<p>Lo primero que hacemos como siempre es recoger los pines para luego definirlos, en este caso antes definiremos el Timer-Count necesario del pin como se ve en el c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Definimos los TIMER\nlet timer0 = Timer0Pwm::new(dp.TC0, Prescaler::Prescale64);   \/\/ Timer para d5 y d6\nlet timer1 = Timer1Pwm::new(dp.TC1, Prescaler::Prescale64);   \/\/ Timer para d9 y d10\nlet timer2 = Timer2Pwm::new(dp.TC2, Prescaler::Prescale64);   \/\/ Timer para d3 y d11<\/code><\/pre>\n\n\n\n<p>Con los Timer necesarios definidos como siempre definiremos nuestros pines <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let mut pwmled = pins.d5.into_output().into_pwm(timer0);  \/\/ Definimos D5 como PWM con el timer que le corresponde TC0\npwmled.enable();    \/\/ Lo habilitamos<\/code><\/pre>\n\n\n\n<p>Desde este momento podemos a utilizar nuestros PWM y los m\u00e9todos disponibles son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>enable()<\/strong>    Habilitamos el pin.<\/li>\n\n\n\n<li><strong>disable()<\/strong>  Deshabilitamos el pin.<\/li>\n\n\n\n<li><strong>set_duty(valor)<\/strong>    Ponemos un valor de 0 el m\u00ednimo y 255 el m\u00e1ximo en el pin PWM correspondiente.<\/li>\n\n\n\n<li><strong>get_duty()<\/strong>  Nos permite recoger el valor actual configurado<\/li>\n\n\n\n<li><strong>get_max_duty()<\/strong>   Valor m\u00e1ximo que podemos poner.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/ Ejemplo de FADE\nfor x in (0..=255).chain((0..=254).rev()) {\n   pwmled.set_duty(x);\n   arduino_hal::delay_ms(20);\n}<\/code><\/pre>\n\n\n\n<p>Con esto terminamos esta cuarta entrega la pr\u00f3xima veremos un tema muy interesante que son las Interrupciones externas. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Llegamos a la cuarta entrega de esta programaci\u00f3n embebida de Arduino con Rust: En esta ocasi\u00f3n hablaremos de la modulaci\u00f3n por pulso que nos permite emular una salida analogica, OJO es una emulaci\u00f3n pero no una salida anal\u00f3gica ya que nos dara valores 0V y 5V y emular\u00edamos por ejemplo 3V pero si nuestro dispositivo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":996,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[3,186],"tags":[23,187],"class_list":["post-1006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-rust","tag-arduino","tag-rust"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1006"}],"version-history":[{"count":3,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1006\/revisions"}],"predecessor-version":[{"id":1075,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1006\/revisions\/1075"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/996"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}