User Manual Gerduino 5.4
User Manual Gerduino 5.4
Exclusively From
User Manual
By: G.J. van Loo, Version 1.3
Dated: 6th Nov 2013
1|Page
Contents .......................................................................................................................... 2
1 Introduction ........................................................................................................................................ 3
1.1 Identify......................................................................................................................................... 3
1.2 Comparison ................................................................................................................................. 4
1.3 Vext ............................................................................................................................................... 4
2 RS232/UART .................................................................................................................................... 4
2.1 Atmega-328 & Pi UART ........................................................................................................... 5
2.2 Atmega-48 UART....................................................................................................................... 5
3 Atmega-328 ..................................................................................................................................... 6
3.1 Features ....................................................................................................................................... 6
3.2 Program the Atmega-328 ....................................................................................................... 6
3.3 Using/running the Atmega-328 ............................................................................................ 7
4 Atmega-48 ........................................................................................................................................ 7
4.1 Features ....................................................................................................................................... 7
4.2 Program the Atmega-48 ......................................................................................................... 7
4.3 Using/running the Atmega-48............................................................................................... 8
4.4 Real Time Cloc ........................................................................................................................... 8
4.5 Infra-red receiver/remote control receiver ....................................................................... 8
4.6 Battery Drain .............................................................................................................................. 9
4.7 Atmega-48 LED trick .............................................................................................................. 10
5 Connectors ...................................................................................................................................... 11
5.1 Alternate functions. ................................................................................................................ 11
5.2 Atmega-328 .............................................................................................................................. 13
5.3 Atmega-48 ................................................................................................................................ 14
5.4 Raspberry-Pi ............................................................................................................................. 15
6 Frequently Asked Questions (FAQs) .................................................................................. 16
7 How to start ................................................................................................................................... 17
7.1 On the Raspberry-Pi: ............................................................................................................. 17
7.2 On a PC ...................................................................................................................................... 17
8 Example programs ...................................................................................................................... 19
8.1 Atmega-328 .............................................................................................................................. 19
8.2 Atmega-48 ................................................................................................................................ 23
9 Control Arduino Reset .............................................................................................................5
10 Appendix A : GertDuino Schematic..................................................................................... 26
2|Page
1 Introduction
The GertDuino is a Raspberry-Pi add-on board which offers the same functionality as an
Arduino-Uno but with some extra added features.
1.1 Identify
The picture below lets you identify the various functions on the board.
• RS232 level converter can be used by:
o Raspberry-Pi
o or Atmega-328
o or Atmega-48
• Atmega 328 (Arduino-Uno® compatible) with:
o Arduino-Uno® compatible connectors
o Reset button
o 2 user push buttons
o 6 LEDs.
• Atmega 48 with:
o I/O connector with 20 pins.
o High precision RTC crystal
o Battery backup power supply
o IRDA interface
PCB Overview:
3|Page
1.2 Comparison
There are some differences between a normal Arduino-Uno and the GertDuino.
1.3 Vext
As the board does not have a separate supply the Vext is not connected. If you want it
connected you have to add the following components:
J1, L4 (or a short instead of L4), D20 (or a short instead of D20).
2 RS232/UART
The Gerduino board has a RS232 level converter which will convert the signals form a UART to
the RS232 standard voltages (And invert them as per that same standard). The RS232 signals
come from J12.
4|Page
Connections can be made in many ways:
5|Page
3 Atmega-328
3.1 Features
This device is compatible with the Arduino Uno. In contrast to the 328 on the GERTBOARD this
device runs of 5V, has the 16MHz oscillator and has connectors which are 100% Arduino-Uno
compatible. It also contains the reset switch.
This board also has the following components which you will not find on the Uno:
• 2 User push buttons
• 6 LEDs 1
LEDs
One LED is connected to PB5 (aka Port-13 aka SCK). This is compatible with the UNO. The
GertDuino has a five more LEDs. The total list of LEDs is:
- PB5 (Port-13)
- PB1 (Port-9)
- PB2 (Port-10)
- PD3 (Port-3)
- PD5 (Port-5)
- PD6 (Port-6)
The LEDs are not directly connected but are buffered and thus do not give any significant load
on the signal pins.
User buttons
The two user buttons are connected to pins PC2 and PC3. They will only function correctly if the
pins have an internal or external pull-up. The button are connected through a 1K Ohm resistor
so they will not cause a short if a pin is set as output and the button is pressed.
To program the 328 using a JTAG-ICE you need to use the "squid" cable and make the following
connections:
1
LED: The first debug tool any programmer grabs for.
6|Page
At the left there are the GND (white) and 5V (Purple) connections.
At the top row right are the Reset (green), Mosi (Red), Clk (Black) and Miso (Grey)2.
The equivalent JTAG names for these are: nSRST, TDI, TCK, TDO
When developing programs you may leave the jumpers in place as the programme will tri-state
its pins and set the reset pin high when it has finished. This is NOT the case if the PI is reset or
not powered. Especially the reset-jumper needs to be removed otherwise the Raspberry-Pi GPIO
pin 8 (which is default low) will the keep the 328 device in reset or you can run the reset_off
script.
You should also remove the jumpers if you want to use any of the following pins: B3,B4,B5,C6.
4 Atmega-48
4.1 Features
This device is intended to be used as Real Time Clock (RTC) and/or as IRDA front end. However
it is also freely programmable by the user and thus can be used for any other application, giving
the user the power of not one but TWO Atmega devices to play with.
Note: The I2C interface of the Atmega-48 is connected permanently to the Raspberry-Pi I2C
interface <GOIO0/1 on rev1, GPIO 2/3 on rev2>.
Also beware that if you make programming errors with the Atmege-328 the device can easily be
replaced. This is not the case with the Atmega-48. It is therefore strongly recommended that
you are extra careful and do not damage any of the I/O ports.
Spare connections.
The following I/O pins of the Atmega-48 are not used and are brought out to a connector:
B0,B1,B2, B3, B4,B5, C0,C1,C2,C3,D0,D1,D4, D5, D6, D7.
Beware that B3, B4 and B5 are also used for programming the device.
The programming is the same as the 328 but replace "328p" with "48pa".
2
The colours used here are the same as on MY squid cable but I can't guarantee all squid cables are the same.
7|Page
To program the 48 using a JTAG-ICE you need to use the "squid" cable and make the following
connections:
At the left there are the GND (white) and 5V (Purple) connections.
At the bottom row right are the Reset (green), Mosi (Red), Clk (Black) and Miso (Grey).3
The equivalent JTAG names for these are: nSRST, TDI, TCK, TDO
When developing programs you may leave the jumpers in place as the programme will tri-state
its pins and set the reset pin high when it has finished. This is NOT the case if the PI is reset or
not powered. Especially the reset-jumper needs to be removed otherwise the Raspberry-Pi GPIO
pin 8 (which is default low) will the keep the 48 device in reset or you can run the reset_off
script.
You should also remove the jumpers if you want to use any of the following pins: B3,B4,B5,C6.
The other part of the RTC is that the Atmega-48 has a 3V battery. It will switch to that battery
when the 5V power is removed. As the Atmega-48 is a fully programmed microcontroller it can
be set-up to perform other operations or hold other data when the main power of the BCM2835
is removed.
If you have programmed the Atmege-48 correctly it uses ~1µA when powered down.
Unfortunately we could not run the IRDA interface from the battery as it uses too much current
(~450 µA). Thus you need the 5V present for it to operate.
3
The colours used here are the same as on MY squid cable but I can't guarantee all squid cables are the same.
8|Page
The IRDA can also be used if the GertDuino is used stand-alone to control the connected logic
using a remote control.
Note that 95% of all TV/Video/CD remote controls use the 38KHz infra-red signal, but the
coding varies greatly from type to type.
Even if you think the device is in ultra-low-power mode it can still consume power if it has to
drive outputs high.
Measurements have also show that if a UART connection exists between the Atmega-48 to the
Raspberry-Pi (even if it is not used) that increases the lower power current from 1µA to about
100µA.
To measure the current consumption you have to use a 3V supply and connect it to the battery
holder but between the supply and the battery holder you have to place a current (Ampere)
meter. Optionally you can connect a scope on one of the I/O pins of the Atmege48 to see if the
program is running. You should NOT connect anything to one of the output which loads an I/O
pin as that will cause extra current consumption.
This is a block diagram of the setup:
A
Gertduino
3V
Atmega48pa
GND
The meter shows a current consumption of 1.3µAmp. (The meter is shown enlarged in the lower
left hand corner of the picture) .
9|Page
If possible limit the current from your power source to a few milli-amps. I managed to blow a
fuse of my meter performing the measurements because I accidentally shorted the supply when
placing the probe on the battery holder.
You can then use the connectors to feed a signal to an LED. Simplest way is to use a female-
male strap between connector J10 and e.g. pins, 2,3 or 6 of J14.
10 | P a g e
5 Connectors
The board contains a number of connectors. You will find that in the document the connectors of
the Atmega devices have two ways of numbering: There are the single numbers 0..13 and
A1..A3. These are the numbers used in many Arduino example programs. Alongside those I use
the official pin names (PB0..PB7, PD0..PD7, PCO..PC3). The latter are easier to use if you have
to work with the AVR datasheet.
# Name Functions
- PB7 XTAL2 (Chip Clock Oscillator pin 2)
TOSC2 (Timer Oscillator pin 2)
PCINT7 (Pin Change Interrupt 7)
- PB6 XTAL1 (Chip Clock Oscillator pin 1 or External clock input)
TOSC1 (Timer Oscillator pin 1)
PCINT6 (Pin Change Interrupt 6)
11 | P a g e
# Name Functions
ADC5 (ADC Input Channel 5)
A5 PC5 SCL (2-wire Serial Bus Clock Line)
PCINT13 (Pin Change Interrupt 13)
ADC4 (ADC Input Channel 4)
A4 PC4 SDA (2-wire Serial Bus Data Input/Output Line)
PCINT12 (Pin Change Interrupt 12)
ADC3 (ADC Input Channel 3)
A3 PC3
PCINT11 (Pin Change Interrupt 11)
A2 PC2 ADC2 (ADC Input Channel 2)
PCINT10 (Pin Change Interrupt 10)
A1 PC1 ADC1 (ADC Input Channel 1)
PCINT9 (Pin Change Interrupt 9)
A0 PC0 ADC0 (ADC Input Channel 0)
PCINT8 (Pin Change Interrupt 8)
# Name Functions
AIN1 (Analog Comparator Negative Input)
7 PD7
PCINT23 (Pin Change Interrupt 23)
6 PD6 AIN0 (Analog Comparator Positive Input)
OC0A (Timer/Counter0 Output Compare Match A Output)
PCINT22 (Pin Change Interrupt 22)
12 | P a g e
5.2 Atmega-328
The Atmega-328 pins are brought to connectors compatible with the Arduino-Uno.
J14 J7
1 1 1 1
1 1
1 1
1 1
1 1
1 1
1 1 1 1
Pin 1 is on the right-hand side so these tables top-to-bottom are the pins from left-to-right.
J9 J6
1 1 1 1
1 1
1 1
1 1
1 1
1 1
1 1 1 1
Pin 1 is on the left-hand side so these tables top-to-bottom are the pins from right-to-left.
Beware that Pin 8 of J9 is normally connected directly to the input voltage which has been
removed and thus is NC here.
13 | P a g e
5.3 Atmega-48
All unused pin of the Atmega-48 are brought out to a 20 -pin connector:
1 1
1
1
1
1 1
1
5V 13 : PB5/SCK
VBAT/5V 12 : PB4/MISO
ADC0/PC0 : A0 11 : PB3/MOSI
ADC1/PC1 : A1 10 : PB2/SS
ADC2/PC2 : A2 9 : PB1/PCINT1
ADC3/PC3 : A3 8 : PB0/CLK0
RXD/PD0 : 0 7 : PD7/AIN1
TXD/PD1 : 1 6 : PD6/AIN0
T0/PD4 : 4 5 : PD5/T1
Ground Ground
20
The supply 5V/VBAT which goes to the Atmega-48 also goes to the connector pin 3. Any
equipment connected to that pin will also draw current from the battery if the 5V is switched off.
The supply comes through a Schottky diode so the actual voltage is lower: ~4.5 Volts. Also the
current consumption should be limited ~100mA.
The Atmege-48 does not have a dedicated reset pin as that would interfere with its function as
real-time-clock. A reset can be obtained by pulling pin 4 of J13 low.
14 | P a g e
5.4 Raspberry-Pi
All connections between the board and the Raspberry-Pi are protected against 5V signals. The
I2C bus has FET level switches. All the other signals use resistive dividers.
The following connections of the Raspberry-Pi are used:
5V
3V3 ( I2C level converters only)
GPIO0/2 (I2C SDA)
GPIO1/3 (I2C SCL)
The following connections of the Raspberry-Pi are used if the programming jumpers or UART
jumpers are placed:
GPIO14 (UART-Tx)
GPIO15 (UART-Rx)
GPIO8 (Reset)
GPIO9 (MISO)
GPIO10 (MOSI)
GPIO11 (SCLK)
15 | P a g e
6 Frequently Asked Questions (FAQs)
Some questions you may ask and the answers.
The Raspberry-Pi boots different: it has big text and not the normal prompt!
Q: When I plug the GertDuino on the Raspberry-Pi it boots different: It has big text and not the
normal prompt!
A: Pin 5 of the GPIO connector is used to indicate ‘safe boot mode’. If that pin is low when
booting the Raspberry-Pi boots in “safe mode”. Pin 5 is also connected to the Atmge-48. It
is one of the I2C pins. Thus if your 48 is driving a LOW on that pin the Pi always boots in
safe mode.
To prevent this you can put “avoid_safe_mode=1” in the config.txt file and the pi will boot
normally.
16 | P a g e
7 How to start
Before you can program the devices you need to have a cross compiler. A cross compiler is a
compiler which runs on one type of processor, but generates code for a different type. In this
case the compiler runs on the Raspberry-Pi (ARM11 device) but makes code for the Atmel
devices.
For both you need to have a cross compiler for the Atmega devices. Easiest is to install the
Arduino package:
avrdude
You need to use a program called "avrdude" to program the devices BUT you need a special
version of "avrdude" which can program the devices using the GPIO of the Raspberry-Pi. Thanks
for Gordon Henderson (projects.drogon.net) who has provided these:
cd /tmp
wget http://project-downloads.drogon.net/gertboard/avrdude_5.10-4_armel.deb
sudodpkg -i avrdude_5.10-4_armel.deb
sudochmod 4755 /usr/bin/avrdude
Debian Raspbian:
cd /tmp
wget http://project-downloads.drogon.net/gertboard/avrdude_5.10-4_armhf.deb
sudodpkg -i avrdude_5.10-4_armhf.deb
sudochmod 4755 /usr/bin/avrdude
You can now compile programs for the Atmega devices and upload the program into the chip on
the GertDuino. Example source code, Makefile and how to upload the program can all be found
in section 8 Example programs.
If you want to use the Arduino development environment you have to adapt it. See
projects.drogon.net/raspberry-pi/gertboard/arduino-ide-installation-isp/ how to do that.
7.2 On a PC
Atmel have a free C-compiler. You can get information about the latest version here:
http://www.atmel.com/tools/ATMELSTUDIO.aspx
You can compile on the PC but you need to transfer the final .hex file to the Raspberry-Pi before
you can program the Atmega devices.
17 | P a g e
Alternative is that you buy a JTAG-ICE box and use that to program and the devices but that is
a lot more expensive. It does have the advantage that you can use it for debugging as well:
Step through the program, set breakpoints ,inspect variables etc.
18 | P a g e
8 Example programs
8.1 Atmega-328
/*
* blink.c
*
* Created: 23/09/2013 21:04:02
* Author: G.J. van Loo
* Simple example program to 'walk' the LEDs
*/
#include <avr/io.h>
// Outputs are:
// LED0 = PB5
// LED1 = PB1
// LED2 = PB2
// LED3 = PD3
// LED4 = PD5
// LED5 = PD6
while (ms != 0) {
for (i=0; i != delay_count; i++);
ms--;
}
} // delay_ms
void delay()
{ long d;
unsigned char oldb,oldd;
for (d=0; d<DELAY; d++)
{
delay_ms(1);
if ((PINC & 0b00001000)==0)
{
oldb = PORTB;
19 | P a g e
oldd = PORTD;
PORTB = 0xFF;
PORTD = 0xFF;
delay_ms(1);
PORTB = oldb;
PORTD = oldd;
d--;
}
else
{ if ((PINC & 0b00000100)==0)
d--;
else
delay_ms(1);
} // if button pressed
} // if button pressed
} // delay
int main(void)
{ // int b;
// Set all LED connections to output
DDRB = 0b00100110;
DDRD = 0b01101000;
PORTB = 0x00;
PORTD = 0x00;
// Set button (port C) to input
DDRC = 0b00000000;
// pull-up on C2 & C3:
PORTC = 0b00001100;
while(1)
{ // convoluted but simple walk the leds
output_high(PORTB,5);
delay();
output_low (PORTB,5);
output_high(PORTB,1);
delay();
output_low (PORTB,1);
output_high(PORTB,2);
delay();
output_low (PORTB,2);
output_high(PORTD,3);
delay();
output_low (PORTD,3);
output_high(PORTD,5);
delay();
output_low (PORTD,5);
output_high(PORTD,6);
delay();
output_low (PORTD,6);
output_high(PORTD,5);
delay();
output_low (PORTD,5);
output_high(PORTD,3);
delay();
output_low (PORTD,3);
output_high(PORTB,2);
20 | P a g e
delay();
output_low (PORTB,2);
output_high(PORTB,1);
delay();
output_low (PORTB,1);
} // forever
} // main
Makefile
# Makefile:
# Make the GertDuino m328p firmware.
#
# Copyright (c) 2013 Gordon Henderson <[email protected]>
#################################################################################
# This file is part of gertduino-m328:
#Software to run on the Atmega328p processor on the Gerduino board
#Can be used for the Atmega328p processor on the GERTBOARD as well
# This is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this. If not, see <http://www.gnu.org/licenses/>.
#################################################################################
TARGET=blink
MCU=atmega328p
FREWQ=16000000
# Debug
#DEBUG = -gstabs
# C flags
CC = avr-gcc
#CFLAGS = $(DEBUG) -O3 -Wall -std=gnu99 -mmcu=$(MCU) -DF_CPU=$(FREWQ) $(INCLUDE)
CFLAGS = $(DEBUG) -O2 -mcall-prologues -Wall -std=gnu99 -mmcu=$(MCU) -
DF_CPU=$(FREWQ) $(INCLUDE)
LD = avr-gcc
#LDFLAGS2=-Wl,-uvfprintf -lprintf_flt
LDFLAGS = -mmcu=$(MCU) $(DEBUG) $(LIBLOC) $(LDFLAGS2)
#LIBS = -ldross -lm
SRC = $(TARGET).c
OBJ = $(SRC:.c=.o)
all: $(TARGET).hex
$(TARGET).hex: $(TARGET).elf
@echo [hex] $<
21 | P a g e
@avr-objcopy -j .text -j .data -O ihex $(TARGET).elf $(TARGET).hex
$(TARGET).elf: $(OBJ)
@echo [Link] $<
@$(LD) -o $@ $(OBJ) $(LDFLAGS) $(LIBS)
@avr-size $(TARGET).elf
.c.o:
@echo [CC] $<
@$(CC) -c $(CFLAGS) $< -o $@
.PHONEY: clean
clean:
rm -f *.o *.elf *.hex *.lst Makefile.bak *~
Program 328
#!/bin/bash
# script to program 328p device using AVRDUDE and a hex file
if [ "$1" == "" ]; then echo Missing argument
exit 1;
fi
# if ends in .hex use full argument
# otherwise add the .hex
ext=${1:${#1}-4}
if [ "$ext" == ".hex" ]; then
/usr/bin/avrdude -c gpio -p m328p $1 -Uflash:w:$1
else
/usr/bin/avrdude -c gpio -p m328p $1.hex -Uflash:w:$1.hex
fi
Save the above code in a file called program_328 and then run "chmod 777 program_328". Use
./program_328 <hex file> to program the Atmega device.
You normally run the above command when you get a brand new device. It programs the
Atmega328 to use the external 16MHz Crystal.
22 | P a g e
8.2 Atmega-48
This section shows an example program for the Atmega48. You will find that the makefile and
the programming files are very similar to the 328 example.
#include <avr/interrupt.h>
#include <avr/sleep.h>
main()
{
// set PB0 as output
DDRB = 0xFE;
while (1)
{
SMCR = 0x7; // Go into lowest power sleep mode
asm("sleep");
asm("nop");
// Interrupt woke us up
// If we get here the interrupt routine has already been called
//
23 | P a g e
// Timer 2 overflow
// if we set timer2 up correctly this routine is called every second
//
ISR(TIMER2_OVF_vect)
{ count_seconds++; // all we do here is count seconds elapsed
}
Makefile:
# Makefile:
# Make the GertDuino m48p firmware.
#
# Copyright (c) 2013 Gordon Henderson <[email protected]>
###########################################################################
# This file is part of gertduino-m328:
#Software to run on the Atmega328p processor on the Gerduino board
#Can be used for the Atmega328p processor on the GERTBOARD as well
# This is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this. If not, see <http://www.gnu.org/licenses/>.
###########################################################################
TARGET=low_power
MCU=atmega48p
FREWQ=1000000
# Debug
#DEBUG = -gstabs
# C flags
CC = avr-gcc
#CFLAGS = $(DEBUG) -O3 -Wall -std=gnu99 -mmcu=$(MCU) -
DF_CPU=$(FREWQ) $(INCLUDE)
CFLAGS = $(DEBUG) -O2 -mcall-prologues -Wall -std=gnu99 -mmcu=$(MCU) -
DF_CPU=$(FREWQ) $(INCLUDE)
LD = avr-gcc
#LDFLAGS2=-Wl,-uvfprintf -lprintf_flt
LDFLAGS = -mmcu=$(MCU) $(DEBUG) $(LIBLOC) $(LDFLAGS2)
#LIBS = -ldross -lm
SRC = $(TARGET).c
OBJ = $(SRC:.c=.o)
all: $(TARGET).hex
$(TARGET).hex: $(TARGET).elf
@echo [hex] $<
@avr-objcopy -j .text -j .data -O ihex $(TARGET).elf $(TARGET).hex
24 | P a g e
$(TARGET).elf: $(OBJ)
@echo [Link] $<
@$(LD) -o $@ $(OBJ) $(LDFLAGS) $(LIBS)
@avr-size $(TARGET).elf
.c.o:
@echo [CC] $<
@$(CC) -c $(CFLAGS) $< -o $@
.PHONEY: clean
clean:
rm -f *.o *.elf *.hex *.lst Makefile.bak *~
Program 48
#!/bin/bash
# script to program 48pa device using AVRDUDE and a hex file
if [ "$1" == "" ]; then
echo Missing argument
exit 1;
fi
# if ends in .hex use full argument
# otherwise add the .hex
ext=${1:${#1}-4}
if [ "$ext" == ".hex" ]; then
/usr/bin/avrdude -c gpio -p m48p $1 -Uflash:w:$1
else
/usr/bin/avrdude -c gpio -p m48p $1.hex -Uflash:w:$1.hex
fi
Save the above code in a file called "program_48" and then run "chmod 777 program_48". Use
./program_48 <hex file> to program the Atmega 48 device.
Don’t forget to change the mode of the text file to executable format: (chmod 777 reset_off).
Depending on your path you may have to call the script starting with a <dot><slash>:
“./reset_off”.
Alternative copy the scripts to /usr/bin: “sudo cp reset_off /usr/bin”. If you want the Raspberry
Pi to always execute the script at boot up you have to edit the /etc/rc.local file. Make sure that
you have the full path in there. Thus if you have installed the script in /usr/bin you have to add
the following line to /etc/rc.local:
/usr/bin/reset_off
25 | P a g e
reset_off
The following script will release the Arduino reset and thus make that the Arduino chip runs. It
only works if the GertDuino is plugged in to the Raspberry Pi and the reset jumper is in place.
#!/usr/bin/sudo bash
# Set GPIO pin 8, high releasing Arduino reset
sudo echo "8" >/sys/class/gpio/export
sudo echo "out" >/sys/class/gpio/gpio8/direction
sudo echo "1" >/sys/class/gpio/gpio8/value
sudo echo "8" >/sys/class/gpio/unexport
reset_on
The following script will assert the Arduino reset and thus make that the Arduino chip stops, is
held in reset. It only works if the GertDuino is plugged in to the Raspberry Pi and the reset
jumper is in place.
#!/usr/bin/sudo bash
# Set GPIO pin 8, low activating Arduino reset
sudo echo "8" >/sys/class/gpio/export
sudo echo "out" >/sys/class/gpio/gpio8/direction
sudo echo "0" >/sys/class/gpio/gpio8/value
sudo echo "8" >/sys/class/gpio/unexport
26 | P a g e
5 4 3 2 1
J17
3V3_RASP J1 5V R15 12K_0603 R9 1K5_0603
GPIO15 pi_rx GPIO8 DBG
1 2 MISO 2 1
GPIO0/2 3 4 SCK 4 3 MC_MISO
GPIO1/3 5 6 MOSI 6 5 MC_SCK
R16 R10
GPIO4 7 8 GPIO14 Tx DBG 8 7 MC_MOSI
22K_0603 2K7_0603
9 10 GPIO15 Rx 10 9 pi_tx MC_DBG/RESETn
GPIO17 11 12 GPIO18 SER_TX 12 11 pi_rx
D GPIO21 13 14 SER_RX 14 13 D
GPIO22 15 16 GPIO23 5V
17 18 GPIO24
MOSI GPIO10 19 20 HEADER 7X2
MISO GPIO9 21 22 GPIO25
SCLK GPIO11 23 24 GPIO8
25 26 GPIO7
RN3
CONNECTOR_13X2 1 GPIO10 5 4 MOSI
2 EX_MISO GPIO9 6 3 MISO
3 EX_SCK GPIO11 7 2 SCK
4 EX_MOSI GPIO14 8 1 pi_tx
5 EX_DBG/RESETn
6 PD1
PD0
3K3X4_TC164
8
7
6
5
J13 HEADER 6X1
3V3_RASP 5V RN4
C
5K6X4_TC164 C
R is on Pi
1
2
3
4
R8 5V LOC3V3
1
2K7_0603 U4
3 2
GPIO0/2 2 3 SDA VIN VOUT
SDA
GND
C23 C24
Q1 2N7002 100nF_0603 100nF_0603
1
3V3_RASP 5V APL5320-33AI-TRG
Vin
BAS70-06/SOT23
Do Not Fit
R is on Pi
1
R13
1
2K7_0603 3
2
GPIO1/3 2 3 SCL 330nF_0603
SCL
B C20 D23 B
8
U6 5V
Q2 2N7002 2 L1 6u8H
Boost
TS4148RY D2 Vin 1
5 Switch [wurth]
SS/EN
R21 6
D20 56K_0603
L4 COMP 7
B330A-13-F R30 C21
FB
RSET
1 2 100nF_0603
GND
PAD
22pF_0603 33K2_0603
FB_1206
C16 C18
R28 SC4525C
9
C25 C27
12K7-0603
1nF_0603 1nF_0603
22uF_1210_20V
C15
R29 D21 R31
+
R20 330nF_0603 2n2F_0603 15K8_0603 8K25_0603
1 C19 B330A-13-F C22
2 RGA221M1VBK-1013G 22K_0603
C17 22uF_1206
3 GRM31CR60J476M
A J11 A
CON_PWR3
Title
Gertduino Pi & Power
Size Document Number Rev
A4 - 5.1
J14
PC5 10
PC4 9
AREF 8
7
C1 MC_SCK 6
D 100nF_0603 MC_MISO 5 D
MC_MOSI 4
SS 3
PB1 2
PB0 1
5V
CONNECTOR_10X1
C2
100nF_0603 TS4148RY C3 C4
D1 4u7F_0805 J6
22K_0603 100nF_0603
R17 PC5 6
PC4 5
AREF PC3 4
MC_DBG/RESETn PC2 3
20
21
7
U1 PC1 2
1 S1 3 1 28 PC5 PC0 1
VCC
AVCC
AREF
2 4 PD0 2 PC6/Reset_n ADC5/SCL/PC5 27 PC4
C PD1 3 PD0/RXD ADC4/SDA/PC4 26 PC3 C
PD2 4 PD1/TXD ADC3/PC3 25 PC2
PD3 5 PD2/INT0 ADC2/PC2 24 PC1 CONNECTOR_6X1
C14 PD4 6 PD3/INT1/OC2B ADC1/PC1 23 PC0
12pF_0402 PD4/XCK/T0 ADC0/PC0
XTAL_IN 9 19
10 PB6/XTAL1 SCK/PB5 18 MC_SCK J7
PD5 11 PB7/XTAL2 MISO/OC2A/PB4 17 MC_MISO
Y1
PD6 12 PD5/OC0B/T1 MOSI/OC2A/PB3 16 SS MC_MOSI PD7 8
16MHz
PD7 13 PD6/OC0A/AIN0 SS_n/OC1B/PB2 15 PB1 PD6 7
GND
GND
J8 PD2 3
PD1 2
XTAL_IN 1 PD1 PD0 1
PD0
B B
LOC3V3 5V
MC_SCK 1
PB1 LED0 2
SS LED1 MC_DBG/RESETn 3
PD3 LED2 4
PD5 LED3 5
PD6 LED4 6
LED5 7
PC2 Vin 8
PC3 BUT0 Vin
BUT1
J9 CONNECTOR_8X1
A A
Title
Gertduino Arduino
Size Document Number Rev
A4 <Doc> 5.1
D D
5V
R40 330_0603
C10
3
U9
100nF_0603
Gnd Vcc
1
Out
TSOP38238
2
IRDA
C28
100nF_0603_DNF
5V
2
C C
VEXT 5V J10
VCC
VCC
D25
GND
1 2
5V 3 4 EX_SCK
EXC0 5 6 EX_MISO
B1 BAT_HOLD_CR1025 BAT54C_SOT23 EXC1 7 8 EXB2 EX_MOSI
1
VEXT
EXC2 9 10 EXB1
C7 EXC3 11 12 EXB0
100nF_0603 C9 C8 EXD0 13 14 EXD7
4u7F_0805 EXD1 15 16 EXD6
D4 100nF_0603 EXD4 17 18 EXD5
22K_0603 22K_0603
R18 R19 19 20
TS4148RY
HEADER 10X2
16
17
3
U10
25 24
VCC
AVCC
AREF
PAD
29
ATMEGAx48PA_28MLF
A A
Title
Gertduino Atmega
Size Document Number Rev
A4 <Doc> 5.1
5V VCC 5V
D D
C13 74HC14D power connection.
100nF_0603 C38
16
100nF_0603
U3A 1 2
VCC
1 2 C39 C1+ V+
LED0
100nF_0603
5V 3 C40
M74HC14TTR C1- 100nF_0603
4
C41 C2+
D5 D6 D7 D8 D9 D10 100nF_0603
LED LED LED LED LED LED 5 6
C2- V-
RN1 SER_TX 11 14 J12
U3B 8 1 SER_TX TX1_I TX1_O
3 4 7 2 10 7 3
LED1 6 3 TX2_I TX2_O 2
5 4 R39 SER_RX 12 13 1
SER_RX RX1_O RX1_I
M74HC14TTR 22K_0603
C 9 8 C
GND
U3C 1KX4_TC164 RX2_O RX2_I
5 6 HEADER 3X1
LED2
15
C42
U8
100nF_0603
M74HC14TTR MAX3232CUE
U3E
11 10
LED3
M74HC14TTR
U3D
9 8
LED4
M74HC14TTR 1KX4_TC164
U3F 5 4
B 13 12 6 3 B
LED5 7 2
8 1
M74HC14TTR
RN2 S2
1 3
BUT0 2 4
1 S3 3
BUT1 2 4
A A
Title
Gertduino I/O
Size Document Number Rev
A4 <Doc> 5.1