Engineers Garage

  • Projects and Tutorials
    • Electronic Projects
      • 8051
      • Arduino
      • ARM
      • AVR
      • PIC
      • Raspberry pi
      • STM32
    • Tutorials
    • Circuit Design
    • Project Videos
    • Components
  • Articles
    • Tech Articles
    • Insight
    • Invention Stories
    • How to
    • What Is
  • News
    • Electronic Products News
    • DIY Reviews
    • Guest Post
  • Forums
    • EDABoard.com
    • Electro-Tech-Online
    • EG Forum Archive
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • EE Resources
    • DesignFast
    • LEAP Awards
    • Oscilloscope Product Finder
    • White Papers
    • Webinars
  • EE Learning Center
  • Women in Engineering

DIY: Digital IC Tester

By Mohit Mishra

Most of the engineering students who study digital logic design use digital logic IC’s in the lab as well as outside the lab in their  projects and other applications.
 
Sometimes while soldering these IC’s on the board, you may not get the proper output which would make you think whether it’s working properly or not.  In such a case,  it would be very  impractical to sit down and check each IC with the help of  LED and power supply.
 
The question is how will you do it in an effective way?
The answer to this question is simple, you don’t have to. Leave this work to microcontroller and a couple lines of code.
 
This is a project based on arm7 microcontroller, which tests the 74xx series IC. The coding includes testing of 7400, 7402, 7404, 7408, 7432, 7486 IC. It can be extended further based on the need.

This includes an extra board  with IC holder which holds the IC’s  that are to be tested.  It also includes some push button which tells the system which IC is being tested. For this, you just have to put in the IC and press the relative button to test  it. 

Prototype of LPC2148 ARM Microcontroller based Digital IC Tester

Fig. 1: Prototype of LPC2148 ARM Microcontroller based Digital IC Tester

Application:

This is very useful for testing the digital logic IC’s as there are multiple gates in each one of them and those are to be tested one at a time. In some cases we can have up to six gates, while in other cases we may have IC which takes up to 3 input.  It saves time and human effort for testing the  IC giving out the result instantaneously.
 
This includes an arm7 microcontroller (LPC2148), boards for the placement of test IC, and an LCD which displays the result.
 

The IC is placed in holder and the switch is pressed. Then a set of input is given to  its input pin and it observes the output pins.the output pins.

Image showing soldering on LPC2148 ARM Microcontroller board

Fig. 2: Image showing soldering on LPC2148 ARM Microcontroller board

BLOCK DIAGRAM:

Overview of LPC2148 ARM Microcontroller based Digital IC Tester

Fig. 3: Overview of LPC2148 ARM Microcontroller based Digital IC Tester

Components & Working

IC HOLDER:

The IC is put onto the holder, locked and then the switch is pressed. Its purpose is to hold the  IC in place during testing.

 

ARM LPC2148:

This is the heart of project and all the process is happening here itself. The features of this microcontroller are as follows.
 
FEATURES
 
• 16-bit/32-bit ARM7TDMI-S microcontroller in a tiny LQFP64 package.
 
• 40 kB of on-chip static RAM and 512 kB of on-chip flash memory.
 
• In-System Programming/In-Application Programming (ISP/IAP) via on-chip boot loader software.
 
• Embedded ICE RT and Embedded Trace interfaces offer real-time debugging with the on-chip Real Monitor software and high-speed tracing of instruction execution.
 
• USB 2.0 Full-speed compliant device controller with  2KB of endpoint RAM.
 
• Embedded ICE RT and Embedded Trace interfaces offer real-time debugging with the on-chip Real Monitor software and high-speed tracing of instruction execution.
 
• USB 2.0 Full-speed compliant device controller with  2KB of endpoint RAM.
 
• Two 10-bit ADCs provide a total of 14 analog inputs.
 
• Single 10-bit DAC provides variable analog output.
 
• Two 32-bit timers/external event counters (with four capture and four Compare channels each), PWM unit (six outputs) and watchdog.
 
• Low power Real-Time Clock (RTC) with independent power and 32 kHz clock input.
 
• Multiple serial interfaces including two UARTs, two Fast I²C-bus (400 Kbit/s), SPI and SSP with buffering and variable data length capabilities.
 
• Vectored Interrupt Controller (VIC) with configurable priorities and vector addresses.
 
• Up to 45 of 5 V tolerant fast general purpose I/O pins in a tiny LQFP64 package.
 
• 60 MHz maximum CPU clock available from programmable on-chip PLL with settling time of 100 us.
 
• On-chip integrated oscillator operates with an external crystal from 1 MHz to 25 MHz
 
• Power saving modes include- Idle and Power-down.
 
• Conversion time for  ADC is >=2.4us
 

