|
Commodore PET Projects
- petSD+ |
petSD+ - Hardware
|
|
petSD+ Draft Schematic |
PCB 3D model |
The hardware is built around an
Atmel
ATmega
1284P
AVR microcontroller (MCU)
with 128KB of
flash
memory, 16 KB of
SRAM and a 4 KB
EEPROM,
clocked at 18.432 MHz. To make assembly easier for electronic
hobbyists, the
PDIP package was chosen for the petSD+ design . The main
components on the petSD+ PCB are :
Bus Drivers
To enable petSD+ to coexist with other devices on the
IEEE-4888 bus, it is fitted with a pair of Texas Instruments
SN75160/SN75161 IEEE-488 bus drivers, controlled by the MCU.
The SN75160 8-channel IEEE-488 (GPIB)
transceiver is designed to support two-way
communications for the 8 data bits of the parallel
IEEE-488 bus using two control pins, TE (Talk
Enable) and PE (Pull-up Enable). In petSD+, TE is
controlled by the MCU and PE is tied to 0V. |
|
With PE tied low, the driver outputs behave as
passive pull-ups when TE is high and are placed in
the high impedance state when TE is low. |
|
When TE is low, the receiver bits are set to the
values of the corresponding bus data bits. |
|
The SN75161 8-channel IEEE-488 (GPIB)
transceiver is designed to provide the bus
management and data-transfer signals for a single
controller IEEE-488 bus system.
The direction of data is controlled by the
Direction Control (DC) and Talk Enable (TE) pins. In petSD+, TE is controlled by the MCU and DC is
pulled up to Vcc. This means that petSD+ will always
be a device and never a bus master
such as a CBM computer. In other words: you can use
it only as a device attached to a computer but never
"stand-alone" with other IEEE-488 devices. |
|
In petSD+, the Service Request (SRQ) and Remote
Enable (REN) bus management channels are not used.
With DC pulled high, the remaining bus management
channels, Attention (ATTN), Interface Clear (IFC)
and End or Identity (EOI) are set to the directions
shown in the reduced function table opposite :
(Transmit means that petSD+ writes to the IEEE-488
bus)
(Receive means that the IEEE-488 bus state is
written to petSD+ ) |
|
With DC pulled high, the data transfer
channels (used for
handshaking), Data Valid (DAV), Not Data
Accepted (NDAC) and Not Ready For Data (NRFD) are
set to the directions shown in the reduced function
table opposite : |
|
Level Shifter
Since the petSD+ design uses both +3.3VDC (for the SD Card)
and
TTL voltage levels (for the other ICs), there needs to be
voltage level shifting to convert signal between +5V and
+3.3V for the SD card interface. The
74LVC245A
Octal Bus Transceiver (IC4) is used to provide level conversion
for the SD Card interface signals highlighted in the
table below :
74LVC245A |
74LVC245A |
SD
Card (SPI Bus Mode) |
|
Pin |
Name |
Connection |
Pin |
Name |
Connection |
Pin |
Name |
Function |
2 |
A0 |
SCK |
18 |
B0 |
CLK |
5 |
CLK |
Serial Clock |
3 |
A1 |
MOSI |
17 |
B1 |
DI |
2 |
DI |
SPI Data In |
4 |
A2 |
Ground |
16 |
B2 |
n.c. |
- |
- |
- |
5 |
A3 |
SDCS |
15 |
B3 |
CS |
1 |
CS |
SPI Card Sel |
6 |
A4 |
Ground |
14 |
B4 |
n.c. |
- |
- |
- |
7 |
A5 |
Ground |
13 |
B5 |
n.c. |
- |
- |
- |
8 |
A6 |
D0 |
12 |
B6 |
MISO |
7 |
DO |
SPI Data Out |
9 |
A7 |
Ground |
11 |
B7 |
n.c. |
- |
- |
- |
Real Time Clock
The Real Time Clock is implemented using an
NXP
PFC8583 clock and calendar chip, interfaced to the MCU using
the
I2C
bus. A 32.768 kHz quartz crystal is connected to the
RTC OSCI and OSCO pins. A trimmer capacitor between OSCI and VCC
is used for tuning the oscillator.
The PFC8583 data sheet states that "average deviations of ±5
minutes per year are possible", this equates to around 1.5
seconds per day, or expressed another way, around 19
parts-per-million (ppm). The oscillator supplied specified for
use in petSD+ has a tolerance of 20 ppm on its own, but is only
one contributor to the overall tolerance, other variables
include the capacitor tolerance and temperature.
There are a few ways of using the trimmer capacitor to adjust
the clock rate if the variance of your device is greater than
this, the easiest are :-
Both of these are constrained by the
accuracy of the test equipment being used.
For models with the Real Time Clock option, test
point TP1 on the PCB can
be used to measure the clock "tick" rate.
This photo is of the display on my 'scope when
measuring the frequency at TP1 for the first petSD+
that I built. As you can see, it is a nice, clean,
square wave, with a frequency of 1.000 Hz, i.e., 1
cycle/second as it should be. |
|
This photo is of the raw signal from the 32.768
kHz oscillator connected to the Real Time Clock chip
oscillator input on pins 1 & 2, the measured
frequency at this point was 32.72 Khz.
This
is quite a bit outside the stated tolerance of the
oscillator (20ppm) but takes no account of other
variables and is limited by the accuracy of the
'scope. |
|
Power Supply
and Voltage Regulator
The raw +5VDC power supply to the petSD+ PCB is fed to an
IRFD9024
power
MOSFET, used to provide reverse polarity protection for the
PCB.
In addition to the +5VDC supply, petSD+ requires +3.3VDC for
the SD
Card as specified by the SD Card standard. A
MCP1702-3302 voltage
regulator is used to generate the +3.3VDC supply used by the SD
Card slot and the
74LVC245A
voltage level shifter.
SD Card Slot
The card slot used in petSD+ is an
Attend 104H-TDA0-R, it is a surface mount component, but
with care, can be hand soldered onto the PCB, after
installation, it should have been tested as described in the
Assembly instructions.
During testing and normal operation, you will probably find
that SD card insertion and removal feels a little "rougher" than
with other SD card slots that you use, whilst this is unusual,
it appears to be the norm for this particular card slot. The
issue is present on the petSD+ prototypes that Nils has built
and the boards that I have assembled.
Nils has made this observation : "There's a little black
plastic finger on the left side that gives this first resistance
when inserting the card. Just out of curiosity, I broke that
finger away at one slot and looked what happened: it turned out,
this finger is used to hold the card and prevent them from just
pulling it out once it is inserted. I never experienced this on
any other SD slot I have anywhere, it really feels kind of
broken, but that's just the way this "special" slot is."
In the absence of a more technical description, I have found
that giving the card a little "wiggle" during insertion and
removal seems to make the process slightly easier.
SD Card Slot Pin-Out
|
SD
Card (SPI Bus Mode) |
|
Connection |
Pin |
Name |
Function |
SDCS |
1 |
CS |
SPI Card Sel |
MOSI |
2 |
DI |
SPI Data In |
|
3 |
VSS1 |
Ground |
|
4 |
VDD |
+3.3 VDC |
SCK |
5 |
CLK |
Serial Clock |
|
6 |
VSS2 |
Ground |
MISO |
7 |
DO |
SPI Data Out |
|
8 |
n.c. |
- |
|
9 |
n.c. |
- |
IC1 Pin 19 |
CD |
CD |
Card Detect |
IC1 Pin 20 |
WP |
WP |
Write Protect |
|
SC |
SC |
Signal Common |
LCD Module
petSD+ was designed to allow an (optional) 20 character x 4
line LCD display to be mounted above the PCB. The LCD driver
code in the NODISKEMU firmware is
programmed to drive displays fitted with an
Hitachi HD44780, or compatible, LCD controller in 4-bit
mode.
HD44780 LCD Module
(or Compatible) |
Pin |
Symbol |
Connected To |
P5
Pin |
Function |
1 |
Vss |
Power Supply |
1 |
Signal Ground for LCM (Ground) |
2 |
Vdd |
Power Supply |
2 |
Power Supply for LCM (+5VDC) |
3 |
Vo |
Power Supply |
3 |
Contrast Adjustment |
4 |
RS |
MCU |
4 |
Register select signal |
5 |
R/W |
MCU |
(1) |
Read/Write select signal (Forced Low) |
6 |
E |
MCU |
6 |
Operation (data read/write) enable signal |
7 |
DB0 |
n.c. |
n.c. |
Not used in 4 bit operation |
8 |
DB1 |
n.c. |
n.c. |
Not used in 4 bit operation |
9 |
DB3 |
n.c. |
n.c. |
Not used in 4 bit operation |
10 |
DB3 |
n.c. |
n.c. |
Not used in 4 bit operation |
11 |
DB4 |
MCU |
5 |
Data transfer from MCU to LCM |
12 |
DB5 |
MCU |
8 |
Data transfer from MCU to LCM |
13 |
DB6 |
MCU |
7 |
Data transfer from MCU to LCM |
14 |
DB7 |
MCU |
10 |
Data transfer from MCU to LCM |
15 |
A |
Power Supply |
9 |
Backlight Power |
16 |
K |
Power Supply |
n.c. |
To Ground via current limiting resistor, R2 |
A wide variety of compatible displays are available, with
some slight variations between them; apart from obvious
differences such as colour, the displays have a pretty much
standard design. The most important difference relevant to petSD+
is the voltage used for the LCD backlight. In some displays, a
+5V backlight supply is fine, in others, +5V will damage the
display. Resistor R2 in the petSD+ design is provided to drop
the +5V supply used for the backlight down to the appropriate
voltage for a particular display. To allow the LCD to be
replaced with a different model, the preferred location for
mounting R2 is on the LCD itself.
In order to select the appropriate resistance and power
rating values for R2, we need to know the backlight supply
voltage and operating current for the LCD module being used. If,
for example, the supply voltage is 5V, the LCD backlight voltage is specified as 4.2V and
the operating current is 260mA
Given the relationships : |
|
and |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Making a 3R, 1/4 W resistor suitable
for this display |
The contrast for the display is controlled by pot VR1, but
the fixed value of R2 sets the LCD to a fixed brightness level.
To some extent, the "ideal" brightness, and hence the choice of
resistor R2, is subjective. The fixed value supplied in my kits
or fitted to pre-assembled units, should give an acceptable
level of brightness for the majority of users, however, being
located on the top of the LCD, the resistor can easily be
replaced with a different value by the end user - subject to the
electrical specification of the display being respected.
User Controls
This simplified extract from the petSD+ schematic shows how
the User Controls are connected to the MCU.
All versions of petSD+ have a RESET push-button (S1) located
at the rear of the unit, close to the power connector. (Although
not shown here, the RESET button is also connected to the ISP
connector header pins.)
Internal models also have two bit-switches (SW2-1 & SW2-2)
installed, located at the front of the unit, close to the SD
Card slot. These are used to set the Device Address, the default
position, with both switches OFF, sets Device Address 8.
External models are intended to be fitted with the LCD screen
and three additional push-buttons, Previous (S2),
Next (S3) and
Select (S4), located at the front left hand side of the unit,
along with a potentiometer to adjust the display contrast.
Operation
of these controls is described on the
User Guide page.
The ATMega1284P has 4 x 8 channel I/O ports, giving a total
of 32 programmable I/O lines available to implement all of the
features in petSD+. A quick count of the I/O requirements for
petSD+ might suggest that the MCU did not have enough I/O
channels to do the job :
Function |
Description |
Bits/Channels |
IEEE-488 data bus |
8-bit parallel port |
8 |
IEEE-488 control signals |
NRFD, NDAC, DAV, EOI, IFC, ATN,
TE |
7 |
LCD data bus |
4-bit data mode |
4 |
LCD control bits |
Enable, Register Select |
2 |
SPI
bus signals for CD slot and ISP port |
MISO, MOSI, SCK |
3 |
I2C
bus signals data for RTC |
Serial Clock (SCL) and Data
(SDA) |
2 |
CD Slot status bits |
Card Detect, Write Protect |
2 |
CD Slot control bit |
SD Card Select |
1 |
LED outputs |
1 x Red, 1 x Green LED |
2 |
Push-buttons |
Reset,
Prev[ious], Next,
Select, address select bits1 |
4 |
Total I/O required |
|
36 ! |
However, Nils has used a neat trick to read the status of the
option buttons, this is made possible by the flexibility of the
MCU's I/O ports. As well as being configurable as bidirectional
digital I//O ports, each of the 4 ports also has an alternate
capability :
MCU
Port |
Alternate Function |
A |
8-Channel, 10-bit Analogue to Digital Converters, Pin change interrupts |
B |
SPI Bus, AI comparator, Timer/Counter inputs, Pin
change interrupts |
C |
JTAG signals, Timer/Oscillator, I2C
signals, Pin change interrupts |
D |
Timer/Counter outputs, Pin change interrupts |
(For details, see
the
ATMega1284P Datasheet) |
Nils has used one of the ADC channels on Port A to read the
status of the control switches as analogue values. A 10-bit ADC
has a count range from 0-1023, using the resistor network shown
in the schematic, the calculated voltages and corresponding ADC
values for all of the key combinations are shown in the table :
Prev |
Next |
Select |
Voltage |
ADC |
Address1 |
0 |
0 |
0 |
2.79 |
570 |
8 |
0 |
0 |
1 |
3.79 |
775 |
9 |
0 |
1 |
0 |
3.18 |
650 |
10 |
0 |
1 |
1 |
4.55 |
931 |
11 |
1 |
0 |
0 |
2.96 |
605 |
n/a |
1 |
0 |
1 |
4.10 |
839 |
n/a |
1 |
1 |
0 |
3.40 |
695 |
n/a |
1 |
1 |
1 |
5.00 |
1023 |
n/a |
1
The schematic also shows the optional bit switches
used to set the device address for internal versions
of petSD+, these switches are wired in parallel with
the Next and
Select push-button pads on the PCB.
Later versions of the petSD+ firmware include diagnostics to
check the operation of the push-buttons as described on the
User Guide page.
Connectors
petSD+ does not connect directly to
a PET computer, the "standard" build of petSD+ is fitted with an
IEEE-488 connector like those found on PET disk drives. Most PET
and CBM computers use a cheap PCB edge connector to provide
IEEE-488 connectivity, to connect petSD+ or a Commodore disk
drive, you need to use a Commodore IEEE-488 disk drive cable
(hard to find) or a
PET to IEEE-488 adapter along with a standard IEEE-488
cable.
to be continued . . . . .
Board Revisions
Version |
PCB
Label |
Details |
1.1a |
1.1 |
Missing label for R10 added (no
change to PCB label) |
1.1 |
1.1 |
ISP MISO Issue fixed, resistor
R10 added (missing label) |
1.0 |
(none) |
First production board,
required fix for ISP MISO line |
|
|
|
|
|
|
|