{"id":7792,"date":"2018-05-16T18:32:00","date_gmt":"2018-05-16T17:32:00","guid":{"rendered":"http:\/\/blog.whatsbee.net\/?p=7792"},"modified":"2018-05-16T18:32:00","modified_gmt":"2018-05-16T17:32:00","slug":"decimo-paso-cuando-creia-que-lo-tenia","status":"publish","type":"post","link":"https:\/\/blog.whatsbee.net\/?p=7792","title":{"rendered":"D\u00e9cimo paso: cuando cre\u00eda que lo ten\u00eda"},"content":{"rendered":"<p>Mis experiencias previas cuando pido una PCB a fabrica siempre suelen ser parecidas, por alg\u00fan motivo incomprensible conf\u00edo demasiado en mi y, como norma general, acabo pidiendo placas que no funcionan porque me he olvidado algo.<\/p>\n<p>En esta ocasi\u00f3n ten\u00eda todo el circuito montado en una placa de prototipos\u00a0y solo me faltaba poner el rel\u00e9 reed en el GPIO2, pensaba, el GPIO2 es un pin \u00abnormal\u00bb que tiene una resistencia de pullup, simplemente lo tengo que conectar, detectar en el programa y hacer lo que tenga que hacer. Por alg\u00fan motivo he decidido hacerlo f\u00edsicamente y me he encontrado lo siguiente:<\/p>\n<ul>\n<li>El GPIO2 no es tan \u00abnormal\u00bb como pensaba, tiene que estar a nivel alto en el arranque del ESP, al colocar mi interruptor de l\u00e1minas que pon\u00eda el puerto a GND el ESP directamente no arrancaba.<\/li>\n<li>No hab\u00eda pensado en una cosa \u00abtonta\u00bb,\u00a0detectamos que el interruptor de l\u00e1minas est\u00e1 activado o no en el programa, pero el micro est\u00e1 habitualmente en deep sleep, con lo que te\u00f3ricamente tendr\u00edamos que acercar el im\u00e1n para activarlo y esperar a que\u00a0despierte. No es muy intuitivo pensar que tienes que aguantar un im\u00e1n cerca de una cosa durante 10 minutos para que algo funcione.<\/li>\n<\/ul>\n<h3>S\u00ed, pero \u00bfcomo lo solucionamos?<\/h3>\n<p>Lo primero es muy sencillo, ya que parece que el GPIO2 no se lleva bien con ser un puerto de input si existe la posibilidad de que est\u00e9 a nivel bajo en el arranque vamos aintercambiar el GPIO2 y el GPIO3. En el GPIO2 ponemos el led que es output y en el GPIO3 ponemos el rel\u00e9 reed que es input. Os recuerdo que el GPIO3 es el RX, pero eso no parece crear problemas, exceptuando la primera vez que vamos a cargar un programa y no nos acordamos que lo tenemos a nivel alto.\u00a0Sobre este tema hay que hacer una reflexi\u00f3n importante, si esto va a acabar\u00a0siendo una PCB tendremos que poner como m\u00ednimo un jumper para poder abrirlo en el momento en el que la tengamos que programar, no vamos a ir cortando pistas.<\/p>\n<p>Lo segundo ya es un poco m\u00e1s complicado, os explico el proceso mental:<\/p>\n<ul>\n<li>Primera opci\u00f3n: \u00abclaro,\u00a0conecto el pin al reset!!!\u00bb. No funciona, si yo acerco el im\u00e1n pongo el reset a nivel bajo, pero el micro solo arranca cuando el reset vuelve a nivel alto, por lo que el \u00abinvento\u00bb no arranca.<\/li>\n<li>Segunda opci\u00f3n: \u00abpues en lugar de dejar el im\u00e1n permanentemente lo acerco y cuando lo separo se inicia la web, para asegurarme de que no se consumen las bater\u00edas la web solo funciona un momento\u00bb. Tampoco funciona porque hay que tener el im\u00e1n sacado para que inicie y entonces el micro no es capaz de saber si es un reinicio normal o se ha pedido con el im\u00e1n.<\/li>\n<li>Tercera opci\u00f3n: la misma que la segunda, pero buscando alg\u00fan registro del ESP que me diferencie si el reinicio viene de un deep sleep o de pulsar el bot\u00f3n de reset. No he encontrado la manera, b\u00e1sicamente porque creo que no la hay, recordemos que el ESP vuelve a la vida despu\u00e9s de que el GPIO16 ponga el RST a nivel bajo. T\u00e9cnicamente es lo mismo que pulsar el bot\u00f3n de reset, por lo que me parece l\u00f3gico que no haya forma de diferenciar.<\/li>\n<li>Cuarta opci\u00f3n: voy a hacer pruebas con el CH_PD, en teor\u00eda, pon\u00ed\u00e9ndolo a nivel bajo hago un reset y deber\u00eda de ser un reset diferente al de poner a nivel bajo la l\u00ednea de RST, por lo que eso me permitir\u00eda hacer algo parecido a la segunda opci\u00f3n. No funciona muy bien\u00a0y no me gusta demasiado.<\/li>\n<li>Quinta opci\u00f3n: llego a la conclusi\u00f3n que lo que necesito es un detector de flancos negativos, es decir algo que cuando el rel\u00e9 ponga el pin a nivel bajo env\u00ede un pulso negativo al reset, de esta forma la respuesta ser\u00e1 inmediata (a\u00fan me quedan algunos retos).<\/li>\n<\/ul>\n<h3>El detector de flancos negativos<\/h3>\n<p>Supongo que es una cuesti\u00f3n de idioma, pero no encuentro mucha informaci\u00f3n en Internet, aunque no me gusta demasiado resolverlo con puertas l\u00f3gicas (que estar\u00e1n consumiendo en modo deep sleep) busco y encuentro unos pocos art\u00edculos. Como norma general explican como hacer un detector de flancos usando puertas diferentes, pero no quiero a\u00f1adir m\u00e1s integrados con m\u00e1s consumo. Encuentro uno que lo hace con puertas iguales (un solo chip con m\u00e1s de una puerta es una buena soluci\u00f3n). Entro sin mirar y es un <a href=\"http:\/\/blog.whatsbee.net\/?p=729\">art\u00edculo mio de 2011<\/a>\u00a0que publiqu\u00e9 en su d\u00eda en <a href=\"http:\/\/www.zigbe.net\">http:\/\/www.zigbe.net<\/a>\u00a0y que traslad\u00e9 a este blog. la reflex\u00ed\u00f3n es que me debo de estar haciendo mayor porque busco en Internet soluci\u00f3n a problemas que ya sab\u00eda solucionar hace 7 a\u00f1os. En todo caso despu\u00e9s de leerme el art\u00edculo veo que la conclusi\u00f3n es que como la velocidad de las puertas es muy alta el pulso es muy corto y resulta insuficiente (en su d\u00eda resultaba insuficiente para despertar un Xbee y asumo que el problema ser\u00e1 m\u00e1s o menos el mismo para un ESP8266).<\/p>\n<p>Volviendo a las soluciones intuitivas, si un condensador descargado se comporta (m\u00e1s o menos) como un cortocircuito hasta que se carga voy a unir el GPIO3 y el RST con un condensador. Como hay resietencias de pullup a ambos lados por el condensador no circula nada. Cuando pongo a masa el GPIO3 con el\u00a0interruptor de l\u00e1minas el condensador se tiene que cargar, por lo que acaba llegando un impulso al pin de RST, y todo eso sin consumir nada cuando est\u00e1 en sleep.<\/p>\n<p>Ahora, cuando acercas el im\u00e1n el ESP arranca en ese momento, leyendo el\u00a0\u00a0 GPIO3 sabemos que tiene el im\u00e1n cerca. A\u00fan as\u00ed, como ver\u00e9is m\u00e1s adelante nos queda alg\u00fan\u00a0 l\u00edo que resolver.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mis experiencias previas cuando pido una PCB a fabrica siempre suelen ser parecidas, por alg\u00fan motivo incomprensible conf\u00edo demasiado en mi y, como norma general, acabo pidiendo placas que no funcionan porque me he olvidado algo. En esta ocasi\u00f3n ten\u00eda&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/blog.whatsbee.net\/?p=7792\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":7793,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[208,2],"tags":[238,239,209,240,216,236,237],"_links":{"self":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7792"}],"collection":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7792"}],"version-history":[{"count":1,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7792\/revisions"}],"predecessor-version":[{"id":7794,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/7792\/revisions\/7794"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/media\/7793"}],"wp:attachment":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}