LCD DISPLAY:

LCD (Liquid Crystal Display) screen is an electronic display module  that finds a wide range of applications. A 16×2 LCD display is very basic module and commonly used in various devices and circuits. These modules are preferred over seven segments and other multi segment LEDs. The reasons being: LCDs are economical; easily programmable; have no limitation of displaying special & even custom characters (unlike in seven segments), animations and so on.
 
A 16×2 LCD means it can display 16 characters per line and there are 2 such lines. In this LCD each character is displayed in 5×7 pixel matrix. This LCD has two registers namely, Command and Data.

The command register stores the command instructions given to the LCD. A command is an instruction given to LCD to do a predefined task like initializing it, clearing its screen, setting the cursor position, controlling display etc. The data register stores data to be displayed on the LCD. The data is the ASCII value of the character to be displayed on the LCD. Click to learn more about internal structure of an LCD.

 

WORKING:

Image showing LPC ARM Microcontroller based Digital IC Tester designed on PCB

Fig. 4: Image showing LPC ARM Microcontroller based Digital IC Tester designed on PCB

Keep the ic in place and press the relative key,  this gives the input to  its pins and reads the output.  It’s done by making pins which are connected to input pins to high and then observing the output.
 
To do this, read the data from io0pin register and take the operation which removes the data of bits unrelated to the output pins.  Match  the data to the pre stored value and if it comes out true then IC is good else it is bad and not useable.
 

MICROCONTROLLER BOARD:

I have been using ngx blue board which has core of arm lpc 2148.
 
The specifications are as follows.
 
• Dimensions: 127 X 127 mm2
 
• Two layer PCB (FR-4 material)
 
• Power: DC 6.5V with power LED On-board linear regulators generate +3.3V/500mA and +5V/500mA from power supply USB connector (as alternate power source)
 
• ISP and reset switch
 
• 12.0000 MHz crystal for MCU,32Khz crystal for RTC
 
• Extension headers for all microcontroller pins
 
• RS232 connector (2x), VGA connector, PS2 connector, 20pin – JTAG connector, SD/MMC card connector, USB type-B connector with link-LED
 
• All peripheral configurable via jumper
 
• Audio power amplifier
 
• 2 line X 16 character LCD
 
• Backlight control for LCD
 
• Configurable for manual and automatic program download (ISP) via serial port
 
• Two layer PCB (FR-4 material)
 
• 8 controllable LEDs on SPI

 

Project Source Code

###



