You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							77 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							77 lines
						
					
					
						
							2.5 KiB
						
					
					
				| \section{SIPO (Shift Register) Unit}
 | |
| 
 | |
| The shift registers driver unit is designed for the loading of data into serial-in/parallel-out (SIPO) shift registers, such as 74xx4094 or 74xx595. These are commonly used to control segmented \gls{LED} displays, \gls{LED} user interfaces, etc.
 | |
| 
 | |
| \noindent
 | |
| A SIPO shift register has the following digital pins:
 | |
| 
 | |
| \begin{itemize}[itemsep=0pt]
 | |
| 	\item \textit{Shift} -- \gls{SCK}; shifts the data in the register by one bit
 | |
| 	\item \textit{Data In} -- \gls{MOSI}; serial data to load into the register
 | |
| 	\item \textit{Data Out} -- output for daisy-chaining with other shift registers
 | |
| 	\item \textit{Store} -- latches the current register data and shows it at the outputs
 | |
| 	\item \textit{Clear} -- erases the latched data and clears the display
 | |
| \end{itemize}
 | |
| 
 | |
| This unit automatically handles both the \textit{Shift} and \textit{Store} signals, provides access to the \textit{Clear} output, and is capable of loading multiple shift registers in parallel (an arrangement sometimes used instead of daisy-chaining). The polarity (active level) of all signals can be configured.
 | |
| 
 | |
| It is, additionally, possible to set the data lines to arbitrary ``idle'' level(s) before sending the \textit{Store} pulse; this may be latched and used for some additional feature on the user interface, such as a brightness control.
 | |
| 
 | |
| 
 | |
| \subsection{SIPO Configuration}
 | |
| 
 | |
| \begin{inicode}
 | |
| [SIPO:display@9]
 | |
| # Shift pin & its active edge (1-rising,0-falling)
 | |
| shift-pin=A1
 | |
| shift-pol=1
 | |
| # Store pin & its active edge
 | |
| store-pin=A0
 | |
| store-pol=1
 | |
| # Clear pin & its active level
 | |
| clear-pin=A2
 | |
| clear-pol=0
 | |
| # Data port and pins
 | |
| data-port=A
 | |
| data-pins=3
 | |
| \end{inicode}
 | |
| 
 | |
| \subsection{SIPO Commands}
 | |
| 
 | |
| The WRITE and CLEAR\_DIRECT commands are the only ones normally used. The others provide manual control over all the output signals for debugging or testing.
 | |
| 
 | |
| \begin{cmdlist}
 | |
| 	0 & \cname{WRITE}
 | |
| 	Load the shift registers and leave the \textit{Data} outputs in the ``trailing data'' state before sending a \textit{Store} pulse.
 | |
| 	&
 | |
| 	\begin{cmdreq}
 | |
| 		\cfield{u16} trailing data (packed pins)
 | |
| 		\item For each output (same size)
 | |
| 		\begin{pldlist}
 | |
| 			\cfield{u8[]} data to load
 | |
| 		\end{pldlist}
 | |
| 	\end{cmdreq}
 | |
| 	\\
 | |
| 
 | |
| 	1 & \cname{DIRECT\_DATA}
 | |
| 	Directly write to the \textit{Data} pin(s)
 | |
| 	&
 | |
|     \begin{cmdreq}
 | |
| 		\cfield{u16} values to write (packed pins)
 | |
| 	\end{cmdreq} \\
 | |
| 
 | |
| 	2 &
 | |
| 	\cname{DIRECT\_CLEAR}
 | |
| 	Pulse the \textit{Clear} pin & \\
 | |
| 
 | |
| 	3 &
 | |
| 	\cname{DIRECT\_SHIFT}
 | |
| 	Pulse the \textit{Shift} pin & \\
 | |
| 
 | |
| 	4 &
 | |
| 	\cname{DIRECT\_STORE}
 | |
| 	Pulse the \textit{Store} pin & \\
 | |
| \end{cmdlist}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |