{"id":661,"date":"2019-12-22T19:44:53","date_gmt":"2019-12-22T19:44:53","guid":{"rendered":"http:\/\/robots-argentina.com.ar\/didactica\/?p=661"},"modified":"2020-11-04T15:19:18","modified_gmt":"2020-11-04T15:19:18","slug":"arduino-entradas-y-salidas-manipulacion-de-puertos","status":"publish","type":"post","link":"https:\/\/robots-argentina.com.ar\/didactica\/arduino-entradas-y-salidas-manipulacion-de-puertos\/","title":{"rendered":"Arduino: Entradas y salidas – Manipulaci\u00f3n de puertos"},"content":{"rendered":"
<\/a><\/p>\n NOTA:<\/strong> Para ver el uso de los pines del ATmega328P en Arduino recomiendo leer el art\u00edculo Arduino UNO R3 \u2013 Conect\u00e1ndolo al mundo exterior<\/strong><\/a>.<\/p><\/blockquote>\n Programaci\u00f3n avanzada de puertos<\/strong><\/p>\n En principio, es importante recordar que los puertos de un microcontrolador de 8 bits tienen esa misma cantidad de entradas\/salidas, o sea ocho l\u00edneas. Esto nos har\u00eda pensar que el ATmega328P, que posee tres puertos (B, C y D), dispone de 3 x 8 = 24 l\u00edneas de entrada\/salida disponibles. Sin embargo, utilizado en un Arduino no es as\u00ed, como veremos.<\/p>\n <\/a><\/p>\n La mayor\u00eda de los bits de los puertos de los microcontroladores son de uso m\u00faltiple, es decir que se comportan de una forma u otra de acuerdo con su configuraci\u00f3n. Varias l\u00edneas de puertos cumplen funciones vitales en la operaci\u00f3n de un Arduino, funciones que no son l\u00edneas de entrada\/salida de uso general.<\/p>\n <\/a><\/p>\n El PORTB<\/strong> (puerto B) tiene ocupadas dos l\u00edneas de entrada\/salida que se utilizan para conectar el cristal oscilador. Estos pines, el PORTB<\/strong> bit-6<\/strong> y PORTB<\/strong> bit-7<\/strong>, pueden quedar libres si se configura al chip para utilizar el oscilador interno, pero esta opci\u00f3n no podemos utilizarla en el Arduino debido a que ya tiene su sistema basado en la velocidad de cristal de 16 MHz, adem\u00e1s de que el cristal est\u00e1 soldado a esos pines en el circuito de la placa.<\/p>\n El PORTC<\/strong> tiene dos bits que no est\u00e1n disponibles, uno de ellos, el PORTC<\/strong> bit-6<\/strong> se utiliza como entrada de reinicio (RESET<\/strong>), y el otro bit (7<\/strong>) no est\u00e1 cableado hacia el exterior del ATmega328P con c\u00e1psula PDIP<\/a><\/strong> que viene enchufado en el z\u00f3calo del Arduino Uno R3, porque no posee suficientes l\u00edneas disponibles en su encapsulado de 28 patas. Y cuando se trata de un chip con encapsulado de montaje superficial TQFP<\/strong> de 32 pines (como en el Arduino Nano<\/strong> y en algunos clones de Arduino Uno<\/strong>), las dos l\u00edneas faltantes est\u00e1n dedicadas al convertidor anal\u00f3gico digital (ADC6<\/strong> y ADC7<\/strong>) y no son pines de entrada\/salida digital.<\/p>\n Dos bits del PORTD<\/strong>, el PORTD<\/strong> bit-0<\/strong> y el PORTD<\/strong> bit-1<\/strong>, se utilizan durante la programaci\u00f3n del Arduino, ya que est\u00e1n conectados a la interfaz USB<\/strong>, adem\u00e1s de ser los pines TX<\/strong> y RX<\/strong> utilizados para la comunicaci\u00f3n serie<\/a>. Estos pines se pueden utilizar para comunicaci\u00f3n serie asincr\u00f3nica hacia el exterior, y tambi\u00e9n como entradas o salidas cuando no se est\u00e1 grabando un programa. Pero no deben tener conexiones instaladas mientras se programa el Arduino.<\/p>\n En consecuencia, no se llega a disponer de la cantidad de 24 entradas\/salidas que ofrecer\u00edan tres puertos de 8 bits.<\/p>\n El ATmega328P, como cualquier otro microcontrolador, tiene registros para cada puerto con los cuales se define si cada bit del puerto ser\u00e1 usado como entrada o como salida, y en varios casos otra funci\u00f3n. El ATmega328P tiene tres puertos: PORTB<\/strong>, PORTC<\/strong> y PORTD<\/strong>, por lo cual hay tres bancos de registros de configuraci\u00f3n, uno para cada puerto.<\/p>\n