Detalle de los puertos de la Hidrovía Paraná ParaguayDescripción completa
REGISTRO CAPACITACION SGSSTDescripción completa
REGISTRO DE EODescripción completa
Descripción completa
p
PuertosDescripción completa
diseño de puertos maritimos
Descripción completa
Descripción completa
Tipos de Puertos de RedDescripción completa
Registro PORT (puerto) Los registros de PORT permiten manipular los pines del microcontrolador de la placa Arduino en bajo nivel y de manera más rápida. Los chips usados en la placa Arduino (el ATmega8 el ATmega!" ATmega!"8 8 y el ATmega#$8p%poseen ATmega#$8p%poseen tres puertos& o
' (pines digitales del 8 al !#%
o
(entradas anal)gicas%
o
* (pines digitales del + al ,%
ada puerto es controlado por tres registros los cuales tambi-n están deinidos como variables en el lenguaje del Arduino (Pagina 76 del Datasheet)& Datasheet)& o
/l registro **R determina si el pin es una entrada o una salida.
o
uando el **R ha sido conigurado como salida si en el registro PORT guardamos un uno l)gico el pin del puerto sacará un uno (0120% por el puerto de salida. 3in embargo si en el registro PORT guardamos un cero logico el pin del puerto sacará un cero (LO4% por el puerto de salida.
o
uando el **R ha sido conigurado como entra si en el registro PORT guardamos un uno l)gico la resistenci resistencia a de pull5up se activa. Pero si en el registro PORT guardamos un cero l)gico la resistencia de pull5up se desactiva.
o
/l registro P16 permite leer el estado de un pin 7ue se ha conigurado como entrada. /ste registro nos da un ! si a un pin del microcontrolador se le está alimentando eternamente y un cero si esta en nivel bajo de voltaje.
Los es7uemas de los chips ATmega8 chips ATmega8 and and ATmega!" ATmega!"8 8 muestran los puertos. /l nuevo ATmega#$8p usa la misma coniguraci)n coniguraci) n de pines 7ue el ATmega!"8.
Los registros **R y PORT pueden ser ambos escritos y le9dos. /l registro P16 corresponde al estado de las entradas as9 7ue solo puede ser le9do. /l PORTD mapea los pines digitales del + al , **R* 5 /l registro de coniguraci)n del modo de los pines del puerto * 5 lectura:escritura PORT* 5 Registro de datos del puerto * 5 lectura:escritura P16* 5 Registro de pines de entrada del puerto * 5 solo lectura PORTB mapea los pines digitales del 8 al !#. Los bits altos(" ; ,% están mapeados a los pines del cristal de cuarini **R 5 /l registro de coniguraci)n del modo de los pines del puerto 5 lectura:escritura PORT 5 Registro de datos del puerto 5 lectura:escritura P16 5 Registro de pines de entrada del puerto 5 solo lectura ada bit de estos registros corresponden con un solo pin? por ejemplo el bit menos signiicativo de los registros **R' PORT' y P16' hace reerencia al pin P'+ (pin digtal 8%. Para más detalles sobre como están mapeados los n@meros de los pines de Arduino a los puertos y los bits mira el diagrama de tu chip& ATmega8 ATmega!"8. (Ten en cuenta 7ue algunos bits de un puerto pueden estar siendo usados para otras cosas dierentes a /:3? y ten cuidado de no cambiar los valores de los registros correspondientes a ellos.%
Ejemplos /n reerencia al mapeo de los pines del cual se habla en los párraos anteriores los registros del puerto * controlan los pines digitales del + al , de la placa Arduino. *eber9as tener en cuenta sin embargo 7ue los pines + y ! son usados para la comunicaci)n serial y por tanto para programar y depurar el Arduino por lo 7ue cambiar esos pines deber9a ser evitado a menos 7ue se necesite para unciones de entrada y salida serial. Ten en cuenta 7ue esto puede intererir con las descarga y depuraci)n de programas. **R* es el registro de direccionamiento del Puerto * (Pines digitales Arduinos del + al ,%. Los bits en este registro controlan si los pines del Puerto * son conigurados como entradas o salidas por ejemplo& DDRD = B11111110;
// configura los pines del 1 al 7 como salidas y el pin 0 como
entrada DDRD = 0xFE; hexadecimal
// configura los pines del 1 al 7 como salidas y el pin 0 como entrada en
DDRD = !";
// configura los pines del 1 al 7 como salidas y el pin 0 como entrada en
decimal
DDRD = DDRD # B11111100;
// esta manera es m$s segura ya %ue configura los // pines del al 7 como salidas sin cam&iar los pines 0 y 1' // los cuales son R( y )(
//*ira la +e& de referencia a los operadores &it a &it tipo y
Tutorial de operaciones con bits en
el Playground. PORT* es el registro para el estado de las salidas. Por ejemplo& ,-R)D = B10101000; // configura los pines digitales 7'!'.
Para modiicar solo un pin y el resto dejarlos igual hay 7ue usar mascaras de datos por ejemplo& ,-R)D = ,-R)D 2 B10000000;
// el pin digital 7 se pone y el resto no se toca
3i los pines se han conigurados como salidas usando el registro **R* o la unci)n pin>ode(% los pines se leerán siempre como si estuviesen a nivel alto. P16' es el registro de entrada este registro permite leer todos los pines de entrada a la ve<.
¿Por que usar manipulación de puertos? rom Tutorial de operaciones con bits 2eneralmente hacer este tipo de cosas no es una buena idea. BPor 7ue noC A7u9 se presentan algunas ra
/l c)digo es mucho más di9cil de depurar y mantener y es mucho más di9cil de entender para la gente. 3olo lleva algunos microsegundos al procesador ejecutar c)digo pero podr9a llevarte horas descubrir por7ue no unciona y arreglarloD Tu tiempo es valioso noC pero el de el procesador es poco valioso medido en coste de electricidad 7ue necesita. 6ormal mente es mucho mejor escribir un c)digo de la orma más obvia.
o
/l c)digo es menos portable. 3i usas las unciones digitalRead(% y digital4rite(% es mucho más ácil escribir c)digo 7ue va a uncionar en todos los micrcontroladores Atmel donde los registros de puerto y de control pueden ser dierentes en cada tipo de microcontroladores.
o
/s mucho más ácil causar mal uncionamiento no intencionado usando el acceso directo a un puerto. Observa como la linea **R* E '!!!!!!!+ de arriba menciona 7ue el pin + se debe dejar como una entrada. /l pin + la linea de recepci)n (RF% en el puerto seria. Podr9a ser muy ácil causar 7ue tu puerto serial deje de uncionar por cambiar el pin + a una salida. 3erá bastante conuso cuando de repente no puedas recibir datos por el puerto serial BnoC
Puede 7ue te est-s diciendo genial Bpara 7ue 7uerr9a yo usar esto entoncesC A7u9 están algunos de los aspectos positivos del acceso directo al puerto& o
Puede 7ue puedas cambiar los pines de estado muy rápido en racciones de microsegundos. 3i miras el c)digo uente en hardGareHarduinoHcoresHarduinoHGiringIdigital.c verás 7ue las unciones digitalRead(% y digital4rite(% son cada una cerca de una docena de lineas de c)digo lo cual al ser compilado se convierte en unas cuantas instrucciones má7uina. ada instrucci)n ma7uina necesita un ciclo de reloj a !">0< lo cual puede sumar mucho tiempo en aplicaciones muy dependientes del tiempo. /l acceso directo al puerto puede hacer el mismo trabajo en muchos menos ciclos de trabajo.
o
Algunas veces necesitamos conigurar muchos pines eactamente al mismo tiempo. Por lo 7ue usar las unciones digital4rite(!+0120% seguida de la unci)n digital4rite(!!0120% causará 7ue el pin !+ se ponga en nivel alto varios microsegundos despu-s 7ue el pin !! Lo cual puede conundir circuitos digitales conectados al Arduino cuyo uncionamiento dependa del tiempo preciso del cambio de esos bits. *e orma alternativa se puede ver 7ue usando el comando PORT' JE '!!++ se pueden cambiar a estado alto ambos pines a la ve<.
o
3i te estás 7uedando sin memoria para tu aplicaci)n puedes usar estos trucos para hacer 7ue tu c)digo sea más pe7ueKo. sando este m-todo se necesitan muchos menos bytes de c)digo compilado 7ue si se hace un bucle para 7ue se vaya cambiando cada pin uno por uno. /n algunos casos esto puede ser una gran dierencia entre hacer 7ue tu programa 7uepa en una memoria lash o no.