djtulan Hackerspace, Retrocomputing

Commodore 64 Netzteil Mod

undefined

Das alte Commodore 64 Netzteil - oft auch als Türkeil oder Elefantenfuß bezeichnet - ist für seine Ausfälle bekannt. Es passiert nicht selten, dass dabei ein C64 wegen Überspannung gegrillt wird. Die Ursache liegt meist an dem verwendeten 7805 Linearregler, dessen Lebenserwartung nach über 30 Jahren einfach überschritten wurde. Manchmal ist aber auch eine der Gleichrichterdioden am Ausfall des Netzteils schuld. Auch die Anhebung der Netzspannung Ende der 1980er / Anfang 1990er Jahre auf 230V~ statt der vorher üblichen 220V~ ist wohl mitschuld am Sterben der Netzteile. In diesem Beitrag soll erklärt werden, wie man den 7805 Linearregler durch einen DC-DC Wandler ersetzt.

undefined

Es gibt verschiedene Bauweisen des Türkeils. Bisher habe ich eine Schaltung wie die oben abgebildete gesehen, aber auch eine Variante ohne den Spannungsteiler RK1 / RK2. Bei der Variante mit Spannungsteiler werden etwas mehr als 5V (ca. 5,2V) erzeugt, weil der Ausgang des Linearreglers nur die Spannung an RK1 misst. Außerdem gibt es Varianten mit vier einzelnen Dioden als Gleichrichter oder als Gleichrichter selbst. Die Analyse der Schaltung ist aber relativ einfach durchzuführen.

Um nun an die Elektronik des Netzteils zu gelangen, muss man vorsichtig versuchen mit Cuttermesser und Schraubenzieher den Bodendeckel abzubekommen. Im Inneren befindet sich ein Steg, der den Deckel noch zusätzlich befestigt. Dieser hält meistens Bombenfest. Achtung, bitte passt auf eure Hände auf! Verletzungsgefahr!!!

Das Ergebnis schaut das in etwa so aus:

undefined

Im Inneren sieht man den Anschluss der Primärseite des Trafos, geschützt durch eine T160mA Sicherung. Die Anschlüsse für die 9V~ auf der 1. Sekundärseite, führen gleich weiter zum Netzstecker des C64. Die Anschlüsse der 2. Sekundärseite laufen zur Platine auf der sich die Gleichspannungsregelung befindet. Der Linearregler befindet sich in der Vergussmasse, nur mehr die drei Anschlüsse sind mit der Platine verbunden. 

undefined

Zum Entfernen der Platine, lötet man die zwei Verbindungen vom Trafo und die zwei zum Netzanschluss des C64 einfach mal ab. Danach knipst man die Beinchen des 7805 ab, dieser wird nicht mehr benötigt, da er ja ersetzt werden soll.

undefined

Auf dieser Platine befindet sich ein großer Elko zum Glätten und ein Gleichrichter (oder 4 Dioden) zum Gleichgerichteten der Wechselspannung. Nun erfolgt die Vorbereitung zum Einbau des DC-DC Wandlers. Ich habe für meinen Umbau einen Mini MP1584EN DC-DC BUCK Adjustable Step Down Module um rund 1 US$ auf ebay.com bestellt. Die Ausgangsspannung lässt sich über ein Potentiometer einstellen.

undefined

Das Potentiometer habe ich durch einen passenden Widerstand von etwa 42 kOhm ersetzt, weil das es bei schlechtem Kontakt sonst wieder zu gefährlicher Überspannung kommen könnte.

undefined

Auch die Verbindungsdrähte habe ich an den DC-DC Wandler gelötet, damit man das Ding dann an die Netzteilplatine anschließen kann. Die Schaltung sieht in etwas so aus:

undefined

Dem 7805 wurde ja, wie oben beschrieben, die Beine abgezwickt. Dafür nimmt nun der DC-DC Wandler seinen Platz ein. Zu guter Letzt habe ich den Wandler in einen großen Schrumpfschlauch verpackt und mit einem Kabelbinder auf den Elko geschnallt. Nach dem Einbau sollte man noch die Spannung überprüfen, um zu kontrollieren ob alles richtig arbeitet und die 5 - 5,1V am Netzstecker des C64 anliegen. Wenn das passt kann man den C64 damit in Betrieb nehmen.

Aquarium Computer - Teil 4 - Die Real Time Clock

Einer der wichtigsten Bestandteile eines Aquarium Computers ist eine Uhr. Diese wird benötigt um beispielsweise die Beleuchtung ein- bzw. auszuschalten.  Da der verwendete uController, der Arduino Nano, selber keine Real Time Clock besitzt, muss man diese erweitern. Das "Tiny RTC I2C module" eignet sich für diese Zwecke sehr gut.

undefined

 

Auf dem Modul befinden sich 2 Chips, ein DS1307 (Real Time Clock von Dallas) und zusätzlich ein HK24C32 (EEPROM mit 32 kByte).

Weiters ist auch der Quarz für die Uhr verbaut.

Die restlichen SMD Bauteile sind passive Bauteile wie Widerstände, Dioden und Kondensatoren. 

 

undefined

 

Auf der Rückseite befindet sich eine Batteriehalterung, der für eine Akku Zelle vom Typ LIR2032 (wiederaufladbar!!!) vorgesehen ist. Wenn man darin eine Standard CR2032 Lithium Zellen verwenden würde, könnte diese durch die Ladeschaltung explodieren.

 

 

 

Um dennoch eine gewöhnliche Batterie verwenden zu können, ist lediglich eine kleine Modifikation notwendig. R5, D1 R4 und R6 müssen entfernt werden. Statt dem Widerstand R6 wird eine Lötbrücke gemacht.

 

 undefined

Außerdem sollte man den Quarz mit etwas Zinn auf der Massefläche, auf der er aufliegt, festlöten, so schreibt es das Datenblatt vor. Zur Verwendung mit dem Arduino Nano, muss das Modul mit 4 Leitungen verbunden werden, wenn man eine fertige Bibliothek verwenden möchte.

RTC Module Arduino
VCC 5V
GND GND
SDA A4
SCL A5

Ich habe die von playground.arduino.cc vorgeschlagenen Bibliotheken Time und DS1307RTC verwendet. Die Einbindung ging super einfach.

#include <Time.h> // includes for time
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

// MACRO TO GET COMPILE TIME IN SECONDS
#define t(index, multiplier)  ((__TIME__[index]-'0') * (multiplier))
// use hours, minutes and seconds
#define hhmmss() (t(0,36000) + t(1,3600) + t(3,600) + t(4,60) + t(6,10) + t(7,1))

void setup() {
  // is the RTC running?
  if (RTC.get() == 0) {
    // set the RTC to the time this example was compiled
    RTC.set(hhmmss());
  }

  setSyncProvider(RTC.get); // the function to get the time from the RTC
}

Das RTC Objekt wird bekommt man bereits durch die Lib DS1307RTC, man braucht es nur noch verwenden. Diese Bespiel setzt die Uhr auf die Uhrzeit der Kompilierung, falls sie nicht laufen sollte.

Die aktuelle Uhrzeit kann man mit den Funktionen der Bibliothek Time dann ganz einfach auslesen.

  char buffer[32];
  snprintf(buffer, 30, "%.2d:%.2d:%.2d", hour(), minute(), second());
  print(buffer);

Viel Spaß beim Ausprobieren!

Aquarium Computer - Teil 3 - Der Temperatursensor

Nun beginnt das große Zusammenfügen der einzelnen Module.
Einer der ersten Versuche war die Einbindung des Dallas Temperatur Sensors DS18B20. Die Hardware dafür ist recht simpel. Alles was man dazu benötigt sind der Sensor selbst und ein 4,7kΩ Widerstand. Die Schaltung habe ich ja bereits bei meinem letzten Post angehängt.

undefined

Die Ansteuerung des Sensors wird über das sogenannte "One-Wire-Protocol" realisiert. Das heißt so, weil nur eine Datenleitung (1-Wire BUS) zum Sensor verläuft. Zusätzlich benötigt der Sensor aber noch eine Versorgung (VDD) und eine Masse (GND). Die fertigen Kabel mit dem Sensor am Ende haben dafür 3 Adern ausgeführt, die meist folgende Farben haben:

     Spannungsversorgung (VDD)
     Masse (GND)
     1-Wire BUS

Masse wird mit GND des Arduino Boards verbunden. Die Spannungsversorgung (VDD) kommt an den 5V Pin des Arduinos. Die 1-Wire BUS Leitung wird mit einem Digital Pin des Arduinos und zusätzlich über den 4,7kΩ Widerstand (Pullup) mit 5V verbunden.

Thomas Wenzlaff hat in seinem Blog eine nette Anleitung dazu geschrieben.
Er verwendet dazu die Bibliotheken OneWire 2.2 und Dallas Temperature Control Library 3.7.2.
Die Bibliotheken kommen in das sketchbook/libraries Verzeichnis, das von der Arduino IDE bereitgestellt wird. Das eigentliche Programm fällt durch die Bibliotheken relativ klein aus. Ich habe das Beispielprogramm von Thomas Wenzlaff dazu etwas gekürzt, um es übersichtlicher zu halten.

// benötigte Bibliotheken importieren
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire onewire(2); // Digitalport Pin 2 als 1-Wire-BUS verwenden
DallasTemperature temp(&onewire); // "Dallas Temperature Library" instanzieren

void setup() {
  Serial.begin(9600);  // serielle Schnittstelle mit 9600 Baud starten
  temp.begin();        // "Dallas Temperature library" starten
}

void loop() {
  temp.requestTemperatures(); // Temperatur abfragen (blockiert etwa 800ms)

  Serial.print(temp.getTempCByIndex(0)); // gibt die Temperatur aus
  Serial.println(" Grad Celsius");       // gibt " Grad Celsius" aus
}

Wie man sieht gestaltet sich die Abfrage des Sensors recht einfach. Später soll natürlich die Temperatur nicht über die serielle Schnittstelle ausgegeben werden, sondern wird auf dem kleinen Display angezeigt.

Viel Spaß beim Ausprobieren!

 

Nachtrag 10. Februar 2016:

Die Schaltung dazu in KiCad gezeichnet.

undefined

Neuere Posts → Home ← Ältere Posts