Wednesday, November 3, 2010

USB Doodad 3: Hot-air soldering of TQFP-32 chips

The processor we're using in the USB Doodad is an AVR ATmega328P.  This very capable processor is at the heart of the popular Arduino educational microcontroller platform.

The two most common packages for the ATmega328P are the PDIP-28 and the TQFP-32.

  <Good place to insert picture of PDIP vs TQFP>

Because the whole purpose of the USB Doodad is to use surface mount components, we want to use the TQFP-32 package.

Image courtesy of SparkFun.


Armed with a USB Doodad prototype board that Ross etched, I thought it was time to try soldering this chip.

There are several ways to solder SMT ICs.  A good guide is in this SparkFun SMT tutorial.  The method I used was using solder paste and hot air.

In order to do hot air soldering, I use a "hot air rework station" which I bought for about $80 in China.  I found another one at Ameritronics which looks very nice, nicer than mine.

Ideally, I'd use a syringe of solder paste, but I don't have one.  Instead I used the paste I covered previously.

I applied my solder paste with a jeweller's screwdriver.  Not a very precise way of doing it, but it did the job.  I applied one thin line of solder paste along the line of IC pads, then squished the chip pins into the paste.  Then I ran some liquid flux along the pins on all four sides of the chip.

Next, I used the hot air to melt the solder on each corner of the chip.  That was to fix the chip into place.  Finally, I ran the hot air along each side of the chip in turn.  The combination of pins, solder paste and flux means that when the solder paste melted, it blobbed around each pin.  I didn't get any bridges between pins, but if I had, I'm confident I could have fixed it with some desoldering braid.

My success makes me think that beginners could solder it too, if they had the right equipment (a hot air rework station).  And if we had a board with a solder mask (as we'll surely have for Doodad a little further down the track), I think beginners could do it with a regular iron too, if they had a video to watch showing how it's done.

Well, that's how I soldered a TQFN-32!

Tuesday, November 2, 2010

USB Doodad 2: Board design and layout

Some time ago, Ross and I discussed and agreed on what we'd like this board to do (and perhaps just as importantly, what we don't need it to do).  How do we get from this stage to something people can assemble?  One way is by making a prototype.

A prototype lets us:
  • Try out the circuit and different variations,
  • Try out the PCB layout and variations,
  • Try out the software and variations, and
  • Try out different assembly ideas.
Ross started off by finding a project in Elektor, a famous English-language electronics magazine produced in the Netherlands.  What it has in common with the Doodad is that it uses an ATmega328P microcontroller, and uses V-USB to do software USB.

Using that project as proof of what is possible, Ross designed the circuit to our requirements, and did a PCB layout.  Because we may use the underside of the board for other purposes later, Ross faced the additional constraint of having to make the board single-sided.  He and I discussed and improved the circuit and the layout several times, and Ross reworked the circuit and layout to match.

In particular, if we use the same pins as the Elektor project, we'd only have 14 pins free for driving LEDs.  Ideally however, we'd like 16 LEDs.  We think by reassigning some pins, doing away with some features (for example, a bootloader exit button, and a reset button), and being creative with some circuit ideas (for example, using a resistor network to run a number of switches off some otherwise-unused ADC pins), we believe we can recover enough pins to give us 16 LEDs.  We'd also like to be able to use the SDA and SCK pins on the expansion port so we can easily attach I2C devices such as sensors and storage ICs.

In order to do this pin experimentation, the board currently has a number of solder pads we can link to reroute various signals.  Here's the current layout:
USB Doodad PCB artwork (v15)
On the left is the expansion port (+, - and two data pins).  On the right is the USB finger port.  Along the bottom is where the LEDs and dropper resistors will go.  In the top right are the USB analog components.  In the middle is the microcontroller, and to each side are the power supply and clock components.  The switches go in the top left.

While this board may not do everything we want it to, it will let us answer a lot of the questions we need to answer before we can produce a final board ready for sending to a manufacturing house.

I want to say that Ross has done a top job: The single-sided layout constraint is pretty fierce, and the quality of the prototype board is easily as good as a bought one.  I am learning a lot working with him.

Monday, November 1, 2010

