Welcome to IDI Electronica!!!



Welcome!!! IDI Electronica is a blog for my personal projects and articles to help electronics enthusiasts like me.

Bienvenidos!!! IDI Electronica es un blog con mis proyectos personales y artículos con el fin de ayudar a entusiastas de la electrónica como yo.

Monday, March 21, 2016

Divisor de Frecuencia por Número Impar con Ciclo de Trabajo de 50%

1. INTRODUCCION

En uno de mis artículos expliqué cómo dividir la frequencia de una señal de reloj para crear señales de reloj con frecuencias menores.  El concepto es muy simple, esperamos que cierto número de ciclos del reloj pasen y cambiamos nuestra señal de salida de 0 a 1, o de 1 a 0.  Por ejemplo,  la figura 1 describe el diagrama de tiempo de un divisor de frecuencia por 12.  Por cada 6 ciclos del reloj de entrada, el valor de la señal de salida cambia.


Fig 1. Diagrama de tiempo de divisor de frecuencia por 12


Si observamos el diagrama de tiempo, notamos que el contador de ciclos usa el borde de subida del reloj como referencia (instante en que el reloj cambia de 0 a 1).  Debido a ésto, el circuito es fácil de diseñar si la frecuencia es dividida por un número par.  Sin embargo, el circuito se vuelve más complicado si queremos dividir la frecuencia por un número impar.  Si observamos la figura 2, un divisor de reloj impar necesita usar el borde de subida y el de bajada del reloj.  Por lo tanto, un simple contador de bordes de subida no sirve en estos casos.


Fig 2. Diagrama de tiempo de divisor de frecuencia por 5


2. DESCRIPCION DEL CIRCUITO

Para dividir la frecuencia de un reloj digital por un número impar, necesitamos crear otras señales e implementar lógica secuencial y combinacional.

La forma más sencilla de entender cómo funciona el circuito es observando el diagrama de tiempo en la figura 3 y siguiendo las instrucciones que escribí a continuación:

- Nuestro circuito divide la frecuencia de un reloj por el número impar N.  En este ejemplo, N=5.

- La señal clk_in es nuestro reloj de entrada con frecuencia 500MHz y con ciclos de 2ns.

- El bus de señales Count es un contador de ciclos de entrada clk_in y reinicia a 0 cuando el contador llega a N-1. Para nuestro ejemplo, N-1 = 4, o sea 0100 en binario.

- La señal A es igual a 1 sólo cuando el valor en el contador Count es 0001.  Sino, es 0.

- La señal B es igual a 1 sólo cuando el valor en el contador Count es (N+1)/2.  Para nuestro ejemplo, (5+1)/2 = 3, o 0011 en binario.

- La señal Tff_A es un biestable T (T flip flop) activado por el borde de caída de la señal A.

- La señal Tff_B es un biestable T (T flip flop) activado por el borde de caída del reloj y sólamente cuando la señal B es 1.

- La señal clk_out es nuestro reloj de salida.  Para producir esta señal, usamos una puerta XOR entre las señales Tff_A y Tff_B.  La señal clk_out es alta cuando Tff_A y Tff_B son diferentes (10,01) y baja cuando ambas señas son iguales (11, 00). En nuestro ejemplo creamos una señal con frecuencia de 100MHz y ciclos de 10ns.


Fig 3. Diagrama de tiempo mostrando las señales usadas en divisor frecuencia por 5


Para una explicación más técnica de lo que hice en este circuito, les recomiendo que lean la hoja de aplicación AND8001-D publicada por ON Semiconductors.


3.  Implementación en Verilog

Para crear el circuito descrito en la sección anterior, debemos utilizar lógica secuencial (biestables, registros, etc) y lógica combinacional (puertas lógicas).

A continuación les dejo el código para el divisor de frecuencia por 5, el cual también se encuentra disponible en mi repositorio de Github  https://github.com/sphanlung/FPGA/blob/master/clk_div_odd.v 



