Saltar al contenido principal

# 19.2: Circuito de Salida

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

$$\newcommand{\id}{\mathrm{id}}$$ $$\newcommand{\Span}{\mathrm{span}}$$

( \newcommand{\kernel}{\mathrm{null}\,}\) $$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$ $$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$ $$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\id}{\mathrm{id}}$$

$$\newcommand{\Span}{\mathrm{span}}$$

$$\newcommand{\kernel}{\mathrm{null}\,}$$

$$\newcommand{\range}{\mathrm{range}\,}$$

$$\newcommand{\RealPart}{\mathrm{Re}}$$

$$\newcommand{\ImaginaryPart}{\mathrm{Im}}$$

$$\newcommand{\Argument}{\mathrm{Arg}}$$

$$\newcommand{\norm}[1]{\| #1 \|}$$

$$\newcommand{\inner}[2]{\langle #1, #2 \rangle}$$

$$\newcommand{\Span}{\mathrm{span}}$$ $$\newcommand{\AA}{\unicode[.8,0]{x212B}}$$

$$\newcommand{\vectorA}[1]{\vec{#1}} % arrow$$

$$\newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow$$

$$\newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vectorC}[1]{\textbf{#1}}$$

$$\newcommand{\vectorD}[1]{\overrightarrow{#1}}$$

$$\newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}}$$

$$\newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}}$$

$$\newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} }$$

$$\newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}}$$

La figura$$\PageIndex{1}$$ presenta una simplificación adicional que se centra únicamente en la porción de salida.

En primer lugar, las líneas de control PUD (Pull Up Disable), SLEEP y CLK (Clock) son comunes a todos los bits y puertos. Podemos ignorarlos para nuestros fines. La sección más baja se elimina porque está involucrada con la funcionalidad de entrada. Lo mismo ocurre con la sección superior que rodea al MOSFET. Finalmente, se han eliminado una serie de dos puertas, un inversor y un multiplexor agrupados alrededor de la sección media. Estos sirven a una función particular (y quizás algo esotérica), a saber, la capacidad de alternar rápidamente un poco. Nuevamente, esta sección no es necesaria para el funcionamiento típico.

Al simplificar nos quedamos con un circuito que se centra alrededor de dos flip-flops D y unos búferes de tres estados. Las principales señales de interés son WDx y WRX que alimentan los flip-flops DDxN y PortXn. DDxN es el bit de Dirección de Datos. Determina si el pin físico está configurado para salida (escritura) o entrada (lectura). PortXN presenta los datos que se deben escribir. Tenga en cuenta que la “x” se refiere a la letra de puerto, como en el Puerto B, mientras que la “n” se refiere al número de bit dentro de ese puerto. Así, el pin físico para el bit número dos en el Puerto B se denotaría aquí como PB2 (o alternativamente, PORTB.2). La colección de los ocho bits de DDxN se conoce como el Registro de Dirección de Datos, o DDR. El Registro de Dirección de Datos para el Puerto B se denominaría DDRB. Cada puerto tendrá estos registros mapeados en la memoria. Es decir, para el Puerto B habrá una DDRB para control de dirección y una PORTB para escribir datos (también hay un PINB para leer, más sobre eso más adelante). De igual manera habrá una DDRC y PORTC (y PINC) para el Puerto C, y así sucesivamente para tantos puertos como tenga el controlador (B, C y D para el ATMega 328P).