Skip to main content

PCB LAMINATOR CONTROLLER CODE AND PCB PRINTING


PCB ASSISTANT LAMINATOR CONTROL: 

To make smart looking PCB's, all you need is: A computer, a laser printer, copper clad board, etchant, A3/A4 laminating machine and some  glossy photo paper. You can buy special film for making PCB's, but I have found that the glossy paper gives better results. I use photo quality glossy paper for inkjet printers.

I got an  A3/A4 laminating machine for about $40(N 8000) in the computer store last week, for my sine wave mother board production, and i needed to produce a total sum of 50 pcs control boards for a new consumer of mine... then, i got tried of the forward and the reverse of a single control board for about 25 times  to get it done... well, i was able to press about 12pcs  in 2 days... then i taught of making a pcb  assistant laminator control  with a lcd display...

Use a laser printer to print the image on the glossy side of the photo paper. Clean the copper clad board with steel wool or very fine wet sandpaper. Dry the board thoroughly. Make sure that the board is clean and free from fingerprints. Place the photo paper face down on the copper clad board. Use masking tape to hold the paper in position. Don't use vinyl tape. Place the board on a flat surface. You will be using a very hot iron, so don't use the dining room table. I use the back of an old telephone directory. Use a hot clothes iron to transfer the track pattern from the paper to the copper board. Don't be afraid to use lots of heat and pressure. Allow the board to cool. Don't be tempted to lift the paper. Put the board in a container full of warm soapy water. After about twenty minutes the paper will begin to dissolve and disintegrate. Carefully remove the paper from the copper board. Rinse under a cold tap to remove paper residue. You may need to touch up any broken tracks with an etch resist pen. I use a fine Staedtler laundry marker.

VIDEO: =https://youtu.be/cbb-fya8asU



The featuring M.C.U is the pic16f876a:



Circuit


Simulation test




Control board



Pcb design 1


Pcb design 2



Old design


New design 1


New design 2


New design 3


New design 4

Code written in picbasic pro

'****************************************************************
'*  Name    : LAMINATING MACHINE.BAS                            *
'*  Author  : AKINSINMIDE IMOLEAYO                              *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 5/31/2015                                         *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'F876A

Define   OSC 4          ' 4MHz crystal used

' Define ADCIN parameters
Define ADC_BITS     10    ' Set number of bits in result
Define ADC_CLOCK    3     ' Set clock source (3=rc)
Define ADC_SAMPLEUS 50   ' Set sampling time in uS   

'--------------[LCD DEFINES]----------------------
DEFINE LCD_DREG PORTC ' LCD Data bits on PORTC
DEFINE LCD_DBIT 4 ' PORTB starting address
DEFINE LCD_RSREG PORTC ' LCD RS bit on PORTC
DEFINE LCD_RSBIT 2 ' LCD RS bit address
DEFINE LCD_EREG PORTC ' LCD E bit on PORTC
DEFINE LCD_EBIT 3' LCD E bit address
DEFINE LCD_BITS 4 ' LCD in 4-bit mode
DEFINE LCD_LINES 2

'-------------[PORT INITIALIZATION]-----------------
TRISA = 001111      ' Set PORTA as  INPUT AND OUTPUT
ADCON1 = %10000010  ' Set PORTA analog and right justify result
PORTB = 000000     'set PORTB as output
TRISB = 001111    'set TRISB as both input and output

'VARIABLE ------------------------------
A VAR WORD : A = 0
B VAR WORD : B = 0
 LED_FLASH VAR BYTE
 BT VAR WORD : BT = 0
 BT1 VAR WORD : BT1 = 0
 BT2 VAR WORD : BT2 = 0
 UNIT VAR WORD [40] : UNIT = 0
 L_UNIT VAR WORD : L_UNIT = 0
 W_UNIT VAR WORD : W_UNIT = 0
 R_UNIT VAR WORD : R_UNIT = 0
 RUN_UNIT VAR WORD :  RUN_UNIT = 0
 COUNTEXIT VAR WORD : COUNTEXIT = 0
 COUNTOK VAR WORD : COUNTOK = 0
 COUNTRUN VAR WORD : COUNTRUN = 0
 COUNT_EXIT VAR WORD : COUNT_EXIT = 0
 L0 var word : L0 = 0