USB Doodad: An SMT exercise project

Surface mount soldering doesn't have to be scary!

Way back in the distant past when I learned electronics, components were "through hole". That means that components such as resistors had a wire out each end, and these wires were bent and passed through holes in a circuit board, then soldered.

An example through-hole board.

These days, through hole technology is on the decline. It's becoming harder to get the newer integrated circuits in through-hole form. In its place, more and more people are using "surface mount" technology to build circuits. With SMT, components are often in the form of a tiny block, which is placed on a circuit board, directly in contact with the circuit board tracks, then soldered into place.

An example SMT board.
Many people I've spoken to think that using SMT is harder than through-hole. Sure, many SMT components are very tiny, but it's quite easy to buy larger sized SMT components.

As a project at our hackerspace, Connected Community Hackerspace, Ross McKenzie and I have been working on a project which shows people that doing SMT assembly is not as hard as people think.  We have deliberately used the largest size of SMT components to make assembly as easy as possible.

The board has a USB connector at one end, a small expansion connector at the other, and a row of 16 software controlled LEDs in the middle.

The primary purpose of the board is to act as a practical exercise in surface mount assembly.  The secondary purpose is to show how to use the V-USB software USB stack to make a USB device.  The third purpose is to give the Doodad some post-tutorial value, in a number of intentionally frivolous ways:
  • Persistence-of-vision toy. Wave it around or put it on the wheels of your bike. Enjoy making groovy flowing messages in the dark.
  • Secure password keystore.
  • Log-data-to-serial-flash data logger, where samples could be retrieved over USB at some later time.
  • “Messages waiting” / “processor load” / “build progress” indicator.
  • Multimedia keys (if your keyboard doesn’t have them).
  • Novelty breathalyser.
  • Countdown timer for car parking reminder.
Our estimate for the cost of this board is about AUD30, so it's well within hobbyist reach.

We plan to release the design for this project under an open licence, possibly the TAPR OHL, which means that others can copy this design.

The project has been designed to use a single sided PCB.  Although this makes the job of designing and routing the board traces much more difficult, being single sided means people can make this board at home.

For applications which require the doodad to operate independently of a PC, we plan to add a small Li-Ion battery and management chip to the reverse of the board.

More information about the project can be found in the USB Doodad Google doc.

Ross and I are making rapid progress, and I'll post more project updates here soon.

Tuesday, October 26, 2010

Making PCBs using the toner transfer method

Last year the folk at CCHS, my local hackerspace, did some work on producing PCBs using the photo resist method.

Because I don't have a UV box, and because I'd rather not keep buying UV sensitised PCB, I have been looking at the "toner transfer" method.

  http://www.riccibitti.com/pcb/pcb.htm

Most people use glossy magazine paper, or glossy inkjet paper.  I have been looking at other transfer materials.

Last year, I was using the slippery backing paper from sheets of labels.  This didn't transfer too badly, but I did have somewhat of a problem of small sections of track flaking away from the backing paper before I could do the transfer.  Also, I don't have much of the backing paper.

Last night I got to thinking of other transfer materials.  Something I can print on, but would be willing to give up the toner when it's heated.  I decided to try aluminium foil.

I've done some searching this morning, and it seems I'm not the first to think of using foil:

  http://hackaday.com/2006/05/27/pcb-fuser-for-toner-transfer-etching/

Well, I did several experiments last night, what I can report is that the tracks on the aluminium foil transfer very nicely to the copper.  If the heat is right, there's absolutely no toner left on the aluminium, and the foil can be quickly and cleanly peeled back to leave the tracks of toner on the PCB.


The artwork I'm using has SMT ICs of 0.6mm pitch, which means the tracks have to be really precise.  I haven't yet got one that's of sufficient quality to etch, but I think I'm very close.  Some of my attempts have had great tracks in the middle, but lost some tracks at the edge.  Some of the attempts have had 100% transfer to the copper, but are a little smudged.  I don't think this problem is because I'm using foil as a transfer medium.  Rather, I think it's a problem with the way I'm doing the ironing to transfer the image.  If I can refine the heating process, I think I can produce very high quality boards.  I'd expect to be able to do thinner than the 0.6mm our group can get with the photo resist process.

