Difference between revisions of "Screwduino"

From Land Boards Wiki
Jump to navigation Jump to search
 
(44 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[File:tindie-mediums.png|link=https://www.tindie.com/products/land_boards/arduino-with-screw-terminals-screwduino/]]
 
[[File:tindie-mediums.png|link=https://www.tindie.com/products/land_boards/arduino-with-screw-terminals-screwduino/]]
  
[[File:ScrewduinoX4-5493-1365x663px.jpg]]
+
[[File:ScrewduinoX5_5814-720px.jpg]]
 +
 
 +
== The Screwduino Story ==
 +
 
 +
A Screwduino is an Arduino UNO compatible with Screw Terminals.
 +
 
 +
We find most of the approaches to Arduino breadboarding annoying. They work OK if you don't know what you want to make and you just want to mess around, but they are painful when you are ready to really make something useful.
 +
 
 +
We have spent countless hours soldering simple interconnect wires on prototype shields. They give us exactly what we need/want but why do we have to spend time soldering in yet another connector that doesn't do much more than pinout another connector?
 +
 
 +
Sensor shields are a pretty decent solution since they pin out everything with a power and ground for each signal, but they can get pretty pricey when you add in the cost of the shield and cabling. Plus they get pretty tall till you have a Processor, Sensor Shield and then the vertical wiring above all that.
 +
 
 +
Then, we saw a screw shield and it looked like the ideal solution for loose wires and builder frustrations. Easy to connect with just a small screwdriver. No connectors to install for simple wiring but no accommodation for I2C connections. The stackup height has less of the same height problems as a sensor shield. The screw shields got me thinking. It's a great idea, but why add the shield? Why not just take an Arduino design and replace the headers/pins with screw terminals?
 +
 
 +
Here is the result which we call the Screwduino:
 +
 
 +
ScrewduinoX4-5493-640x310px.jpg
 +
 
 +
In character, in manner, in style, in all things, the supreme excellence is simplicity. - Henry Wadsworth
  
 
== Features ==
 
== Features ==
  
* Arduino UNO Compatible (Arduino bootloader)
+
* Arduino UNO compatible
* ICSP header for program download
+
** Arduino UNO bootloader
* Standard 6-pin FTDI connector
+
** Select UNO in Arduino IDE to download card
* 4-pin I2C connector
+
* No USB connector/chip.
* Reset switch
+
** Use a [http://www.ftdichip.com/Products/Cables/USBTTLSerial.htm FTDI download cable] or [http://land-boards.com/blwiki/index.php?title=FTDI-USB-TTL FTDI to USB interface] for programming of USB (not supplied)
* Other than power regulator only uses through-hole parts
+
** Can also program the card with a 6 pin cable using [https://www.arduino.cc/en/pmwiki.php?n=Tutorial/ArduinoISP Arduino as ISP] using the 2x3 header [http://en.wikipedia.org/wiki/In-circuit_serial_programming ICSP header]
* 5mm pitch screw terminal blocks
+
** Can also program the card using D0 and D1 of an Arduino UNO as a USB to FTDI bridge with the UNO card held in reset [https://hardwarefun.com/tutorials/using-arduino-as-a-bridge-to-connect-serial-devices-with-pc page here]
* Four (4) 4-40 mounting holes with clearance for screw heads, standoffs and/or nuts
+
* 4-pin I2C connector for easy attachment of an [http://www.ebay.com/bhp/i2c-lcd I2C LCD display] and other I2C sensors (like temperature sensors).
 +
** Beware there are many different I2C pinouts.
 +
** Added 10K ohm pullup resistors (R3 and R4) from the I2C SDA/SCL to +5V
 +
** If the user doesn't want the resistors, they can snip them out of the circuit
 +
* Uses through hole parts so that it is easier to assemble.
 +
** The sole exception is the voltage regulator which is surface mount for heat transfer
 +
* [http://www.mouser.com/ProductDetail/TE-Connectivity/282836-2/?qs=A%252bip%252bNCYi6Ohx9vaQ1l4dg%3D%3D 5mm pitch screw terminal blocks].
 +
* Reset switch.
 
* 7-12V DC on standard 2.1mm DC power connector
 
* 7-12V DC on standard 2.1mm DC power connector
 
* Power selection jumper (FTDI, Regulator, Screw Terminals)
 
* Power selection jumper (FTDI, Regulator, Screw Terminals)
 +
* Four (4) good mounting holes that take 4-40 screws and have more than enough clearance for screw heads, standoffs and/or nuts.
  
 
==Design Advantages ==
 
==Design Advantages ==
Line 20: Line 46:
 
Gets away from all of the painful wire jumpers and pins that constantly come loose.
 
Gets away from all of the painful wire jumpers and pins that constantly come loose.
 
Makes the step from prototype to final design much easier.
 
Makes the step from prototype to final design much easier.
 +
 +
{| class="wikitable"
 +
! Method
 +
! Material Costs
 +
! Labor Tasks
 +
! Power/Ground pins
 +
! Wires secure?
 +
! Mounting
 +
! I2C Support
 +
|-
 +
| Processor
 +
| UNO - $30
 +
| Strip wires and solder to parts
 +
| 3 GND1 PWR
 +
| Wires don't stay in holes with any stress.
 +
| Poor
 +
| No connector
 +
|-
 +
| Breadboards
 +
| Uno - $30 +Breadboard $10
 +
| Strip wires or use breadboard wires
 +
| 120 each PWR/GND for 700 point breadboard
 +
| Moderately secure since the holes are usually “tight”
 +
| Poor
 +
| No connector
 +
|-
 +
| ProtoShields
 +
| Uno - $30 +Shields - $15
 +
| Lot of time- consuming soldering of custom wiring
 +
| Vary but usually enough although maybe not connectorized in the best use
 +
| Wires typically soldered so secure
 +
| Poor
 +
| No connector
 +
|-
 +
| Sensor Shields
 +
| Uno - $30 +Shields - $15
 +
| Use custom wires
 +
| Excellent at 1 per Arduino Digital/Analog pin
 +
| Connectors are secure
 +
| Poor
 +
| Yes
 +
|-
 +
| Screw Wings
 +
| Uno - $30 + Wing Shield - $15
 +
| Strip wires and solder to parts
 +
| Varies depending upon shield
 +
| Connections very secure
 +
| Poor
 +
| No connector
 +
|-
 +
| Screwduino
 +
| $30 (est)
 +
| Strip wires and solder to parts
 +
| 5 – Ground 4 – PowerAdditional on other connectors
 +
| Connections very secure
 +
| Excellent
 +
| Yes
 +
|-
 +
|}
 +
 +
== Screwduino Schematic ==
 +
 +
* [http://land-boards.com/Screwduino/Screwduino-Rev_X6_Schematic.pdf Screwduino Schematic] - Rev X6
 +
* [http://land-boards.com/Screwduino/Screwduino-X3-Schematic.pdf Screwduino Schematic] - Rev X3
 +
 +
== Screwduino Layout ==
 +
 +
[[File:ScrewduinoX6PlotBW.PNG]]
 +
 +
== Power ==
 +
 +
Measured 15 mA with 9V external power input (no loads but running program).
 +
 +
=== Card Power Source - VSEL Jumper ===
 +
 +
* This jumper selects the power source for the card
 +
** Install jumper across the USB pins to power the card from the FTDI interface.
 +
** Install jumper across the EXT pins to power the card from the DC jack.
 +
** Leave the jumper off when powering the card from the ISP connector.
 +
 +
== Factory Test Procedure ==
 +
 +
Programming and test procedure
 +
 +
=== Check DC regulator ===
 +
 +
* Install shunt JP2 on "EXT" (DC  jack)
 +
* Connect DCJ to regulated power supply
 +
** DC output off
 +
** 9.0V +/- 0.1V
 +
** Current limited at 100 mA
 +
* DC output ON
 +
* Verify 5V +/- 0.1V on screw terminal pins
 +
* Verify current draw is < 30 mA
 +
* DC output OFF
 +
* Move shunt JP2 to "USB"
 +
 +
=== Program Bootloader ===
 +
 +
* Use [http://land-boards.com/blwiki/index.php?title=ATProgHead ATProgHead] programmer
 +
* Three methods
 +
** In [http://land-boards.com/blwiki/index.php?title=ATProgHead ATProgHead] programmer DIP-28 socket
 +
** On card
 +
** TL-866+ Programmer
 +
 +
==== Program Bootloader in ATProgHead programmer ====
 +
 +
'''REMINDER: Can't download an application program with this method since it will over-write the bootloader'''
 +
 +
* Connect [http://land-boards.com/blwiki/index.php?title=ATProgHead ATProgHead] programmer USB to PC
 +
* Find COM port using Device Manager
 +
* Run Arduino IDE
 +
** Select COM Port
 +
** Set Board "Arduino UNO"
 +
** Programmer "Arduino as ISP"
 +
* Load Blink sketch
 +
* Install ATMega328 in 2 pin DIP socket
 +
* Program the MCP23008 with UNO bootloader
 +
** Tools / Burn Bootloader
 +
** Verify it programs without error
 +
** Tail looks like
 +
 +
<pre>
 +
Reading | ################################################## | 100% 0.03s
 +
 +
avrdude: verifying ...
 +
avrdude: 1 bytes of lock verified
 +
 +
avrdude done.  Thank you.
 +
</pre>
 +
 +
==== Program Bootloader on card ====
 +
 +
* Connect 2X3 ISP cable to JP3
 +
** '''Be careful to observe location of pin 1 (red power lead is at pin 2)'''
 +
* Find COM port using Device Manager
 +
* Run Arduino IDE
 +
** Select COM Port
 +
** Set Board "Arduino UNO"
 +
** Programmer "Arduino as ISP"
 +
* Program the Screwduino with UNO bootloader - verify it programs without error
 +
** Tools / Burn Bootloader
 +
 +
==== TL-866+ Programmer ====
 +
 +
* Program blank ATMega328 using [[TL866ii Plus Programmer]]
 +
* Fastest way to load Bootloader '''and''' application
 +
* Files
 +
** [https://github.com/land-boards/lb-boards/blob/master/Arduino%20Cards/Screwduino/SOFTWARE/TL866%2B_SCREWDUINO_FAT.BIN TL866+_SCREWDUINO_FAT.BIN]
 +
** [https://github.com/land-boards/lb-boards/blob/master/Arduino%20Cards/Screwduino/SOFTWARE/TL866%2B_SCREWDUINO_BLINK.BIN TL866+_SCREWDUINO_BLINK.BIN]
 +
* [https://circuitdigest.com/microcontroller-projects/understanding-fuse-bits-in-atmega328p-to-enhance-arduino-programming-skills#:~:text=In%20the%20ATmega328P%20IC%2C%20there%20are%20a%20total,all%20the%20little%20details%20about%20the%20fuse%20bits. Fuse bits]
 +
 +
[[file:TL866_Fuse_Bits.PNG]]
 +
 +
=== Download FAT ===
 +
 +
[[file:SCREWDUINO_TestStation_P11464-720PX.jpg]]
 +
 +
* Uses pong probe test fixture
 +
* Connect FTDI USB Serial to UUT Screwduino
 +
* Verify Power on Voltmeter
 +
* Download program "Screwduino_test" to UUT
 +
* Verify each pin blinks (100 mS blink rate)
 +
** Move LED + side to terminal pins D3-D13 and A0-A5
 +
** LED should blink shortly at each position
 +
 +
=== Download Blink Sketch ===
 +
 +
* Download program "Blink" to UUT
 +
* Board ships with Blink (PC13) running
 +
* Board ships with JP2 in "USB" position, ie, power comes from the FTDI jack
  
 
== Assembly Sheet ==
 
== Assembly Sheet ==
  
 
* [[Screwduino Assembly Sheet]]
 
* [[Screwduino Assembly Sheet]]
 +
 +
== Revision History ==
 +
 +
=== Rev X6 (vs X5) ===
 +
 +
<pre>
 +
From kiCompNL.py
 +
First netlist: Screwduino X5\screwduino.net
 +
Number of Nets: 33
 +
Second netlist: screwduino.net (Rev X6)
 +
Number of Nets: 33
 +
Mismatch in net (1): +5V diff ['JP8-3']
 +
Mismatch in net (1): /SDA diff ['JP8-2']
 +
Mismatch in net (1): /SCK diff ['JP8-1']
 +
Mismatch in net: +5V diff ['JP8-2']
 +
Mismatch in net: /SDA diff ['JP8-3']
 +
Mismatch in net: /SCK diff ['JP8-4']
 +
</pre>
 +
 +
=== Rev X5 (vs X4) ===
 +
 +
<pre>
 +
From kiCompNL.py
 +
First netlist: C:\Users\doug_000\Documents\GitHub\lb-boards\Screwduino\ScrewduinoX4\screwduino.net
 +
Number of Nets: 33
 +
Second netlist: C:\Users\doug_000\Documents\GitHub\lb-boards\Screwduino\Screwduino X5\screwduino.net
 +
Number of Nets: 33
 +
Mismatch in net (1): 5V diff ['C8-1', 'C7-1']
 +
Mismatch in net (1): SDA diff ['R3-2']
 +
Mismatch in net (1): SCK diff ['R2-2']
 +
Mismatch in net (1): RST* diff ['C1-1', 'R1-2']
 +
Mismatch in net (1): VIN diff ['C2-1', 'C3-1']
 +
Mismatch in net (1): DTR* diff ['C1-2']
 +
Mismatch in net: 5V diff ['C1-1', 'C2-1']
 +
Mismatch in net: SDA diff ['R2-2']
 +
Mismatch in net: SCK diff ['R1-2']
 +
Mismatch in net: RST* diff ['C3-1', 'R3-2']
 +
Mismatch in net: VIN diff ['C8-1', 'C7-1']
 +
Mismatch in net: DTR* diff ['C3-2']
 +
</pre>
 +
 +
=== Rev X4 (vs X3) ===
 +
 +
<pre>
 +
No netlist changes
 +
Rev X3 (vs X2)
 +
From kiCompNL.py
 +
net is in 1 but not 2 ['+5V', 'JP6-7', 'JP7-2', 'JP3-2', 'D1-2', 'R1-1', 'JP4-3', 'JP2-2', 'JP4-4', 'U1-7', 'U1-20', 'C8-1', 'C9-1', 'C7-1', 'C4-1', 'JP8-3', 'C5-1', 'R3-1', 'R2-1', 'C6-1']
 +
net is in 1 but not 2 ['/D12', 'U1-18', 'JP3-1', 'JP6-2']
 +
net is in 1 but not 2 ['/AREF', 'U1-21', 'JP5-8']
 +
net is in 1 but not 2 ['/D5', 'U1-11', 'JP7-3']
 +
net is in 1 but not 2 ['/D4', 'U1-6', 'JP7-4']
 +
net is in 1 but not 2 ['/D0', 'JP1-4', 'JP7-8', 'U1-2']
 +
net is in 1 but not 2 ['/D6', 'U1-12', 'JP4-8']
 +
net is in 1 but not 2 ['/D7', 'U1-13', 'JP4-7']
 +
net is in 1 but not 2 ['/D8', 'JP4-6', 'U1-14']
 +
net is in 1 but not 2 ['/SDA', 'JP8-2', 'R3-2', 'U1-27', 'JP5-2']
 +
net is in 1 but not 2 ['/VROUT', 'U2-2', 'U2-4', 'JP2-1']
 +
net is in 1 but not 2 ['/VUSB', 'JP1-3', 'JP2-3']
 +
net is in 1 but not 2 ['/SCK', 'R2-2', 'U1-28', 'JP8-1', 'JP5-1']
 +
net is in 1 but not 2 ['/AD3', 'U1-26', 'JP5-3']
 +
net is in 1 but not 2 ['/AD2', 'U1-25', 'JP5-4']
 +
net is in 1 but not 2 ['/AD1', 'JP5-5', 'U1-24']
 +
net is in 1 but not 2 ['/AD0', 'JP5-6', 'U1-23']
 +
net is in 1 but not 2 ['/RST*', 'SW1-1', 'U1-1', 'JP4-5', 'SW1-2', 'D1-1', 'R1-2', 'JP3-5', 'C1-1']
 +
net is in 1 but not 2 ['/D11', 'U1-17', 'JP3-4', 'JP6-3']
 +
net is in 1 but not 2 ['/D13', 'JP3-3', 'JP6-1', 'U1-19']
 +
net is in 1 but not 2 ['/D2', 'U1-4', 'JP7-6']
 +
net is in 1 but not 2 ['/VIN', 'C2-1', 'C3-1', 'U2-3', 'K1-1', 'JP6-6']
 +
net is in 1 but not 2 ['/D9', 'JP6-5', 'U1-15']
 +
net is in 1 but not 2 ['/D10', 'U1-16', 'JP6-4']
 +
net is in 1 but not 2 ['/D1', 'JP1-5', 'U1-3', 'JP7-7']
 +
net is in 1 but not 2 ['/D3', 'JP7-5', 'U1-5']
 +
net is in 1 but not 2 ['""', 'MTG4-1']
 +
net is in 1 but not 2 ['""', 'MTG3-1']
 +
net is in 1 but not 2 ['/CX1', 'X1-1', 'U1-10']
 +
net is in 1 but not 2 ['/CX2', 'U1-9', 'X1-3']
 +
net is in 1 but not 2 ['/DTR*', 'JP1-6', 'C1-2']
 +
net is in 1 but not 2 ['""', 'MTG1-1']
 +
net is in 1 but not 2 ['""', 'MTG2-1']
 +
</pre>
 +
 +
=== Rev X3 (vs X2) ===
 +
 +
From kiCompNL.py
 +
 +
<pre>
 +
net is in 1 but not 2 ['+5V', 'JP6-7', 'JP7-2', 'JP3-2', 'D1-2', 'R1-1', 'JP4-3', 'JP2-2', 'JP4-4', 'U1-7', 'U1-20', 'C8-1', 'C9-1', 'C7-1', 'C4-1', 'JP8-3', 'C5-1', 'R3-1', 'R2-1', 'C6-1']
 +
net is in 1 but not 2 ['/D12', 'U1-18', 'JP3-1', 'JP6-2']
 +
net is in 1 but not 2 ['/AREF', 'U1-21', 'JP5-8']
 +
net is in 1 but not 2 ['/D5', 'U1-11', 'JP7-3']
 +
net is in 1 but not 2 ['/D4', 'U1-6', 'JP7-4']
 +
net is in 1 but not 2 ['/D0', 'JP1-4', 'JP7-8', 'U1-2']
 +
net is in 1 but not 2 ['/D6', 'U1-12', 'JP4-8']
 +
net is in 1 but not 2 ['/D7', 'U1-13', 'JP4-7']
 +
net is in 1 but not 2 ['/D8', 'JP4-6', 'U1-14']
 +
net is in 1 but not 2 ['/SDA', 'JP8-2', 'R3-2', 'U1-27', 'JP5-2']
 +
net is in 1 but not 2 ['/VROUT', 'U2-2', 'U2-4', 'JP2-1']
 +
net is in 1 but not 2 ['/VUSB', 'JP1-3', 'JP2-3']
 +
net is in 1 but not 2 ['/SCK', 'R2-2', 'U1-28', 'JP8-1', 'JP5-1']
 +
net is in 1 but not 2 ['/AD3', 'U1-26', 'JP5-3']
 +
net is in 1 but not 2 ['/AD2', 'U1-25', 'JP5-4']
 +
net is in 1 but not 2 ['/AD1', 'JP5-5', 'U1-24']
 +
net is in 1 but not 2 ['/AD0', 'JP5-6', 'U1-23']
 +
net is in 1 but not 2 ['/RST*', 'SW1-1', 'U1-1', 'JP4-5', 'SW1-2', 'D1-1', 'R1-2', 'JP3-5', 'C1-1']
 +
net is in 1 but not 2 ['/D11', 'U1-17', 'JP3-4', 'JP6-3']
 +
net is in 1 but not 2 ['/D13', 'JP3-3', 'JP6-1', 'U1-19']
 +
net is in 1 but not 2 ['/D2', 'U1-4', 'JP7-6']
 +
net is in 1 but not 2 ['/VIN', 'C2-1', 'C3-1', 'U2-3', 'K1-1', 'JP6-6']
 +
net is in 1 but not 2 ['/D9', 'JP6-5', 'U1-15']
 +
net is in 1 but not 2 ['/D10', 'U1-16', 'JP6-4']
 +
net is in 1 but not 2 ['/D1', 'JP1-5', 'U1-3', 'JP7-7']
 +
net is in 1 but not 2 ['/D3', 'JP7-5', 'U1-5']
 +
net is in 1 but not 2 ['""', 'MTG4-1']
 +
net is in 1 but not 2 ['""', 'MTG3-1']
 +
net is in 1 but not 2 ['/CX1', 'X1-1', 'U1-10']
 +
net is in 1 but not 2 ['/CX2', 'U1-9', 'X1-3']
 +
net is in 1 but not 2 ['/DTR*', 'JP1-6', 'C1-2']
 +
net is in 1 but not 2 ['""', 'MTG1-1']
 +
net is in 1 but not 2 ['""', 'MTG2-1']
 +
</pre>

Latest revision as of 14:21, 7 March 2023

Tindie-mediums.png

ScrewduinoX5 5814-720px.jpg

The Screwduino Story

A Screwduino is an Arduino UNO compatible with Screw Terminals.

We find most of the approaches to Arduino breadboarding annoying. They work OK if you don't know what you want to make and you just want to mess around, but they are painful when you are ready to really make something useful.

We have spent countless hours soldering simple interconnect wires on prototype shields. They give us exactly what we need/want but why do we have to spend time soldering in yet another connector that doesn't do much more than pinout another connector?

Sensor shields are a pretty decent solution since they pin out everything with a power and ground for each signal, but they can get pretty pricey when you add in the cost of the shield and cabling. Plus they get pretty tall till you have a Processor, Sensor Shield and then the vertical wiring above all that.

Then, we saw a screw shield and it looked like the ideal solution for loose wires and builder frustrations. Easy to connect with just a small screwdriver. No connectors to install for simple wiring but no accommodation for I2C connections. The stackup height has less of the same height problems as a sensor shield. The screw shields got me thinking. It's a great idea, but why add the shield? Why not just take an Arduino design and replace the headers/pins with screw terminals?

Here is the result which we call the Screwduino:

ScrewduinoX4-5493-640x310px.jpg

In character, in manner, in style, in all things, the supreme excellence is simplicity. - Henry Wadsworth

Features

  • Arduino UNO compatible
    • Arduino UNO bootloader
    • Select UNO in Arduino IDE to download card
  • No USB connector/chip.
  • 4-pin I2C connector for easy attachment of an I2C LCD display and other I2C sensors (like temperature sensors).
    • Beware there are many different I2C pinouts.
    • Added 10K ohm pullup resistors (R3 and R4) from the I2C SDA/SCL to +5V
    • If the user doesn't want the resistors, they can snip them out of the circuit
  • Uses through hole parts so that it is easier to assemble.
    • The sole exception is the voltage regulator which is surface mount for heat transfer
  • 5mm pitch screw terminal blocks.
  • Reset switch.
  • 7-12V DC on standard 2.1mm DC power connector
  • Power selection jumper (FTDI, Regulator, Screw Terminals)
  • Four (4) good mounting holes that take 4-40 screws and have more than enough clearance for screw heads, standoffs and/or nuts.

Design Advantages

Gets away from all of the painful wire jumpers and pins that constantly come loose. Makes the step from prototype to final design much easier.

Method Material Costs Labor Tasks Power/Ground pins Wires secure? Mounting I2C Support
Processor UNO - $30 Strip wires and solder to parts 3 GND1 PWR Wires don't stay in holes with any stress. Poor No connector
Breadboards Uno - $30 +Breadboard $10 Strip wires or use breadboard wires 120 each PWR/GND for 700 point breadboard Moderately secure since the holes are usually “tight” Poor No connector
ProtoShields Uno - $30 +Shields - $15 Lot of time- consuming soldering of custom wiring Vary but usually enough although maybe not connectorized in the best use Wires typically soldered so secure Poor No connector
Sensor Shields Uno - $30 +Shields - $15 Use custom wires Excellent at 1 per Arduino Digital/Analog pin Connectors are secure Poor Yes
Screw Wings Uno - $30 + Wing Shield - $15 Strip wires and solder to parts Varies depending upon shield Connections very secure Poor No connector
Screwduino $30 (est) Strip wires and solder to parts 5 – Ground 4 – PowerAdditional on other connectors Connections very secure Excellent Yes

Screwduino Schematic

Screwduino Layout

ScrewduinoX6PlotBW.PNG

Power

Measured 15 mA with 9V external power input (no loads but running program).

Card Power Source - VSEL Jumper

  • This jumper selects the power source for the card
    • Install jumper across the USB pins to power the card from the FTDI interface.
    • Install jumper across the EXT pins to power the card from the DC jack.
    • Leave the jumper off when powering the card from the ISP connector.

Factory Test Procedure

Programming and test procedure

Check DC regulator

  • Install shunt JP2 on "EXT" (DC jack)
  • Connect DCJ to regulated power supply
    • DC output off
    • 9.0V +/- 0.1V
    • Current limited at 100 mA
  • DC output ON
  • Verify 5V +/- 0.1V on screw terminal pins
  • Verify current draw is < 30 mA
  • DC output OFF
  • Move shunt JP2 to "USB"

Program Bootloader

  • Use ATProgHead programmer
  • Three methods
    • In ATProgHead programmer DIP-28 socket
    • On card
    • TL-866+ Programmer

Program Bootloader in ATProgHead programmer

REMINDER: Can't download an application program with this method since it will over-write the bootloader

  • Connect ATProgHead programmer USB to PC
  • Find COM port using Device Manager
  • Run Arduino IDE
    • Select COM Port
    • Set Board "Arduino UNO"
    • Programmer "Arduino as ISP"
  • Load Blink sketch
  • Install ATMega328 in 2 pin DIP socket
  • Program the MCP23008 with UNO bootloader
    • Tools / Burn Bootloader
    • Verify it programs without error
    • Tail looks like
Reading | ################################################## | 100% 0.03s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude done.  Thank you.

Program Bootloader on card

  • Connect 2X3 ISP cable to JP3
    • Be careful to observe location of pin 1 (red power lead is at pin 2)
  • Find COM port using Device Manager
  • Run Arduino IDE
    • Select COM Port
    • Set Board "Arduino UNO"
    • Programmer "Arduino as ISP"
  • Program the Screwduino with UNO bootloader - verify it programs without error
    • Tools / Burn Bootloader

TL-866+ Programmer

TL866 Fuse Bits.PNG

Download FAT

SCREWDUINO TestStation P11464-720PX.jpg

  • Uses pong probe test fixture
  • Connect FTDI USB Serial to UUT Screwduino
  • Verify Power on Voltmeter
  • Download program "Screwduino_test" to UUT
  • Verify each pin blinks (100 mS blink rate)
    • Move LED + side to terminal pins D3-D13 and A0-A5
    • LED should blink shortly at each position

Download Blink Sketch

  • Download program "Blink" to UUT
  • Board ships with Blink (PC13) running
  • Board ships with JP2 in "USB" position, ie, power comes from the FTDI jack

Assembly Sheet

Revision History

Rev X6 (vs X5)

From kiCompNL.py
First netlist: Screwduino X5\screwduino.net
Number of Nets: 33
Second netlist: screwduino.net (Rev X6)
Number of Nets: 33
Mismatch in net (1): +5V diff ['JP8-3']
Mismatch in net (1): /SDA diff ['JP8-2']
Mismatch in net (1): /SCK diff ['JP8-1']
Mismatch in net: +5V diff ['JP8-2']
Mismatch in net: /SDA diff ['JP8-3']
Mismatch in net: /SCK diff ['JP8-4']

Rev X5 (vs X4)

From kiCompNL.py
First netlist: C:\Users\doug_000\Documents\GitHub\lb-boards\Screwduino\ScrewduinoX4\screwduino.net
Number of Nets: 33
Second netlist: C:\Users\doug_000\Documents\GitHub\lb-boards\Screwduino\Screwduino X5\screwduino.net
Number of Nets: 33
Mismatch in net (1): 5V diff ['C8-1', 'C7-1']
Mismatch in net (1): SDA diff ['R3-2']
Mismatch in net (1): SCK diff ['R2-2']
Mismatch in net (1): RST* diff ['C1-1', 'R1-2']
Mismatch in net (1): VIN diff ['C2-1', 'C3-1']
Mismatch in net (1): DTR* diff ['C1-2']
Mismatch in net: 5V diff ['C1-1', 'C2-1']
Mismatch in net: SDA diff ['R2-2']
Mismatch in net: SCK diff ['R1-2']
Mismatch in net: RST* diff ['C3-1', 'R3-2']
Mismatch in net: VIN diff ['C8-1', 'C7-1']
Mismatch in net: DTR* diff ['C3-2']

Rev X4 (vs X3)

No netlist changes
Rev X3 (vs X2)
From kiCompNL.py
net is in 1 but not 2 ['+5V', 'JP6-7', 'JP7-2', 'JP3-2', 'D1-2', 'R1-1', 'JP4-3', 'JP2-2', 'JP4-4', 'U1-7', 'U1-20', 'C8-1', 'C9-1', 'C7-1', 'C4-1', 'JP8-3', 'C5-1', 'R3-1', 'R2-1', 'C6-1']
net is in 1 but not 2 ['/D12', 'U1-18', 'JP3-1', 'JP6-2']
net is in 1 but not 2 ['/AREF', 'U1-21', 'JP5-8']
net is in 1 but not 2 ['/D5', 'U1-11', 'JP7-3']
net is in 1 but not 2 ['/D4', 'U1-6', 'JP7-4']
net is in 1 but not 2 ['/D0', 'JP1-4', 'JP7-8', 'U1-2']
net is in 1 but not 2 ['/D6', 'U1-12', 'JP4-8']
net is in 1 but not 2 ['/D7', 'U1-13', 'JP4-7']
net is in 1 but not 2 ['/D8', 'JP4-6', 'U1-14']
net is in 1 but not 2 ['/SDA', 'JP8-2', 'R3-2', 'U1-27', 'JP5-2']
net is in 1 but not 2 ['/VROUT', 'U2-2', 'U2-4', 'JP2-1']
net is in 1 but not 2 ['/VUSB', 'JP1-3', 'JP2-3']
net is in 1 but not 2 ['/SCK', 'R2-2', 'U1-28', 'JP8-1', 'JP5-1']
net is in 1 but not 2 ['/AD3', 'U1-26', 'JP5-3']
net is in 1 but not 2 ['/AD2', 'U1-25', 'JP5-4']
net is in 1 but not 2 ['/AD1', 'JP5-5', 'U1-24']
net is in 1 but not 2 ['/AD0', 'JP5-6', 'U1-23']
net is in 1 but not 2 ['/RST*', 'SW1-1', 'U1-1', 'JP4-5', 'SW1-2', 'D1-1', 'R1-2', 'JP3-5', 'C1-1']
net is in 1 but not 2 ['/D11', 'U1-17', 'JP3-4', 'JP6-3']
net is in 1 but not 2 ['/D13', 'JP3-3', 'JP6-1', 'U1-19']
net is in 1 but not 2 ['/D2', 'U1-4', 'JP7-6']
net is in 1 but not 2 ['/VIN', 'C2-1', 'C3-1', 'U2-3', 'K1-1', 'JP6-6']
net is in 1 but not 2 ['/D9', 'JP6-5', 'U1-15']
net is in 1 but not 2 ['/D10', 'U1-16', 'JP6-4']
net is in 1 but not 2 ['/D1', 'JP1-5', 'U1-3', 'JP7-7']
net is in 1 but not 2 ['/D3', 'JP7-5', 'U1-5']
net is in 1 but not 2 ['""', 'MTG4-1']
net is in 1 but not 2 ['""', 'MTG3-1']
net is in 1 but not 2 ['/CX1', 'X1-1', 'U1-10']
net is in 1 but not 2 ['/CX2', 'U1-9', 'X1-3']
net is in 1 but not 2 ['/DTR*', 'JP1-6', 'C1-2']
net is in 1 but not 2 ['""', 'MTG1-1']
net is in 1 but not 2 ['""', 'MTG2-1']

Rev X3 (vs X2)

From kiCompNL.py

net is in 1 but not 2 ['+5V', 'JP6-7', 'JP7-2', 'JP3-2', 'D1-2', 'R1-1', 'JP4-3', 'JP2-2', 'JP4-4', 'U1-7', 'U1-20', 'C8-1', 'C9-1', 'C7-1', 'C4-1', 'JP8-3', 'C5-1', 'R3-1', 'R2-1', 'C6-1']
net is in 1 but not 2 ['/D12', 'U1-18', 'JP3-1', 'JP6-2']
net is in 1 but not 2 ['/AREF', 'U1-21', 'JP5-8']
net is in 1 but not 2 ['/D5', 'U1-11', 'JP7-3']
net is in 1 but not 2 ['/D4', 'U1-6', 'JP7-4']
net is in 1 but not 2 ['/D0', 'JP1-4', 'JP7-8', 'U1-2']
net is in 1 but not 2 ['/D6', 'U1-12', 'JP4-8']
net is in 1 but not 2 ['/D7', 'U1-13', 'JP4-7']
net is in 1 but not 2 ['/D8', 'JP4-6', 'U1-14']
net is in 1 but not 2 ['/SDA', 'JP8-2', 'R3-2', 'U1-27', 'JP5-2']
net is in 1 but not 2 ['/VROUT', 'U2-2', 'U2-4', 'JP2-1']
net is in 1 but not 2 ['/VUSB', 'JP1-3', 'JP2-3']
net is in 1 but not 2 ['/SCK', 'R2-2', 'U1-28', 'JP8-1', 'JP5-1']
net is in 1 but not 2 ['/AD3', 'U1-26', 'JP5-3']
net is in 1 but not 2 ['/AD2', 'U1-25', 'JP5-4']
net is in 1 but not 2 ['/AD1', 'JP5-5', 'U1-24']
net is in 1 but not 2 ['/AD0', 'JP5-6', 'U1-23']
net is in 1 but not 2 ['/RST*', 'SW1-1', 'U1-1', 'JP4-5', 'SW1-2', 'D1-1', 'R1-2', 'JP3-5', 'C1-1']
net is in 1 but not 2 ['/D11', 'U1-17', 'JP3-4', 'JP6-3']
net is in 1 but not 2 ['/D13', 'JP3-3', 'JP6-1', 'U1-19']
net is in 1 but not 2 ['/D2', 'U1-4', 'JP7-6']
net is in 1 but not 2 ['/VIN', 'C2-1', 'C3-1', 'U2-3', 'K1-1', 'JP6-6']
net is in 1 but not 2 ['/D9', 'JP6-5', 'U1-15']
net is in 1 but not 2 ['/D10', 'U1-16', 'JP6-4']
net is in 1 but not 2 ['/D1', 'JP1-5', 'U1-3', 'JP7-7']
net is in 1 but not 2 ['/D3', 'JP7-5', 'U1-5']
net is in 1 but not 2 ['""', 'MTG4-1']
net is in 1 but not 2 ['""', 'MTG3-1']
net is in 1 but not 2 ['/CX1', 'X1-1', 'U1-10']
net is in 1 but not 2 ['/CX2', 'U1-9', 'X1-3']
net is in 1 but not 2 ['/DTR*', 'JP1-6', 'C1-2']
net is in 1 but not 2 ['""', 'MTG1-1']
net is in 1 but not 2 ['""', 'MTG2-1']