'----------- [PORT B] -------------
BUZZER VAR PORTB.7
FORWARD VAR PORTB.6
BACKWARD VAR PORTB.5
ON_OFF VAR PORTB.4
OK_KEY VAR PORTB.3
EXIT_KEY VAR PORTB.2
UP_KEY VAR PORTB.1
DOWN_KEY VAR PORTB.0

'----------- [PORT C] -------------
WORKING_LED VAR PORTC.0
FINISHED VAR PORTC.1
BUZZ_DELAY CON 120

'---------[LCD INITIALIZATION]-----------
LCDOUT $FE,1 ' CLEAR SCREEN
LCDOUT $FE,2
PAUSE 1000          ' Wait 1 second

LOADING:
'FOR LED_FLASH = 0 TO 5
HIGH WORKING_LED : PAUSE 600
LOW WORKING_LED : PAUSE 300
'NEXT LED_FLASH
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 200
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 200
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2

'---------------[ PROGRAM START HERE ]--------------------
MAIN: pause 10
high  ON_OFF
        LCDOUT $FE,1 ' CLEAR SCREEN
          pause 200 
LCDOUT "*****************"
LCDOUT $FE, $C0 : LCDOUT "|ACE TECHNOLOGY|" : PAUSE 2000 : LCDOUT $FE,1
LCDOUT " LAMINATING PCB "
LCDOUT $FE, $C0 : LCDOUT " PRO. ASSISTANT " : PAUSE 2000 : LCDOUT $FE,1
' ::::::::::::::::::::::::::::::::::::::::::::::::::::::::

MEASURE:
LCDOUT $FE,1 ' CLEAR SCREEN
PAUSE 2
LOW BACKWARD
PAUSE 120
LCDOUT "PLEASE ENTER PCB"
LOW FINISHED : low WORKING_LED  : HIGH FORWARD

GET_LENGTH:
pause 50 : GOSUB GET_KEY
L_UNIT = UNIT
LCDOUT $FE, $C0 : LCDOUT "LENGTH(S): " , DEC2 UNIT ," CM" : PAUSE 100
IF OK_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2
GOTO GET_WIDTH1
ENDIF
GOTO GET_LENGTH

GET_WIDTH1: PAUSE 2
UNIT = 0
GET_WIDTH:  
pause 50 : GOSUB GET_KEY
W_UNIT = UNIT
LCDOUT $FE, $C0 : LCDOUT "WIDTH(S) : " , DEC2 UNIT ," CM" : PAUSE 100
IF OK_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2
GOTO START1
ENDIF
GOTO GET_WIDTH

GET_KEY: 
PAUSE 50

IF UP_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2
UNIT = UNIT + 1
IF UNIT => 40 THEN UNIT = 40          'maximun no of times
ENDIF

PAUSE 50

IF DOWN_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2
IF UNIT =< 0 THEN
UNIT = 0
GOTO GET_KEY
ENDIF
UNIT = UNIT - 1
ENDIF

PAUSE 50

IF EXIT_KEY = 0 THEN
COUNT_EXIT = COUNT_EXIT + 1
IF COUNT_EXIT = 2 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 10
GOTO REMOVE
ENDIF
 ENDIF
RETURN


START1:
low FORWARD
LOW FINISHED : low WORKING_LED
LCDOUT $FE,1 ' CLEAR SCREEN

START:
PAUSE 2
LCDOUT "LENGTH(S): " , DEC2 L_UNIT ," CM"
LCDOUT $FE, $C0 : LCDOUT "WIDTH(S) : " , DEC2 W_UNIT ," CM" : PAUSE 1200
LCDOUT $FE,1 ' CLEAR SCREEN

FOR COUNTOK = 0 TO 10
LCDOUT "    PRESS OK    "
LCDOUT $FE, $C0 : LCDOUT "  TO  CONTINUE  ": PAUSE 120
IF OK_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 3000
GOTO RUN
ENDIF
NEXT COUNTOK 
LCDOUT $FE,1 ' CLEAR SCREEN

FOR COUNTEXIT = 0 TO 10
LCDOUT "   PRESS EXIT   "
LCDOUT $FE, $C0 : LCDOUT "   TO  CANCEL   ": PAUSE 120
IF EXIT_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 10
GOTO MEASURE
ENDIF
NEXT COUNTEXIT
LCDOUT $FE,1 ' CLEAR SCREEN

GOTO START

RUN:
LCDOUT $FE,1 ' CLEAR SCREEN
PAUSE 2  : UNIT = 0
LCDOUT "  PRESS OK !!!  "

GET_RUN:
pause 10 : GOSUB GET_KEY
LCDOUT $FE, $C0 : LCDOUT "COUNT: " , DEC2 UNIT ," TIMES"
IF OK_KEY = 0 THEN              
RUN_UNIT = UNIT
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2
LCDOUT $FE,1 ' CLEAR SCREEN
GOTO LAMINATE
ENDIF
GOTO GET_RUN

LAMINATE :             ' laminating starts here
LOW FINISHED : high WORKING_LED  : LOW FORWARD
PAUSE 1500
LCDOUT $FE,1 ' CLEAR SCREEN
IF RUN_UNIT < 1 THEN GOTO DONE
LCDOUT "<<< WORKING. >>>"
LOW FINISHED : HIGH WORKING_LED
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 3000
HIGH FORWARD :  PAUSE 4000
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2
LOW FORWARD : PAUSE 4000

'|||||||||||||||||||||||||||||||||||||||||||||||||
'    CALCULATE  MOVEMENT
L_UNIT = L_UNIT - 1
A = 1580 * L_UNIT
B = 1000
'||||||||||||||||||||||||||||||||||||||||||||||||

RUN_LAMINATE:

FOR COUNTRUN = 1 TO RUN_UNIT
LCDOUT "<<< WORKING. >>>"
LCDOUT $FE, $C0 : LCDOUT "COUNT ON : " , DEC2 COUNTRUN,"/",dec2 RUN_UNIT
IF EXIT_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 2
LCDOUT $FE,1 ' CLEAR SCREEN                        
UNIT = 0
L_UNIT = 0
W_UNIT = 0
R_UNIT = 0
LCDOUT $FE, $C0 : LCDOUT " TASK CANCELLED " : PAUSE 2500
GOTO MEASURE
ENDIF

MOVE_FORWARD:                     
HIGH FORWARD : PAUSE A
LOW FORWARD  : PAUSE B

MOVE_BACKWARD:
HIGH BACKWARD : PAUSE A
LOW BACKWARD  : PAUSE B

LCDOUT $FE,1 ' CLEAR SCREEN
pause 1000
NEXT COUNTRUN

REMOVE:
L0 = 0
LOW FINISHED : high WORKING_LED  : LOW FORWARD
PAUSE 800
LCDOUT $FE,1 ' CLEAR SCREEN
PAUSE 200
HIGH BACKWARD
LCDOUT " PLEASE WAIT !!!"
LCDOUT $FE, $C0 : LCDOUT " EJECTING BOARD "
    for L0 = 0 to 12  ' BLINK  AND ROLL BACK DELAY
        lcdout $fe,$8
        pause 450
        lcdout $fe,$c
        pause 500
     next L0
       LOW BACKWARD
       pause 500
COUNT_EXIT = 0    :L0 = 0
COUNTOK = 0  : COUNTEXIT = 0
LCDOUT $FE,1 ' CLEAR SCREEN



DONE:
HIGH BUZZER : PAUSE BUZZ_DELAY : LOW BUZZER  :PAUSE 300
HIGH FINISHED : LOW WORKING_LED : low FORWARD
'LCDOUT "  PRESS EXIT!!! "
LCDOUT " TASK COMPLETED "
HIGH BACKWARD

FOR COUNTOK = 0 TO 10
LCDOUT $FE, $C0 : LCDOUT " <<OK>> TO REDO ": PAUSE 120
IF OK_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 1200
LOW BACKWARD
PAUSE 1000
LOW FORWARD
PAUSE 2000
L_UNIT = L_UNIT + 1
GOTO LAMINATE        ' LAMINATED AGAIN
ENDIF
NEXT COUNTOK 

FOR COUNTEXIT = 0 TO 10
LCDOUT $FE, $C0 : LCDOUT "<EXIT> TO CANCEL": PAUSE 120
IF EXIT_KEY = 0 THEN
HIGH BUZZER :PAUSE BUZZ_DELAY :LOW BUZZER  :PAUSE 1200
LOW BACKWARD
UNIT = 0
L_UNIT = 0
W_UNIT = 0
R_UNIT = 0
PAUSE 1000
LOW FINISHED : low WORKING_LED  : HIGH FORWARD   : PAUSE 1000
LCDOUT $FE,1 ' CLEAR SCREEN
PAUSE 300 : GOTO MEASURE
ENDIF
NEXT COUNTEXIT 

GOTO DONE

END



CODE: https://www.dropbox.com/s/ewoa62jzrqusc7a/laminate%20code.txt?dl=0

HEX: https://onedrive.live.com/redir?resid=7B2431F2BDE45654!110&authkey=!AMetcTYhV7fHyUw&ithint=file%2cHEX

PCB:  https://onedrive.live.com/redir?resid=7B2431F2BDE45654!108&authkey=!AByhjoC4T7mEsf4&ithint=file%2cpdf



Comments

Popular posts from this blog

3 Channels Audio Splitter Amplifier Circuit Diagram using TL084

This is the schematic diagram of 3 channels audio splitter amplifier circuit which built using op-amp IC TL084. The 3 channels amplifier output distribution applies a single TL084.   3 Channels Audio Splitter Amplifier Circuit Diagram The very first step is to capacitive coupling having a p. 1.0 ~ electrolytic capacitor. The entries are railways Vee Y2 or 4.5 V. This enables working with an individual 9V power source. A voltage gain of 10 (1 M?/100 Kohm) is obtained in the first stage, as well as the other three floors are connected as a unity gain voltage followers. Every single output stage drives independently through an amplifier output 50 pF capacitor towards the resistance of 5.1 k ohm load. The response range is flat from 10 Hz to 30 kHz.

Simple But Automatic Load Sensing Power Switch

This circuit will automatically switch on several mains-powered "slave" loads when a "master" load is turned on. For example, it will switch on the amplifier and CD player in a stereo system when the receiver is turned on. It works by sensing the current draw of the "master" device through a low value high wattage resistor using a comparator. The output of that comparator then switches on the "slave" relay. The circuit can be built into a power bar, extension cord or power center to provide a convenient set of "smart" outlets that switch on when the master appliance is powered (turn on the computer monitor and the computer, printer and other peripherals come on as well). Automatic Load Sensing Power Switch Circuit Diagram Parts List: Notes: This circuit is designed for 120V operation. For 240V operation, resistors R2 and R6 will need to be changed. A maximum of 5A can be used as the master unless the wattage of R1 is increased S1 provid...

RF amplifier protection

RF amplifier protection I have developed the protection circuit for the EB104 amplifier I am working on, after I finally had some time to design and test a few models. The main requirements have been: - protection in case of high temperature; - protection in case of high SWR; - protection in case of wrong output filter selection; - simple design (i’m a fan of the whole K.I.S.S. rule of thought), able to work in strong electromagnetic fields, reliable, inexpensive. Because i will be using the same directional coupler i have used in the SWR meter (the one made on PCB) wich is directly influenced by the signal frequency, and because i want full HF coverage, i cannot just measure the reflected signal and make a circuit cut the amplifier when it goes over a limit; on 28Mhz the coupler generates roughly 4 times more voltage that let’s say in 7Mhz. So a system that compares direct and reflected signal and triggers when the latter is percentually too high was needed, therefore an operational a...