I think I'll look into getting a laminating machine.  More results to follow.

Saturday, October 23, 2010

Open letter to seek.com.au: Suggestions for improvement

From time to time I jump on seek.com.au to see what jobs are out there.  They currently have a boring-as-all-getup survey to gauge how Seek users find the website.  Buried in the survey is a text field which says "in what ways could the site be improved?".

Since I couldn't fit my suggestions in their text field, I'm posting them here, and I'll send Seek a link to here instead.



Goodness, where do I start???

Suggestion 0: Don't ask people "Please provide as much information as possible" then give them a 6-line text field to write it in.

I can list 20 more ways to improve your website.  Please keep in mind that lots of my comments below are about how to make reviewing a large amount of data as simple and as speedy as possible.

I am an experienced Software Engineer in Melbourne.  Naturally I look for jobs in the ICT classification, in the Melbourne area.

Job searching


Because I'm experienced, I could do jobs in several of the ICT sub-classifications.  Not to mention that many jobs are misclassified.  However your website only allows selection of one sub-classification at a time.

Suggestion 1: In the advanced search, allow users to select multiple subclassifications instead of just one.

Since your site doesn't let me do that, I'm forced to use "Any sub-classification".  That means I have to trawl through a LOT of jobs, most of which won't be relevant to me.  So it's vital that I can do that trawling as efficiently as possible. 
While I understand many people just browse on your site, I'm the kind of guy who wants to be sure he's read every ad.  So it's important to me to know where I got up to on my last visit.  At the moment I start from the top and keep reading until yesterday's or last week's ads start appearing.  But this is something the Seek website could do for me.

Suggestion 2: Have something like a bookmark, or a filter that says something like "show me only ads listed since I last visited".

Computers are very good at managing large amounts of data, and finding trends and correlations in that data.  For example, one of the little known purposes of your supermarket's loyalty card is so that the supermarket can use "market basket analysis" to identify correlated buying patterns.


If you want an example, head to the Jango music site.  Enter an artist.  Jango starts playing music, and you can say whether or not you like that song.  Your input, plus the listening patterns of Jango's other users, is used to start feeding you music from other artists.  Jango very quickly starts playing you only the music you like, and through this I have discovered many really cool music acts.  Go try it!

Suggestion 3: Use market basket analysis and other data mining techniques to say to a user "you liked that ad, you'd probably also like this ad".  Then show them those ads.

Suggestion 4: Take this idea further, and play "20 questions" with the user.  Show them two ads.  Ask them which they prefer.  Use their selection and some "affinity analysis" to find two more ads.  Or show an ad and ask the user to rate it "hot or not".  Twenty answers can whittle a million choices down to one.  Twenty questions, and Seek can then say "based on that, here are the jobs we think you'll love".  Implemented well, Seek could use this in a marketing campaign as "simply the fastest way to find the job that's right for you".

Presentation


Trawling means I scan a whole page of jobs, then go to the next page.  I use space or PgDn.  But when I get to the end of the page, I need to take my hands off the keyboard, point with the mouse and click Next.  That takes time I don't want to spend.  (I’ll cover the major reason I use the keyboard later on).

Suggestion 5: Provide keyboard shortcuts so one can go to the next page without using the mouse.

Since I have to look at every single ICT job in Melbourne, there's a lot of noise I have to trawl through.  Let's assume the user has a "hot list" and a "not list" of words.

Suggestion 6: Given the "hot list", highlight any of those words that appear in that ad.

Note, these keywords are not definitive enough to warrant me searching on them.  Plenty of great jobs in a certain area don't use meaningful keywords.  Keywords are hints, not search keys.
Conversely, there are a bunch of technologies out there that I have no experience or interest in.  If a term for that technology appears in an ad, it's a pretty fair bet that the job’s not for me.  So I really don’t want to put any brain power into that job.

Suggestion 7: Given the "not list", grey out the whole ad if any of these words appear.  It still appears in the jobs listing, but greyed out.

