Digital trainer kit
|

I made this Cool Digital Trainer Kit

I know the struggle of an electronics student while learning and practicing the digital circuits. In digital circuit we need a lot of external input/ output interface and different clock frequencies. That’s why I designed this digital trainer kit. Which consists of a lot of onboard helping elements. I want to keep it minimal that is why I go with JLCPCB SMT assembly service.

mini_IMG_5619.png

It is the first version of kit which work on a stable logic 5volt. And because of operational amplifier here the kit has dual rail power supply feature. In center 400 pin breadboard space for mounting different ICs. Transformer input, SMD led Input/ output and DIP selection switch for input. Then I added few more features like BCD to 7 segment decoder and CLOCK frequency generator with feedback display.

ice_screenshot_20230310-204529.png

Here the inputs and outputs LEDs are directly coupled with logic 5 volt but to make it more stable we can add switching transistors to it. And in the PWM/ clock generator a dedicated DDS generator can improve the performance as well as accuracy.

KIT features:

mini_IMG_5624.png

1) 8-bit input

2) 8-bit output

3) BCD to 7 segment decoders

4) Dual rail power supply

5) Headers for power Input/output

6) Clock generator with display

7) 400 pin Breadboard space

8) Minimal size

Circuit diagram:

mini_IMG_5625.png

Here you can find the circuit for this kit, I replicate a Arduino Clock generator project in this to make a stable clock for digital circuit testing. This can produce a clock by dividing the Arduino 16Mhz crystal clock in different small units. Duty cycle and frequency of this clock circuit can be selected through 3 tactile switches.

ice_screenshot_20230318-215000.png

The main reason to get the PCB service from JLCPCB is to minimize the size of board and to get the best quality out of it. The 8 channel inputs and outputs are turned on a logic voltage (not specific one 3.3-7v). Then a BCD to 7 segment convertor (74LS47) is there which is to verify the counter operations. In the power section a 3 wire transformer input pins, full bridge rectifier, dual power supply output and 5volt regulator with on/off slide switch is there. A lot of connections may produce noise which may cause problems in circuit operation and device behaviour which can be reduced by some power line filtering capacitors.

PCB and Gerber files design:

mini_IMG_5620.png

The files are designed in EasyEDA and fabricated by JLCPCB SMT assembly, because there are a lot of small components which may increase the soldering and assembling time. JLCPCB SMT assembly simply do a great job the cost of per soldering joint is around $0.004 and PCB assembly services starting from just $8.

PCB.png

If you want to make this kit here are the Gerber files which can be used to place the order directly. All the info about the code is shared on my GitHub page. Or you can download the PCB files and code from here.

Programming the clock:

Here Arduino’s atmega328p as a microcontroller is used for the clock interface, and new chip does not have bootloader. First the bootloader is burned through the other microcontroller (Arduino board) and then we flash the code in it. All the programming headers are given in the back side of PCB which can be directly connected to external MCU via headers or jumpers. See from here how to burn bootloader and upload the code.

Arduino code for clock:

All the required libraries can be directly downloaded from the manage library section under the tools menu.

#include <TimerOne.h>
#include <Wire.h> 
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
unsigned long t=1000,f,k=512;// default 1000 μs (1000 Hz), meander, pulse 

byte k1,kn,kn1,kn2;
int drive,drive0;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup()
{ 
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  pinMode(9, OUTPUT);
  pinMode(7,INPUT);
  pinMode(4,INPUT); 
  pinMode(2,INPUT);
}
void loop()
{
  Timer1.initialize(t); // period    
  Timer1.pwm(9, k); // k - fill factor 0-1023. 
  kn=digitalRead(7); 
  kn1=digitalRead(4); 
  kn2=digitalRead(2);

  if(kn==HIGH){ // decreasing the period 
    drive++;
    if(drive<30){ 
      t=t-1;  
    }
    // if the button is held for a long time, the correction of the pulse 


    else if(drive>30 && drive<60 ){ 
      t=t-10; 
    }
    else if(drive>=60 && drive<100){
      t=t-100;
    }
    else if(drive>=100){
      t=t-1000;
    }
  }
  else{
    drive=0;
  }

  if(kn1==HIGH){// adding a period 
    drive0++;
    if(drive0<30){
      t=t+1; 
      // if the button is held for a long time, the correction of the 

    }
    else if(drive0>30 && drive0<60 ){ 
      t=t+10; 
    }
    else if(drive0>=60 && drive0<100){
      t=t+100;
    }
    else if(drive0>=100){
      t=t+1000;
    }
  } 
  else{
    drive0=0;
  }
  if(t==0 || t>300000){ // limiting the pulse duration to the minimum, if 

    t=1;
  }
  if(t>200000 && t<300000){ // limiting the pulse duration to the 

    t=200000;
  } 
  f=1000000/t; // calculate the frequency 
  k1=k*100/1024; // calculate% fill factor

  if(kn2==HIGH){// button for adjusting the fill factor (in a circle from 


    k=k+16;// step 16 out of 1024 (you can do 8 for smoother adjustment)
  }
  if(k==1024){
    k=0;
  }
// displaying information on the indicator
  display.clearDisplay();
  display.setTextSize(1);             
  display.setTextColor(SSD1306_WHITE);       
  
  display.setCursor(0,0);             
  display.print("Freq: ");
  display.setCursor(30,0);             
  display.print(f);
  display.setCursor(0,20);             
  display.print("DUTY: ");
  display.setCursor(30,20);             
  display.print(k1);
  display.display();

}

PCB assembly:

mini_IMG_4899.png

Then I mounted the other small headers, switches, screen and microcontroller chip. And after that I stick the breadboard here on the PCB and our digital kit is complete. Now we can make any digital circuit very simply like flip flop, counters and shift register and test their operation on this kit.

Working and testing the kit:

mini_IMG_5628.png

Firstly, I tested all the voltages which I should also recommend whenever working with electronics. The input/ output and BCD counter and clock all the components are working well. In the next version I will add a stable adjustable clock with sine and triangle wave generator function in this. May be a big screen and switching transistor for better interface and accuracy. You can also connect the external screen to this as shown here.

mini_IMG_5630.png

Ordering procedure:

Download the Gerber files from here > Upload the files to JLCPCB > Select the material, color and finishing > select PCB assembly > Upload BOM and CPL > Select parts and then add to cart.

ice_screenshot_20230318-221642.png

Checkout using online payment methods and get your PCB within a week after dispatching. Sign-up using this link to JLCPCB and get worth of $54 new user coupons as a reward.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *