/imac_g3_ivad_board_init

iMac G3 IVAD board initialization with an arduino

Primary LanguageHTMLGNU Lesser General Public License v3.0LGPL-3.0

Add custom boards to an iMac G3 DV(slot loader) in order to use it as a monitor without having to destroy it.

See the wiki for an explantion of how this was done.

Wiki explaining how this was done.

If you have a dead logic board but a functioning CRT then these boards can let you use your iMac G3 DV as a VGA monitor so that you can use a modern desktop with it. You can even hand wire the whole thing without the need for the boards if you so wish.

Even if you have a perfectly functional iMac G3 DV you can remove your logic board and use these boards to convert your iMac G3 DV into a VGA monitor without harming your iMac G3 and when you want your iMac back, you can remove the custom boards and plug your original logic board back in and still use your iMac G3 as an original apple product. These boards are designed to plug right in without having to modify the case and attached things.

However....

--->DO THIS AT YOUR OWN RISK<--- as thing may break as you dissasemble your iMac and you can get shocked.

Although low risk, things can always go wrong, so be careful.

  • The inner bezel is extremely fragile and routintely breaks.
  • The CRT can hold a charge and shock you even if the iMac is not plugged in.
  • Static discharge from your hands can destroy electronics so "GROUND THYSELF"

I've documented much of the iMac G3 slot loader chasis connector pinouts on this repo and used it as a guide to make breakout circuit boards than can plug right into the chassis connectors and provide standard connections so that a regular computer can use things like the CRT,speakers, power button, audio jacks, the down-converter board ect..

It wasn't easy but luckily a lot of people have shared their findings online..

There is working code here for both the arduino and raspberry pi to initialize the IVAD board so that you can use it as a monitor.

The current initialization sketch waits for button presses on an arduino pin to send the initialization sequence to the IVAD board but you can just uncomment "initIvadBoard();" in "setup()" to send it as soon as it's powered.


Also, you might have to modify values in the init sequence to get the brightness, contrast and screen geometry just right for your setup. below is an example from the init sketch.

  writeToIvad( 0x46, 0x04, 0x80);//red x-30
  writeToIvad( 0x46, 0x05, 0xB0);// green x
  writeToIvad( 0x46, 0x06, 0x78); //blue x-38

  writeToIvad( 0x46, 0x07, 0xB1); //horizontal position
  writeToIvad( 0x46, 0x08, 0xF8); //vertical size

Success Stories

Goals

The main goal is to convert the iMac G3 into a VGA monitor whithout sacrificing the original CRT and using as much of the iMac as possible. The difficult part is tricking the IVAD board into thinking it is still connected to a G3 logic board. the idea is to capture the init sequence and reimplement it using a microcontoller like an arduino.

Once achieved, one can connect a standard computer to it as if it were a regular monitor with speakers. One can even include a motherboard on the inside of the G3 basically converting it into a modern computer.

Here are the goals

  • Capture IVAD board initialization sequence from the Imac logic board to the IVAD board and implement with mcu & rpi.
  • Document how to control brightness, contrast, screen goemetry ect via the i2c lines.
  • Document as much of the pinouts as possible on the the chassis connectors .
  • Design circuit boards that will plug into the connectors and allow one to use the on/off button, speakers, power LED, mic ect..
  • Design the circuit boards with through hole components so that anyone can build these with just a soldering iron and solder.
  • Use the original down-converter board(kind of like a power supply) to power things like an amplifier and a slot loading DVD drive.

Chassis Connectors and Pinouts

ChassisConnectors

Removing the logic board

The connector drawings in the above diagram represent the cables coming from the CRT analog board that plug into the logic board. To expose these, the logic board must be removed.

Wiring VGA cable

VGACable

Making the cable

This is perhaps the most time consuming part of the whole process because not all VGA cables are made the same so the colors for the cable I used may not be the colors used in your cable. Here are the steps I took.

  • Find a VGA cable to cut.
  • Cut the cable so that you have at least one of the ferrite chokes left on the cable.
  • Cut away the cable jacket such that the wires are at a comfortable handling length. 3 to 4 inches
  • Strip each wire and ring them out to find what color corresponds to each pin on the DE15 connector.
  • Use the diagram above and map your cable to J20 using the DE15 pin numbers as the key.
  • Option 1 ,use a 20 pin header and solder the DE15 wires to it then plug it into J20.
  • Option 2, cut the required wires from J20 and splice them with VGA cable. Solder and use shrink tubing if you can but twisting them and electrical tape works as well. Make sure to leave enough wire on J20 in the event you need to reattach the wires.

Preparing the Raspberry Pi

WiringRPI

What to install

  • Install the latest raspian image using a regular monitor.
  • Connect to your network and get the ip address for the pi by opening a terminal and issuing the following.
ifconfig

If you connected using wifi then the ip address is under wlan0: , inet.
If you connected using a cable the the ip adress is under eth0: inet

  • Enable ssh , you'll need this to login from another computer when you don't have a display.
  • Enable I2C.
  • Install i2c-tools & git.
  • ssh to the pi from a terminal if your on a Mac or linux. If you're on Windows use putty to ssh to the pi I'm assuming the username is "pi" but replace this with the the username you've created for the pi.
sudo apt-get update && sudo apt-get -y install i2c-tools git
  • Clone the iMac IVAD init repo
git clone https://github.com/qbancoffee/imac_g3_ivad_board_init.git
cd imac_g3_ivad_board_init
  • Copy init_ivad.py to /usr/local/bin & and make it executeable
sudo cp init_ivad.py /usr/local/bin
sudo chmod +x /usr/local/bin/init_ivad.py
  • Edit rc.local and add the script. Make sure it's added to the line before "exit 0 " or it will not run. It also needs to be made executable since by default it doesn't do anything.
sudo nano /etc/rc.local
  • It should look something like this
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

/usr/local/bin/init_ivad.py

exit 0

  • Ctrl-x to save and exit

  • Make rc.local executable

sudo chmod +x /etc/rc.local

Configure Resolution and Refresh Rate

-Edit config.txt

sudo nano /boot/config.txt

-Add the following to the bottom of the file and save

#iMac G3 settings
hdmi_group=2
hdmi_mode=18

Wiring The Raspberry Pi and testing the connection

In all cases, the IVAD board needs to be initialized when the power analog board is turned on for the first time. To do this, the initialization sequence must be sent using the I2C lines(SDA & SCL) on the Raspberry Pi's GPIO header. Connect the I2C lines according to the diagram above and connect the VGA cable to the HDMI port using a HDMI to VGA converter.

  • Use i2cdetect to probe the IVAD board. Make sure the iMac is plugged in, it does not have to be turned on for this.
i2cdetect -y 1
  • Confirm it found address's 46 and 53, if no luck, check the wiring and make sure I2C is enabled. The output should look something like the following.
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- 46 -- -- -- -- -- -- -- -- -- 
50: -- -- -- 53 -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --
  • Turn on the monitor and run the initialization script.The iMac should make a nice old school "CRT IS ON" sound.
/usr/local/bin/init_ivad.py

If there are errors, make sure the iMac is plugged in and check the wiring.
If there are no errors and there is nothing on the screen, move the mouse or press a key. The raspberry pi might have turned off the display due to inactivity.

  • With the IVAD initialized, Reboot the Raspberry Pi.

Wiring Arduino Uno

WiringArduinoUno

Wiring Arduino Nano

WiringArduinoNano

Loading and Running the initialization sketch

write here

Wiring Arduino Uno to transmit EDID

WiringArduinoUnoToXmitEdid

Wiring Arduino Nano to transmit EDID

WiringArduinoNanotoXmitEdid

Powering the down converter board PAV

WiringPAV

The CRT analog board provides 24v AC to the PAV or down converter board through the logic board via the J22 connector. you can directly connect the PAV board and the analog board through the J22 connector and the PAV board will produce the typical mother board volytages. +12v, +5v +3.3v ect...

Powering the CRT on and off

CRTOnAndOff

See Also

Boards

J20 Board

What it does.

  • detects button presses
  • sends the init sequence to the IVAD boar
  • sends the "turn-on" signal to the down-converter board
  • has a control line "PROT" that when 5 volts are applied turns everythin off. A shut-off signal can be sent here.
  • powers the green LED
  • sends EDID information via VGA cable so that a connected computer knows how to configure the monitor for use.

This board works but as of March 23 2020 it needs a slight modification to make it more robust.

Rendition

J20

Board installed

J20Installed

Rendiiton of Rev 2 of the J20 board.

J20REV2

J22 Board

What it does.

  • provides access to the microphone and the speakers
  • provides access to the power button
  • provides access to the green LED
  • provides access to the amber LED
  • provides access to the headphone jacks
  • routes 24 VAC from the analog(CRT) board to the the down converter break out board.

This board has been tested and mostly worked. I found that the mic was miswired but I've since fixed that. J22 J22Installed

Down-converter breakout board

What it does

  • provides a 24 VAC input from the J22 board into the down-converter board
  • provides a "turn-on" input for the J20 board, this is DCO, which stands for Down Converter On
  • provides 3.3 VDC out from the down-converter board that turns on and off with the CRT.
  • provides 5 VDC out from the down-converter board that turns on and off with the CRT.
  • provides 12 VDC out from the down-converter board that turns on and off with the CRT.
  • provides a constant 8 VDC standby voltage when all is off and 12 VDC when all is on.
  • provided a constant 15 VDC standby voltage when all is off and 24 VDC when all is on.

The down-conveter uses the 24 VAC coming from J22 in order to power the original logic board and drives. Some people have called this the iMac G3 power supply. This is what it looks like.

DCB

Rendition

DCB1

Actual Board

DCB2

Board installed

DCB3


Ordering Boards

All PCB manufacturers should accept gerber files to manufacture boards so I've decided to design these in KiCAD which is suite of open source EDA programs to create schematics and design PCBs. There are no limitations to the size of the board and you don't have to order from a specific vendor.

Recently I've been using https://jlcpcb.com/ and the turn arounds are fast for the price. In the "schematics_and_pcbs" folder are the three kicad projects for each board, each in its own folder. I've included the gerber files and zipped them up for convenience, they are in the gerber directory for each project. To order you can just upload the zip file to https://jlcpcb.com/ or whatever company you choose and you should get them in the mail. There is a bill of materials included in each project folder. It's a csv file that includes the reference number, the part number and vendor so you can order the componets to build the boards. I like to buy from digikey but obviously you can find a vendor that fits your needs.

Acknowledgements

Videos