Author Archives: circuitous

Fume extractor

I’ve used the usual free-standing table top fume extractors, but they’re noisy and always seem to be in the way.

So, when I was reconfiguring my bench, I built the extractor into it.

Extractor_side

It consists of a cheap $10, bathroom vent fan with a couple of PVC connections from the intake that run through the front of the bench.  From the exhaust side, a long pvc pipe runs along the back of the bench, and blows it against the floor 6 feet away.  Sorry, no pictures of the steup on the back of the bench… although it is on wheels, the fully loaded bench weighs a few hundred pounds, so I don’t move it often.

Extractor_front

The intake is Loc-Line anti-static vacuum tubing, from loc-line.com  This is a series of 2.5 inch diameter, hard plastic segments that interlock to make a flexible tube, and capped with a rectangular nozzle.  Part numbers:  81302AS, 81304AS.

Nothing fancy, there’s no trim ring around the intake.  The switch on the left of the intake controls the fan.

Extractor_intake

The flex-tubing is connected to a PVC elbow, that elbow is just press-fit into the intake.  This has worked well, it is easy to remove and to adjust.

Extractor_tubing

Advertisements

Soldering Equipment

I was using the Hakko FX-951 units, but upgraded to JBC.
Here’s the JBC DIT and JBC compact with micro-tweezers.JBC

(below)
At the back-right is a DS-983A solder dispenser.
On the left is the intake for the fume extractor. Soldering_setup

The rework equipment, a CSI-474A desoldering gun, and a CSI-825A+ hot air unit.

Rework

Nav Beacon – Control Board

The control board design is complete, ready to etch it and see if it works… With 127 components (352 connections) there’s probably a Vdd or Gnd trace missing somewhere.

Controller_sch_1

And the top and bottom layouts, without the copper pours.  To control noise on the digital lines, the bottom layer will be as continuous a copper pour as possible.

Controller_top_1

Controller_bot_1

 

 

 

Mantis Scope arrived!

New Mantis Compact inspection scope arrived, with articulated boom arm.  The Mantis on the left with the standard binocular AmScope on the right.

Mantis_1

This scope provides a great 3D view, without peering through little eye pieces.  The Mantis provides a much sharper image than the Amscope’s optics.  And you can shift sligtly while looking through the Mantis and change your perspective of the board, this is very handy for getting a better perspective when working on small devices.

The AmScope is still handy for high magnification (up to 200x), but most inspection work is in the 4x –  8x range, and the Mantis is great for that.

The optional articulating arm provides good reach across the workbench, and was a worthwhile option.

Mantis_2

Nav Beacon – breadboarded

Here’s the main controller, on the breadboard, and the readings from the Vref and SPI ADC.

Uses a PIC18F26K22 as the main controller, reads settings from BCD switches and controls SSD relays via a pair of MCP23S08 SPI chips, beacon and marker lamp currents are measured using 50 Amp ACD756 hall-effect sensors, their output is digitized using an MCP3004 ADC set to take differential readings.

Breadboard_spi1

Spi_mcp3004

MCP3004_SPI

Microchip’s C18 V3.45 Compiler is Junk

As I continue to use the Microchip C18 compiler I find more and more issues. Microchip’s idiots appear to have left the peripherals lib out of the linker for the PIC18F2x/45K50 chips.
After changing over to use the K22 series of microcontrollers (specifically the PIC18F26K22), I found that the SPI libraries are missing from the linker. The USART libraries are there, but not the SPI.
Programs using SPI compile just fine, but won’t link…

Keep it up Microchip, and you may yet convince everyone to use Atmel.

So, I switched to an older compiler, version 3.40, and it works fine.

Here’s the code:

/*
* Uses SPI to read an MCP3004, and writes the results to the serial port.
*/

#include <p18F26K22.h>
#include <usart.h>
#include <stdio.h>
#include <stdlib.h>
#include <spi.h>
#include <delays.h>

#pragma config FOSC = INTIO7 //, MCLRE = ON
#pragma  WDTEN = 0;  // Disable the watchdog timer

/*
IRCF<2:0>: Internal RC Oscillator Frequency Select bits(2)
111 = HFINTOSC ? (16 MHz)
110 = HFINTOSC/2 ? (8 MHz)
101 = HFINTOSC/4 ? (4 MHz)
100 = HFINTOSC/8 ? (2 MHz)
011 = HFINTOSC/16 ? (1 MHz)(3)
*/
unsigned char msb1, msb2, lsb1, lsb2;

int ch_data;

/* SPI pins
* 14 SCK
* 15 SDI = MISO
* 16 SDO = MOSI */
#define ADC_CS PORTCbits.RC2 // pin 13 = chip select for ADC

void main(void)
{
OSCCONbits.IRCF = 0b101; //change Fosc to 4Mhz

ANSELC = 0; //Analog ports set to digital

// Have to explicitly set the IO on the SPI pins
TRISCbits.RC2 = 0; // Chip Select ADC_CS
TRISCbits.RC3 = 0; // SCK 1
TRISCbits.RC4 = 1; // SDI 1
TRISCbits.RC5 = 0; // SDO 1
OpenSPI1(SPI_FOSC_16, MODE_11, SMPEND);

Delay10TCYx(5);
ADC_CS = 1; // disable chip

// Open the USART configured as 8N1, 2400 baud, in polled mode
Open1USART (USART_TX_INT_OFF &

USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 103);

// write a break and Hello to the serial port.
putrs1USART(“\n\n\n\n\n\n\r !!! hello !!! \n\r”);

Delay10TCYx(1);
while (1) {

ADC_CS = 0; // pull chip select low RA4

WriteSPI1(0x01);
msb1 = ReadSPI1();
lsb1 = ReadSPI1();

ADC_CS = 1; // disable chip
ch_data = msb1;
ch_data = ch_data << 8;
ch_data = ch_data + lsb1;

// write the data to the serial port
printf(“MSB,LSB %d,%d combined: %d\r\n”,msb1,lsb1,ch_data);
Delay10TCYx(200);
}

}

PIC18F26K22 – Blink

Here’s a fancier version of the usual blink routine that also demonstrates the various options for setting the internal oscillator.

/*
* A more complicated Blink program for the PIC18F26K22
*
* Set the clock:
* 111 = HFINTOSC ? (16 MHz)
* 110 = HFINTOSC/2 ? (8 MHz)
* 101 = HFINTOSC/4 ? (4 MHz)
* 100 = HFINTOSC/8 ? (2 MHz)
* 011 = HFINTOSC/16 ? (1 MHz)(3)
*
* Use the PLL to quadruple the frequency.
* OSCTUNEbits.PLLEN = 1;
*
* connect LEDs to RA0 - RA5
*
* The program clock speed can be measured on pin RA6
*/
#include /* MCU header file ***********/
#include

#pragma config WDTEN = OFF
#pragma config FOSC=INTIO7 // ;Internal oscillator block
#pragma config PLLCFG = ON
#pragma config PRICLKEN = ON
#pragma config IESO = OFF
#pragma config PWRTEN = OFF // ;Power up timer disabled

int counter;
void main (void)
{
OSCCON = 0x62; // Fosc = 8MHz
OSCCONbits.SCS0 = 0;
OSCCONbits.SCS1 = 0;
OSCTUNEbits.PLLEN = 1; // Use the PLL to up the clock to 32Mhz

counter = 1;
TRISA = 0; /* configure PORTB for output */
while (counter <= 255)
{
PORTA = counter; /* display value of ‘counter’ on the LEDs */
Delay10KTCYx(100);
counter++;
}

}

« Older Entries Recent Entries »