Now let’s look at how you’re using screen real-estate.  I have an LCD monitor that’s 22” from corner to corner.  That’s by no means uncommon; you can buy one from MSY for under $180.  22” corner to corner is 19” side to side.  Let’s look at how that space is used, left to right:

  • 2.5” absolutely blank space
  • 2.5” refine your results (only top 5% of column used)
  • 1” job selection checkbox
  • 2.5+” location, and maybe salary
  • 5.5” the text of the ad
  • 2.5” some “helper” icons (only top 10% of column used)
  • 2.5” absolutely blank space

You are spending 5” in absolutely blank space!  And you are spending 5” on tools and search refinement that could live at the top/bottom of the page.  You’ve reduced my nice 19” monitor to a 9” monitor, smaller than my first 12" monitor in 1989!

You might say “well, ads (and web pages in general) look bad if they’re too wide so we have that space to burn any way".  But what happens if I want to use the left half of my screen to look at Seek ads, and the right half to compose a cover letter?  Or if I have a smaller screen?  Or I’m looking at it on a smart phone?

Fortunately, the whitespace on the sides disappears when I resize the window smaller.  But everything else stays the same.  But I do end up having to sideways scroll the page to get the ads centred.

Suggestion 8: Put the 2.5” of “refine your results” stuff, and the 2.5” of “helper” icons at the top/bottom of your page, and make sure your page doesn’t need sideways scrolling on smaller screens.

As mentioned, I do a lot of scrolling through ads.  I rely on words of interest passing by and catching my eye.  You have a pink box that highlights an ad as the mouse goes over it.  I’m sure you thought that was a great idea.  But the flashing of that pink box as ads go under my mouse is INCREDIBLY distracting when I’m looking for keywords. And it makes your site look like someone’s CSS homework.  Just because it’s possible doesn’t mean it’s a good idea.

Suggestion 9: Please, lose the pink highlight.  Please?

One thing that really bugs me about Seek’s website is that once an advertiser retires an ad, Seek loses all memory of it.  For example, let’s say there’s an ad for a good job.  I bookmark the ad, and apply for it online.  Then the advertiser gets enough interest that they retire the ad, because they really don’t need any more candidates.  Next I get a call for an interview.  So I go back to the bookmarked ad to review what the advertiser wanted, and GRRR, it’s not there any more!  How can I prepare for the interview?

Suggestion 10: Except in the case of an ad that was offensive or illegal, if someone has the URL, show them the ad, even if it’s been removed from the public listing.

So, in order to cope with the above, I have to print out all the ads I’m interested in.  Means I can’t use your tools to manage my applications, but at least I've still got the ad after it's retired.  But what about if I want to go back to the online version?

Let’s say I was after job number 18393608.  What I have to end up retyping is:

  http://www.seek.com.au/job/c-engineer-adelaide-based-satellite-communications-next-g/melbourne/18393608/28/1/

That’s a lot of annoying typing, and if I made a mistake in typing it or copying it down, a great job could get away from me.

Suggestion 11: Rewrite your single job pages as (to use the above as an example): http://www.seek.com.au/job?18393608 or similar.  Note, short URLs are no easier for unscrupulous companies scraping your website for jobs, than long ones, so there's no reason to have long ones.  Long ones just make life difficult for schmucks like me.

Data quality


Remember I’m in Melbourne? I have a family and I’m not interested in moving or working outside of Melbourne, so in the advanced search, I always choose Melbourne.  So I’m baffled that I keep seeing ads that aren’t for Melbourne, like the example ad from above.  Please, why does this ad show up if I searched for Melbourne?

This is not a one-off: I’d estimate about 5% of your ads are similarly (and like the Adelaide Next-G ad above, I’d certainly say deliberately) misfiled.

Suggestion 12: Give people a way of reporting such ads (but see below).

Another extremely annoying thing is when recruitment companies put in ads for themselves.  In other words, there’s no job, just a company putting in an ad because they want to get you on their books.  Really, this isn’t why I visit Seek.

Suggestion 13: Ban ads for recruitment companies.  An ad without a job behind it just undermines the quality of Seek’s database.

What’s also annoying is speling misteaks in job ads.  I’m one of those people who notices every single spelling mistake, and when I’m reading ads, it’s like mental speed bumps.  Don’t advertisers know how poorly it reflects on them? 