#include <LPC214x.H>                       /* LPC214x definitions */
#include "lcd.h"
#define LCD_BACK_LIGHT_TIMEOUT 1000
#define LCD_BACKLIGHT (1 << 21)
#define LCD_BACK_LIGHT_DIR IO1DIR
#define LCD_BACK_LIGHT_SET IO1SET
#define LCD_BACK_LIGHT_CLR IO1CLR
#define LCD_DATA_DIR    IO0DIR
#define LCD_DATA_SET    IO0SET
#define LCD_DATA_CLR    IO0CLR
#define LCD_CTRL_DIR    IO1DIR
#define LCD_CTRL_SET       IO1SET
#define LCD_CTRL_CLR       IO1CLR
#define LCDRS            (1 << 24)
#define LCDRW            (1 << 23)
#define LCDEN            (1 << 22)
#define LCD_D4 (1 << 10)
#define LCD_D5 (1 << 11)
#define LCD_D6 (1 << 12)
#define LCD_D7 (1 << 13)
#define LCD_DATA_MASK           (LCD_D4 | LCD_D5 | LCD_D6 | LCD_D7)
#define LCD_BUSY_FLAG           LCD_D7
#define LCD_CONTROL_MASK        0x01C00000
/**
**************************************************************************
****1111
  Function Name : delay()
  Description :This function suspends the tasks for specified ticks. 
  Input :  ticks:no of ticks in multiple of 1 usec
            task: task to be suspended
  Output : void
  Note :
*******************************************************************************
*/
void delay(int count)
{
  int j=0,i=0;
  for(j=0;j<count;j++)
  {
    /* At 60Mhz, the below loop introduces
    delay of 10 us */
    for(i=0;i<35;i++);
  }
}
/**
********************************************************************************************
  Function Name : wait_lcd()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void wait_lcd( void )
{
  LCD_CTRL_CLR |=  LCDRS; 
  LCD_CTRL_SET |=  LCDRW |LCDEN;
  while(IO1PIN & LCD_BUSY_FLAG); /* wait for busy flag to become low */
  LCD_CTRL_CLR |= LCDEN | LCDRW;
  LCD_DATA_DIR |= LCD_DATA_MASK;
  delay(100);  
}
/**
********************************************************************************************
  Function Name : lcd_command_write()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void lcd_command_write( unsigned char command )
{
  unsigned char temp=0;
  unsigned int temp1=0;
  temp=command;
  temp=(temp>>4)&0x0F;
  temp1=(temp<<10)&LCD_DATA_MASK;
  LCD_CTRL_CLR = LCDRS;
  LCD_CTRL_SET = LCDEN;
  LCD_DATA_CLR = LCD_DATA_MASK;
  LCD_DATA_SET = temp1;
  delay(10000);
  LCD_CTRL_CLR = LCDEN;
  temp=command;
  temp&=0x0F;
  temp1=(temp<<10)&LCD_DATA_MASK;
  delay(100*2);
  LCD_CTRL_CLR |= LCDRS;
  LCD_CTRL_SET |= LCDEN;
  LCD_DATA_CLR = LCD_DATA_MASK;
  LCD_DATA_SET = temp1;
  delay(10000); 
  LCD_CTRL_CLR |= LCDEN;
  wait_lcd();
}
/**
********************************************************************************************
  Function Name : set_lcd_port_output()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void set_lcd_port_output( void )
{
  LCD_CTRL_DIR |= ( LCDEN | LCDRS | LCDRW );
  LCD_CTRL_CLR |= ( LCDEN | LCDRS | LCDRW ); 
  LCD_DATA_DIR |= LCD_DATA_MASK;
}
/* *
********************************************************************************************
  Function Name : lcd_clear()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void lcd_clear( void)
{
  lcd_command_write( 0x01 );
}
/**
********************************************************************************************
  Function Name : lcd_gotoxy()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
int lcd_gotoxy( unsigned int x, unsigned int y)
{
  int retval = 0;
  if( (x > 1) && (y > 15) )
  {
   retval = -1;
  }
 else
 {
  if( x == 0 )
  {
    lcd_command_write( 0x80 + y ); /* command - position cursor at 0x00 (0x80 + 0x00 ) */
  }
 else if( x==1 )
{
    lcd_command_write( 0xC0 + y ); /* command - position cursor at 0x40 (0x80 + 0x00 ) */
    }
   }
   return retval;
}
/**
********************************************************************************************
  Function Name : lcd_data_write()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void lcd_data_write( unsigned char data )
{
  unsigned char temp=0;
  unsigned int temp1=0;
  temp=data;
  temp=(temp>>4)&0x0F;
  temp1=(temp<<10)&LCD_DATA_MASK;
  LCD_CTRL_SET |= LCDEN|LCDRS;
  LCD_DATA_CLR = LCD_DATA_MASK;
  LCD_DATA_SET = temp1;
  LCD_CTRL_CLR |= LCDEN;
  temp=data;
  temp&=0x0F;
  temp1=(temp<<10)&LCD_DATA_MASK;
  LCD_CTRL_SET |= LCDEN|LCDRS;
  LCD_DATA_CLR = LCD_DATA_MASK;
  LCD_DATA_SET = temp1;
  LCD_CTRL_CLR |= LCDEN;
  wait_lcd();
}
/**
********************************************************************************************
  Function Name : lcd_putchar()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
*******************************************************************************************
*/
void lcd_putchar( int c )
{
  lcd_data_write( c );
}
/**
********************************************************************************************
  Function Name : lcd_putstring()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void lcd_putstring( unsigned char line, char *string )
{
  unsigned char len = MAX_CHAR_IN_ONE_LINE;
  lcd_gotoxy( line, 0 );
  while(*string != '' && len--)
  {
    lcd_putchar( *string );
    string++;
  }
}

/**
********************************************************************************************
  Function Name : lcd_backlight_on()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void lcd_backlight_on()
{    
  LCD_BACK_LIGHT_DIR |= LCD_BACKLIGHT;
  LCD_BACK_LIGHT_SET |= LCD_BACKLIGHT; 
}
/**
********************************************************************************************
 Function Name : turn_off_lcd_back_light()
 Description   : 
 Input         : 
 Output        : Void
 Note          :
********************************************************************************************
*/
void turn_off_lcd_back_light_cb(void)
{
  LCD_BACK_LIGHT_DIR |= LCD_BACKLIGHT;
  LCD_BACK_LIGHT_CLR |= LCD_BACKLIGHT;
}
/**
********************************************************************************************
  Function Name : init_lcd()
  Description   : 
  Input         : 
  Output        : Void
  Note          :
********************************************************************************************
*/
void init_lcd( void )
{
  set_lcd_port_output();
  delay(100*100);
  lcd_command_write(0x28);     /*   4-bit interface, two line, 5X7 dots.        */
  lcd_clear() ;                /*   LCD clear                                   */
  lcd_command_write(0x02);     /*   cursor home                                 */
  lcd_command_write(0x06);     /*   cursor move direction                       */
  lcd_command_write(0x0C) ;    /*   display on      */
  lcd_gotoxy(0, 0);
  lcd_clear(); 
  lcd_putstring(0,"PRESS THE KEY");
  lcd_putstring(1,"FOR SELECTION");
}