module clk_div_odd(
input clk_in,
output  clk_out
    );

reg  [3:0] count = 4'b0;        //4-bit counter
reg    A1 = 0;
reg       B1 = 0;
reg     Tff_A = 0;
reg   Tff_B = 0;
wire   clock_out;
wire   wTff_A;
wire   wTff_B;

//Connects registers to wires for combinational logic
assign   wTff_A  = Tff_A;
assign   wTff_B  = Tff_B;

assign   clk_out = wTff_B ^ wTff_A; //XOR gate 

//Counter for division by N
always@(posedge clk_in)
begin
if(count == 4'b0100) //Count to N-1 (4) 
begin // Example: Use 4 to divide by 5        
    count <= 4'b0000;
end
else
begin
count <= count + 1;
end
end

//Set A to high for one clock cycle when counter is 0
always@(posedge clk_in)
begin
if(count == 4'b0000)
A1 <= 1;
else
A1 <= 0;
end

//Sets B to high for one clock cycle when counter is (N+1)/2
always@(posedge clk_in)
begin
if(count == 4'b0011) //Use (N+1)/2
B1 <= 1; //Ex: (5+1)/2 = 3
else
B1 <= 0;
end

//T flip flop toggles 
always@(negedge A1) // Toggle signal Tff_A 
begin  //whenever A1 goes from 1 to 0
Tff_A <= ~Tff_A;
end

always@(negedge clk_in)
begin
if(B1) // Toggle signal Tff_B whenever   
   begin //B1 is 1
Tff_B <= ~Tff_B;
end
end

endmodule




Fig 4. Diagrama de RTL generado por Xilinx ISE

Tuesday, March 15, 2016

10,000 view / 10 000 visitas

This month, the blog passed the 10,000 views. I want to thank you all for visiting IDI Electronica, especially those who comment on the posts or message me with questions since you keep the blog alive.

-Sergio



Este mes superamos las 10 mil visitas. Quiero agradecerles por el apoyo, especialmente a aquellos que dejan comentarios en los artículos o me mandan mensajes privados, ya que ustedes son los que mantienen vivo al blog.

-Sergio

Thursday, March 10, 2016

Frequency Divider by Odd Numbers with 50% Duty Cycle

1. Theory

Frequency or clock dividers are among the most common circuits used in digital systems.  The timing diagram in figure 1 (originally used in this article) describes a circuit that divides the input frequency by 12.  The circuit simply counts the rising edges of 6 input clock cycles(clk) and then toggles the output clock signal from 1 to 0 or vice-versa.



Fig 1. Timing diagram of frequency divider by 12


This works great when your input frequency is divided by an even number.  But things get a little more complicated when we try to divide the frequency by an odd number, since we can't simply divide the number of input clock cycles by 2.  If we observe the timing diagram describing a frequency divider by 5 in figure 2, the output clock toggles in the middle of the 3rd input clock cycle and before we are able to  complete our count.



Fig 2. Timing diagram of frequency divider by 5




2. Circuit Description

To divide a frequency by an odd number we will need to create a few more signals to use both sequential and combinational logic.
The easiest way of understanding the circuit is by observing the timing diagram below (figure 3):

- Assume we want to divide our frequency by N.  For this example, N=5.

- The signal clk_in is our input clock and each cycle is 2ns long, giving us a frequency of 500MHz.

- The signal bus Count is our counter and will reset to 0 after counting (N-1) clk_in cycles. For our example, our counter will count up to 4 (b'0100) since 0 also counts as a number.

- Signal A is set to high (1) whenever the counter is 1 (Count=0001). Otherwise, it stays low (0).

- Signal B is set to high (1) whenever the counter is (N+1)/2. For our example, we used Count=3 (b'0011) since (5+1)/2=3.

- Signal Tff_A is a T flip flop triggered by the falling edge of signal A. Whenever, A goes from 1 to 0, Tff_A is toggled.

- Signal Tff_B is a T flip flop triggered by the falling edge of clk_in only if B is high (1).  Whenever B is high, Tff_B will be toggled at the falling edge of the input clock.

- The signal clk_out is our output clock.  To produce this signal, we use an XOR gate between the signals Tff_A and Tff_B.  The output of an XOR gate is high (1) when the two input signals are different (01, 10) and low (0) if the signals are the same (00, 11).  Each cycle of the output clock takes 10ns, with a frequency of 50MHz.



Fig 3. Timing diagram showing all signals required for frequency divider by 5


A more technical explanation on how to divide clocks by odd numbers can be found in the application note AND8001-D published by ON Semiconductors.



3. Verilog Implementation


In order to create the circuit described in the previous section, we had to use both sequential circuits (flip flops, reg type variables) and combinational logic (gates, wire type variables).

The Verilog code for a Frequency Divider by 5 can also be downloaded from my Github repository at https://github.com/sphanlung/FPGA/blob/master/clk_div_odd.v 



module clk_div_odd(
input clk_in,
output clk_out
    );

reg  [3:0] count = 4'b0;        //4-bit counter
reg  A1 = 0;
reg     B1 = 0;
reg  Tff_A = 0;
reg  Tff_B = 0;
wire  clock_out;
wire  wTff_A;
wire  wTff_B;

//Connects registers to wires for combinational logic
assign wTff_A  = Tff_A;
assign wTff_B  = Tff_B;

assign clk_out = wTff_B ^ wTff_A; //XOR gate 

//Counter for division by N
always@(posedge clk_in)
begin
if(count == 4'b0100) //Count to N-1. 
begin // Example: Use 4 to divide by 5        
    count <= 4'b0000;
end
else
begin
count <= count + 1;
end
end

//Set A to high for one clock cycle when counter is 0
always@(posedge clk_in)
begin
if(count == 4'b0000)
A1 <= 1;
else
A1 <= 0;
end

//Sets B to high for one clock cycle when counter is (N+1)/2
always@(posedge clk_in)
begin
if(count == 4'b0011) //Use (N+1)/2
B1 <= 1; //Ex: (5+1)/2 = 3
else
B1 <= 0;
end

//T flip flop toggles 
always@(negedge A1) // Toggle signal Tff_A 
begin  //whenever A1 goes from 1 to 0
Tff_A <= ~Tff_A;
end

always@(negedge clk_in)
begin
if(B1) // Toggle signal Tff_B whenever   
   begin //B1 is 1
Tff_B <= ~Tff_B;
end
end

endmodule



Fig 4. RTL schematic generated by Xilinx ISE




Wednesday, February 10, 2016

Contador de Presiones de Botón Usando Pantalla de 7 Segmentos con 4 Dígitos y el Tiva C Launchpad

En el artículo anterior, explicamos cómo funciona una pantalla de siete segmentos simple y usamos el Tiva C Launchpad  y Keil µVision para demostrar un contador incremental.  En esta guía, vamos a usar el Launchpad para diseñar un contador de presiones de botón y mostrar la cuenta en una pantalla de 7 segmentos con 4 dígitos.


Fig 1.  Pantalla de 7 segmentos y 4 dígitos


1.  PANTALLA DE SIETE SEGMENTOS Y 4 DIGITOS

Si recordamos el artículo anterior, necesitamos 8 pines del microcontrolador para controlar una pantalla de siete segmentos simple (7 para los LEDs y 1 para conectar a la fuente de poder o tierra).  Esto significa que necesitaríamos 32 pines para controlar 4 pantallas.

La pantalla de 4 dígitos funciona de manera parecida, pero sólamente utiliza 11 pines (o más si la pantalla tiene puntos, dos puntos, etc).  Para lograr ésto, usamos 7 pines para controlar los 7 LEDs en los 4 dígitos al mismo tiempo.  Los otro 4 pines controlan cuál de los dígitos se va a encender.  Esto es más fácil de observar en el diagrama de circuito mostrado en la figura 2.

Para mostrar todos los números al mismo tiempo, el microcontrolador simplemente enciende continuamente cada uno de los dígitos por una fracción de segundo.  Cuando esto ocurre lo suficientemente rápido, nuestros ojos sólo detectan una imagen.  Este es el mismo concepto usado en las películas, donde varias imágenes son alternadas a alta velocidad para darnos la ilusión que la imagen se está moviendo.


Fig 2.  Mapa de pines y diagrama de circuito de pantalla de 7 segmentos, 4 dígitos y de anodo común 5641BH



2.  PROBANDO EL NUESTRA PANTALLA CON EL TIVA C LAUNCHPAD

2.1  DESCRIPCION

Para este proyecto vamos a usar el Tiva C Launchpad para diseñar una contador de presiones de botón y mostrar la cuenta en nuestra pantalla de 7 segmentos y 4 dígitos.

2.2  MATERIALES

- Tiva C Launchpad
- Placa de prueba (breadboard)
- 4 x Transistores NPN 2N3904
- 1 x pantalla 5641BH (pantalla de 7 segmentos y 4 dígitos de ánodo común)
- 4 x resistores 1KΩ
- 7 x resistores 47Ω


2.3  HARDWARE

El sistema utiliza 11 pines de salida del Launchpad para controlar la pantalla.  7 de esos pines van conectados directamente a la pantalla para controlar los 7 LED y los 4 pines van conectados a los transistores para conectar el riel de 3.3V a los pines de selección de dígito en la pantalla.  También vamos a usar el botón SW2 montado en el Launchpad.

La datasheet para la parte 5641BH puede ser descargada en este vínculo.

En la figura 3 tenemos el diagrama del circuito.  Noten que el botón no está incluído porque viene montado en el Launchpad.


Fig 3. Diagrama de circuito para contador de presiones de botón con pantalla 5641BH


2.4  SOFTWARE

Entra a mi repositorio en Github y encuentra el archivo SevenSegment2.c para descargar el código del microcontrodor a tu proyecto. Una vez más, las instrucciones para crear el proyecto se pueden encontrar en el artículo anterior.

El diagrama de flujo en figura 4 explica el funcionamiento del programa para el microcontrolador.


Fig 4.  Diagrama de flujo para código de microcontrolador









Thursday, February 4, 2016

Button Press Counter Using 4-Digit 7-Segment Display and Tiva C Launchpad

In the previous post, we explained how a single-digit seven-segment display works and we used the Tiva C Launchpad to test it.  In this guide, we will use the Tiva C Launchpad to drive a 4-digit 7-segment LED display using Keil µVision.

Fig 1.  Four-digit seven-segment display


1.  FOUR-DIGIT SEVEN-SEGMENT DISPLAYS

As we recall, we need 8 microcontroller pins to drive a single-digit 7-segment display (7 to control LEDs and 1 to power source or ground).  This means that using 4 single-digit displays would require a total of  32 microcontroller pins.

A 4-digit display works in a similar way, but is designed to be controlled by only 11 pins (or more if the display has periods, colons, etc).  To achieve this, we still use 7 pins to control the 7 LEDs in each of the digits at the same time and the other 4 pins control which of the digits will be on or off.  Obviously, the easiest way of understanding this circuit is by looking at the circuit diagram in figure 2.

To display all numbers at the same time, the microcontroller continuously turns on each of the digits for a fraction of a second.  When this is done fast enough, our eyes see only one image.  This is the same concept used by movies, where a series of pictures alternated at high speed give us the illusion that they are moving.

NOTE: A better explanation of how common-anode 7-segment displays work can be found in this guide.



Fig 2.  Pin layout and circuit diagram of common-anode 4-digit 7-segment display 5641BH



2. TESTING 4-DIGIT 7-SEGMENT DISPLAY WITH TIVA C LAUNCHPAD

2.1  DESCRIPTION

We will use the Tiva C Launchpad to design a button-press counter which will be displayed in the 4-digit 7-segment display.

2.2  MATERIALS

- Tiva C Launchpad
- Breadboard
- 4 x 2N3904 NPN Transistors
- 1 x 5641BH 4-digit 7-segment common-anode display
- 4 x 1KΩ resistors
- 7 x 47Ω resistors


2.3  HARDWARE

The system will use 11 output pins from the Launchpad to control the LED display.  We will connect 7 of the pins directly to the display for LED selection (A through G), and the other 4 pins will be connected to the NPN transistors to provide power to each of the digits from the +3V3 power rail.
For the button-press counter we will also be using the on-board switch SW2 included in the Launchpad.

The datasheet for the 5641BH 7-segment display can be found in this link.

The circuit diagram is shown below (figure 3). Notice the push-button isn't included in the diagram since it is already a mounted in the Launchpad.


Fig 3. Circuit diagram for our test system


2.4  SOFTWARE

Visit my Github repository and download or copy the code in the file SevenSegment2.c.  An explanation of how the code works can be found in the comments within the code and the flowchard in figure 4.

Instructions on how to create a project using Keil uVision 4 can be found in my previous 7-segment display guide.


Fig 4. Flowchart of microcontroller code







Sunday, January 24, 2016

Control de Pantalla de Siete Segmentos con el Tiva C Launchpad

En esta guía vamos a explicar cómo funciona una pantalla de 7 segmentos de LED.  Luego, vamos a programar una máquina de estados para probar la pantalla de 7 segmentos usando Keil μVision 4 y la placa Tiva C Launchpad.


Si quieres aprender o repasar cómo funcionan los LED (diodos luminosos), puedes visitar mi guía para diseño de circuitos con LEDs.


1. PANTALLA DE SIETE SEGMENTOS

Las pantallas de 7 segmentos son simplemente 7 luces LED contenidas en el mismo componente. Para controlar la pantalla simplemente tenemos que activar cada uno de los LEDs en diferentes combinaciones.


Fig 1. Pantalla de siete segmentos de LED


Para ahorrar espacio, los LEDs en las pantallas de 7 segmentos comparten uno de sus pines (ánodo o cátodo) ya que simplemente tenemos cortar la corriente en un lado para apagar el LED. Debido a eso, existen dos tipos de pantallas: De ánodo común (common-anode) o cátodo común (common-cathode). En pantallas de ánodo común, los ánodos de los LEDs en la pantalla están conectados a un sólo pin (normalmente a la fuente de poder). En pantallas de cátodo común, los cátodos de los LEDs están conectados (normalmente a tierra).



Fig 2. Diagrama mostrando ánodo y cátodo de LED


Fig 3. Diagrama representando los LEDs en pantalla de siete segmentos


En esta guía vamos a utilizar el componente LSD3221-11, una pantalla de siete segmentos con ánodo común.  Esta parte y su datasheet pueden ser encontradas en la página web de Jameco.

Primero haremos un corto repaso sobre el funcionamiento de LEDs.  Para encender un LED, el voltaje que aplicamos sobre el LED (Vs-Vc) debe de ser mayor al voltaje de adelanto (Vf) o forward voltage en inglés. Para eso podemos usar la ecuación Vs - Vc > Vf.  El voltaje de adelanto (Vf) puede encontrarse en la datasheet del LED.

En pantallas de ánodo común, todos los ánodos de los LED están conectados a un sólo pin que a su vez está conectado a la fuente de voltaje (Vs). Debido a eso, la única forma de controlar cada uno de los LEDs es subiendo el voltaje de los cátodos de cada LED para apagarlos.

Para probar esto simplemente usamos la ecuación Vs - Vc > Vf.  Si el voltaje Vc es igual a la fuente Vs, la diferencia entre Vs y Vf es cero y por lo tanto no sería mayor al voltaje Vf.  Por lo tanto, el LED se encenderá si el voltaje de Vc es alto (igual a Vs) y se apagará si el voltaje es bajo (igual a tierra).


Fig 4. Diagrama de circuito de LED


Para controlar el voltaje del pin Vc con el microcontrolador, simplemente conectamos el cátodo del LED (usando una resistencia en serie) a uno de sus pines de salida.



2. PROBANDO LA PANTALLA CON EL TIVA C LAUNCHPAD

2.1  MATERIALES

- 7 resistencias de 47Ω (usar 120Ω si tu fuente de poder es de 5V)
- 1 breadboard
- Tiva C Launchpad
- Pantalla de 7 segmentos de ánodo común (LSD3221-11)


2.2  HARDWARE

El diseño de este proyecto es bien simple.  Vamos a usar el riel de +3.3V del Launchpad como fuente de poder para la pantalla y resistencias en serie con los cátodos de cada LED para ser conectadas a los pines de salida del microcontrolador.

Para calcular el valor de cada resistencia, buscamos el voltaje de adelanto (Forward voltage, Vf) y la corriente de adelanto (forward current, If) en el datasheet del LED (figura 5) y simplemente aplicamos la ley de Ohm.


Fig 5. LSD3221 datasheet power ratings


R = (Vs - Vf) / If = (3.3 - 2.1) / 2.5 = 48 Ohm (el valor estándar más cercano es 47Ω).


Luego, utilizamos el datasheet de nuevo para identificar los pines de la pantalla y ver cómo conectarla al Tiva C.  Debido al número de pines disponibles en el Launchpad, vamos a usar el Puerto B (pines B0 a B6) del Launchpad para nuestro diseño.  Además, omitiremos los LEDs utilizados para los puntos a la izquierda y a la derecha de la pantalla (LD y RD) por conveniencia.




Fig 6. Datashhet del LSD3221 definiendo los pines


Fig 7. Diagrama eléctrico de nuestro circuito



2.3  PROGRAMACION

1. Abrir Keil µVision 4 y crear un proyecto nuevo. Seleccionar el microcontrolador TM4C123GH6PM y aceptar el archivo de inicio (Startup project file) cuando el programa lo ofrezca.

NOTA: Para instrucciones más detalladas para crear proyectos, visita mi guía Parpadear un LED Usando el Tiva C Launchpad.


2. Usando el explorador de Windows, entra a la carpeta donde está instalado Keil, busca el archivo system_TM4C123.c y cópialo a la carpeta donde tienes guardado tu proyecto.  En seguida, agrega el archivo a tu proyecto usando Keil.

3. Visita mi repositorio en Github en https://github.com/sphanlung/TivaC/blob/master/SevenSegment1.c y descarga el archivo SevenSegment.c (o copia el texto a un archivo nuevo en Keil).  Agrega el archivo a tu proyecto.

NOTA: El código contiene comentarios en inglés explicando cómo funciona.  Si tienes preguntas, usa la secciones de los comentarios y te responderé apenas me sea posible.

4. En Keil, haz click en Project y luego Build Target para compilar el código.

5. Si el código compila sin errores, haz click en Project otra vez y luego en Options for Target 'Target 1'.  Cuando se abra la ventana, busca la pestaña de Utilities y bajo la opción Configure Flash Menu Command, desmarca la casilla Use Debug Driver box.  Luego, selecciona Stellaris ICDI bajo Use Target Driver for Flash Programming y presiona OK.

6. Finalmente, haz click en Flash y luego Download.  Esto cargará el código al microcontrolador.



Saturday, January 9, 2016

Driving Single Digit 7-Segment Display with the Tiva C Series Launchpad

In this guide, I will explain how a basic 7-segment LED display works and then I we will write some code to create a finite state machine to test our display using the Tiva C Series Launchpad and Keil µVision 4.

Also, if you are not very familiar with LEDs, you can read my LED Circuit Design tutorial.


1. SEVEN-SEGMENT LED DISPLAYS

7-segment displays are simply 7 LEDs placed in one same package.  To change the displayed value, we simply turn on or off different combinations of LEDs.


Fig 1. Seven-segment LED displays


There are two types of single-digit 7-segment displays: common anode and common cathode.  In common anode displays, the anode of the LEDs are connected to one pin (usually connected to a power source).  In common cathode displays, the cathodes are connected to one pin (usually connected to ground).



Fig 2. Diagram representation of LED


Fig 3. Diagram representation of LEDs in 7-segment display


For this tutorial, we will be using the LSD3221-11, a common anode 7-segment display.  This component and its datasheet can be found at Jameco's website.

To turn on a LED, the voltage across it must be higher than its forward voltage (Vs - Vc > Vf).  Since  common anode configurations usually have the anode pin tied to the power rail (Vs), we need to use the cathode pin (Vc) to turn it on or off.

Fig 4. Simple LED circuit diagram

If the voltage at the cathode (Vc) is equal to the anode (high), the voltage across the LED (Vs - Vc) would be zero.  Therefore, the voltage across the LED would be lower than its forward voltage and the LED will be turned off.  If the voltage at the cathode (Vc) is low or equal to zero, the voltage across the LED would higher than the forward voltage and the LED will turn on.

This can be easily accomplished using a microcontroller by tying one of its output pins to the resistor connected to the cathode of the LED (Vc).  If the output is high, our LED will turn off.  If the output is low, the LED will turn on.


2. TESTING THE DISPLAY WITH THE TIVA C LAUNCHPAD

2.1  MATERIALS

- 7 x 47Ω resistors (use 120Ω if using 5V source)
- 1 x breadboard
- Tiva C Launchpad
- Common-anode single-digit 7-segment display (e.g. LSD3221-11)


2.2  HARDWARE

The design of this project is very simple, we will be using the +3.3V rail of the Launchpad to power the 7-segment display and we will connect each of its cathode pins to the outputs pins of the microcontroller.  Since we are dealing with LEDs, we will also need to connect series resistors to control the amount of current flowing through each LED.

To calculate the value of the resistors we had to find the forward voltage (Vf) and current (If) of the LEDs in the datasheet (figure 5).


Fig 5. LSD3221 datasheet power ratings


R = (Vs - Vf) / If = (3.3 - 2.1) / 2.5 = 48 Ohm (closest standard value is 47Ω).


Next, we use the datasheet again to see how to connect the display to the Launchpad. Because of pin availability in the Tiva C Launchpad, we will be using pins B0 to B6 (port B) in the microcontroller. Also,we won't be using the Left Dot (LDP) and Right Dot (RDP) LEDs for this tutorial out of convenience.


Fig 6. LSD3221 datasheet device pinout


Fig 7. Circuit diagram for our project



2.3  PROGRAMMING

1. Open Keil µVision and create a new project. Select the TM4C123GH6PM microcontroller and accept the Startup project file when prompted.

NOTE: You can find the steps to create a new project in more detail in my Blinking an LED Using the Tiva C Launchpad tutorial.


2. Go to the Keil installation folder, find the file system_TM4C123.c and copy it to your project folder.  Next, add that file to your new project.

3. Visit my Github repository at https://github.com/sphanlung/TivaC/blob/master/SevenSegment1.c to download the file SevenSegment.c and add the file to your project.

NOTE: The code contains comments explaining how the program works. Feel free to contact me or write in the comments section if you have any questions.

4. Next, go to Project and click Build Target to compile the code.

5. If you get no errors, go to Project again and click Options for Target 'Target 1'.  Find the Utilities tab and under Configure Flash Menu Command, uncheck the Use Debug Driver box.  Then, under Use Target Driver for Flash Programming select the Stellaris ICDI driver and hit OK.

6. Finally, click on Flash and then Download.  This will load the compiled code to the microcontroller.