Project:Nanode/PoorMansCable
Health Warning: This build is experimental and has not yet been verified. A much more primitive (but often tried/build) approach is Project:Nanode/PoorMansCable2.
What?
The Poor Man's Cable (PMC). An attempt at a sub-£3 cable to program the nanode. Current build price: ~£2.04
Proposed BOM
1 x MAX232A at 86p each+vat
OR
1 x *202* at 61p each+vat
OR
1 x SMD ones are around 30p
4 x '100nF Capacitor' at ~2p each
1 x 9 pin D connector at 31p each+vat
1 x header socket 1 by 6 sub-20p
1 x pcb todo: add link to file
1 x USB to RS232 at £1.14
Overall cost, under £2+the pcb
Why?
The current solution for programming the Nanode costs £12 on Ebay
Puzzle Pieces
Here are all of the current pieces to the puzzle.
SP232ACP Board PCB Schematics
SP232ACP IC Datasheet
FTDI Cable Pinout
- (Black) GND
- (Grey) /CTS
- (Red) VCC (5V)
- (Orange) TXD
- (Yellow) RXD
- (Green) /RTS
Nanode Pinout
- Gnd
- no connection
- Vcc
- Rxd
- Txd
- /Reset
Test Results
Crossover Connection
It was possible to talk from one serial terminal to another and back again. The two COM ports were linked by making a crossover connection between PMC and a known working FTDI TTL-232R-3V3 cable and opening up two serial terminals.
FTDI | Pin | PMC |
---|---|---|
(Black) | GND | GND |
(Grey) | CTS | RTS |
(Red) | VCC (5V) | VCC |
(Orange) | TXD | RXD |
(Yellow) | RXD | TXD |
(Green) | RTS | CTS |
Listening to Serial Output
Flash arduino with
void setup() { Serial.begin(9600); } void loop() { Serial.println("Hello World!"); delay(1000); }
Hello World! using the PMC could be seen in terminal with:
screen /dev/ttyUSB0 9600
avrdude
Command:
avrdude -p atmega328p -b 57600 -P /dev/ttyUSB0 -U flash:r:./blah.hex -v -c arduino
Terminal output:
avrdude: Version 5.10, compiled on Mar 23 2010 at 15:03:00 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch System wide configuration file is "/etc/avrdude.conf" User configuration file is "/home/samuel/.avrduderc" User configuration file does not exist or is not a regular file, skipping Using Port : /dev/ttyUSB0 Using Programmer : arduino Overriding Baud Rate : 57600 AVR Part : ATMEGA328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 5 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : Arduino Description : Arduino avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x00 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x00 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0xe0 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0xe0 Hardware Version: -1074437604 Firmware Version: 151804672.-1215592768 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0xe0 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x00 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0xe0 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x00 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0xe0 Vtarget : 15004184.0 V Varef : 307937452.8 V Oscillator : 0.027 Hz SCK period : 12268194.5 us avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0xe0 avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x00 avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0xe0 avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check. avrdude: stk500_disable(): protocol error, expect=0x14, resp=0xe0 avrdude done. Thank you.
Other Solutions
Here's how to do a RS232 to TTL level converter with a couple of transistors