Suggestion 14: When an advertiser places an ad, run it through a spell checker, and if there are typos, give the advertiser the chance to fix them.  Since ads contain many acronyms and company names, give advertisers the chance to tell the spell checker that words it highlighted are actually correct, for next time.

All that raises another question: What are you doing to engage your users, Web 2.0-style?

Suggestion 15: Give users a score, called a “reputation”.  If they correctly flag ads with incorrect location, no underlying job, or typos, their score goes up.  Users with scores higher than a certain amount have proven themselves and are trusted, and their reports are acted upon immediately, rather than needing moderation by Seek staff or other high score users.  This would be in place of the current “Something fishy?”

Suggestion 16: Give advertisers a publicly visible reputation.  If they keep posting ads that raise the ire of your users, don't take ads from them.  Do you really want their business?  If you do, what does it say about your business?

What you get out of all this is improved data quality, which makes it more attractive for people to seek on Seek. 

Another part of Web 2.0 is inviting your users to produce content.  At the moment, the Seek model is “all push”: You produce content (ads) and Seek users passively consume it.  But Web 2.0 is a two-way street.

Suggestion 17: Do as eBay does: Let users give feedback, and allow them to ask questions of advertisers.

Suggestion 18: Consider the idea of web forums where job seekers can hang out, talk about their experiences, and create a community and buzz around the Seek name.

Suggestion 19: Implement an online suggestion box, and invite your users to tell you what you can do better.  Don’t bury it in the middle of a boring survey!

I’m in the position where I have to use your site, as it has great jobs.  Yet the user experience is pretty dated and frustrating.  In order to make my job-hunting life bearable, I’ve fixed as many of these suggestions as I can on my end, using a Firefox plugin called “GreaseMonkey”.  It lets me change web pages to be how I wish they’d be, and when I sit down to look for jobs, it’s as if you’ve done suggestions 2, 6, 7, 8, 9, 11, and 14.  So I have road-tested these particular enhancements.  (The other suggestions would need changes on your end of the deal, so I can’t use GreaseMonkey to fix them).  But when I go to look at jobs on another computer, I’m back in “lame Seek” land, and the pain comes back.

I’ve now spent about two hours of my time writing 2000+ words to you.  I hope you guys actually read it, and even better, implement some of them!

Suggestion 20: Call me.  Seriously.  If you’re not sure what I mean, I’d be happy to further explain some of these suggestions.  Or if you’ve implemented some of them, and want someone to road test them, I’m happy to do that too.  Just make your site a bit less painful, please?

Saturday, October 9, 2010

Replacing DS touchscreens (part II): When it starts to go right but something else goes wrong

Last article in this series, I replaced a Nintendo DS touchscreen, but in doing so, broke the touchscreen connector (whoops).  I ordered a new connector from GoldenBridge, but surprisingly enough, they didn't ship it until two weeks after I placed the order!  So including the shipping time, the connector ended up taking nearly a month to get here.  GoldenBridge, no cookie for you!

Well, the connector finally arrived, and I took the DS and the connector to our weekly hackerspace meeting.

I don't have any pictures at present, but the good news is that I was able to desolder the connector from the board, and resolder on the new connector.  Took me a few goes, and use of flux and desolder wick and magnification, but I did it.

Only problem is, when I was reassembling the board, I broke the slider off the power switch.  Ouch!

I ordered a new power switch from DealExtreme, and when it arrived, I replaced the power switch.  Put it all back together and now I have a working Nintendo DS again.  I'm now out of danger of being disowned by the kids!

Monday, July 26, 2010

Touchscreen update

It's been a very long time since I've posted any articles.  However I've been working slowly but consistently on my touchscreen.  I'll have some more info later, but here's a sneak preview:

New touchscreen, wood case, direct USB.

I know, terrible photo, but that's the best my phone cam can do.  It looks heaps better in real life.  

This is a straight USB device, connected directly to my PC, and with no need of an Arduino.  As far as the PC is concerned, it looks like a USB mouse, except that the coordinates are absolute, not relative.

There's a microcontroller inside the case: A Teensy 2.0 running LUFA.

More details to follow!