LCD.H




#ifndef _LCD_H
#define _LCD_H
#define MAX_CHAR_IN_ONE_LINE 16
enum ROW_NUMBERS
{
  LINE1,
  LINE2 
};
void init_lcd(void);
void lcd_putstring(unsigned char line, char *string);
void lcd_clear(void);
void lcd_backlight_on(void);
int lcd_gotoxy(unsigned int x, unsigned int y);
void lcd_putchar(int c);
#endif
###

 


Circuit Diagrams

Circuit-Diagram-Lpc2148-Arm-Microcontroller-Based-Digital-Ic-Tester


Filed Under: Electronic Projects
Tagged With: arm, LPC2148
 

Questions related to this article?
👉Ask and discuss on Electro-Tech-Online.com and EDAboard.com forums.



Tell Us What You Think!! Cancel reply

You must be logged in to post a comment.

HAVE A QUESTION?

Have a technical question about an article or other engineering questions? Check out our engineering forums EDABoard.com and Electro-Tech-Online.com where you can get those questions asked and answered by your peers!


Featured Tutorials

  • Designing Gate Driver Circuit and Switching Mechanism for Modified Sine Wave Inverter – (Part 9/17)
  • Completing Modified Sine Wave Inverter Design with Full Bridge Circuit and Step Up Transformer – (Part 10/17)
  • Designing an Offline UPS – Part (12 /17)
  • How to reduce Switching Time of a Relay – (Part 15/17)
  • Testing MOSFET – (Part 16/17)
  • Driving High Side MOSFET using Bootstrap Circuitry – (Part 17/17)

Stay Up To Date

Newsletter Signup

Sign up and receive our weekly newsletter for latest Tech articles, Electronics Projects, Tutorial series and other insightful tech content.

EE Training Center Classrooms

EE Classrooms

Recent Articles

  • Designing Gate Driver Circuit and Switching Mechanism for Modified Sine Wave Inverter – (Part 9/17)
  • Completing Modified Sine Wave Inverter Design with Full Bridge Circuit and Step Up Transformer – (Part 10/17)
  • Designing an Offline UPS – Part (12 /17)
  • How to reduce Switching Time of a Relay – (Part 15/17)
  • Testing MOSFET – (Part 16/17)

Most Popular

5G 555 timer circuit 8051 ai Arduino atmega16 automotive avr dc motor display Electronic Part Electronic Parts Fujitsu ic infineontechnologies integratedcircuit Intel IoT ir lcd ldr led maximintegratedproducts microchip microchiptechnology Microchip Technology microcontroller microcontrollers mosfet motor powermanagement Raspberry Pi remote renesaselectronics Research robot samsung semiconductor sensor software STMicroelectronics switch Technology vishayintertechnology wireless

RSS EDABOARD.com Discussions

  • Do you use C++ for device drivers in embedded systems?
  • MAX5389 resetting by noise
  • Help with Verilog replicate operator
  • Verilog/SV: Using an array as a set of individual registers and not RAM
  • How did they made the old manuals or magazines sketches?

RSS Electro-Tech-Online.com Discussions

  • Relaxation oscillator with neon or...
  • MOSFET gets hot and burns
  • LCD display on PICDEM 2 Plus board
  • software PWM
  • Positive and negative sides of voltage source
Engineers Garage
  • Analog IC TIps
  • Connector Tips
  • DesignFast
  • EDABoard Forums
  • EE World Online
  • Electro-Tech-Online Forums
  • Microcontroller Tips
  • Power Electronic Tips
  • Sensor Tips
  • Test and Measurement Tips
  • 5G Technology World
  • About Us
  • Contact Us
  • Advertise

Copyright © 2022 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Projects and Tutorials
    • Electronic Projects
      • 8051
      • Arduino
      • ARM
      • AVR
      • PIC
      • Raspberry pi
      • STM32
    • Tutorials
    • Circuit Design
    • Project Videos
    • Components
  • Articles
    • Tech Articles
    • Insight
    • Invention Stories
    • How to
    • What Is
  • News
    • Electronic Products News
    • DIY Reviews
    • Guest Post
  • Forums
    • EDABoard.com
    • Electro-Tech-Online
    • EG Forum Archive
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • EE Resources
    • DesignFast
    • LEAP Awards
    • Oscilloscope Product Finder
    • White Papers
    • Webinars
  • EE Learning Center
  • Women in Engineering