Intro: Arduino Command-line Tool "MiniPirate"
This command-line enables "Quick" Arduino prototyping without compilation. Reading analog values, dis-/enabling ports and even I2C register manipulations are done in seconds instead of minutes. I will shows you how to set the time of a "DS1207" I2C realtime clock as well as executing some basic operations.
The impatients of you just download the sketch here: [GitHub] and enter the test sequence "\a2/a3ir10" into the Arduino serial monitor.
The MiniPirate is heavily inspired by the much small and powerful "Bus Pirate" of Ian Lesnet and even uses a small part of it's code.
Please vote for the Arduino contest (top right of this page). The oscilloscope will improve the further developments.
Step 1: (optional) Wiring and Power-up (only for DS1307 Breakout)
The wiring is very trivial, just pluging the DS1307 real-time clock breakout to the pins A2-A5, leaving the "DS" pin in the air (From Homebrew Computers), please wait with the connection, until the pin power-up is verified. If you don't have a DS1307, just use any other I2C device you have.
The power will be supplied over the pins A2/A3:
- Download [GitHub] and Unzip
- Rename the directory to "MiniPirate"
- Compile and download the sketch on you Arduino
- Open the Serial Monitor in your Arduino IDE ("Tools -> Serial Monitor")
After opening the monitor the help and the first prompt should be displayed. Now we execute the first command. Just type 'p' and hit <enter> in the top line of the Serial Monitor. This will show the current configuration of all ports (INPUT and Floating values).
To set A2 to Ground and A3 to Vcc wie execute: \a2/a3 <enter> and control the result with 'p'. As we don't want to repeat this again and again, we save it with 'x'.
Now we can plug in the module as described above.
Step 2: I2C Scan, Read and Write
Assuming any I2C connected to the Arduino and powered up we will continue to detect it's address and the read/write some values.
D1. Type 'i' Tt check the devices currently connected. This will list the addresses of all devices on the bus (thanks to Krodal). In my case 0x50 is the EEPROM, 0x68 is the DS1307 real-time clock. The last address will be autoselected for the next operations.
D2. Type 'w0' to set DS1307 register access pointer to zero according to the specification
D3. Type 'r10 to read the first 10 registers
To be faster you can copy-paste this 'iw0r10' and all commands will be executed.
E1. type 'i' to scan the bus again (optinal)
E2. Type '0' to switch to the EEPROM on the breakout
E3. Type 'w 0 0' to select position zero of the EEPROM
E4. Type 'r20' to read 20 bytes
E5. Type 'w 0 0 0xff 0xee 0xab 0x12' to write some values.
E6. Type 'w 0 0 r 20' to verify this values.
To be faster you can copy-paste this 'i0w00r20w0 0 0xff 0xee 0xee 0xab 0x12w0 0r20' and all commands will be executed.
Step 3: I2C Write the Time in DS1307
Now let's try to programm the clock:
According to the specification we will write 13:45:56 on 30.12.2014 to the system.
1: 0x56 (Seconds)
2: 0x45 (Minutes)
3: 0x13 (Hours)
4: 0 (Day of the week)
5: 0x30 (Day)
6: 0x12 (Month)
7: 0x14 (Year)
'w 0 0x56 0x45 0x13 0 0x30 0x12 0x14'
Enjoy it and please vote for it on the Arduino contest if you like it.