C64 SPS

Aus
Zur Navigation springen Zur Suche springen
C64-SPS
C64-SPS
C64-SPS


Das C64 SPS Modul

Das C65 SPS Modul ist eine Platine für den Commodore C64, mit der man den C64 in eine SPS verwandelt. Eine SPS (Speicher programmierbare Steuerung) dient dazu, eine Anlage zu steuern, zum Beispiel eine Modell Eisenbahn.

Das Modul stellt digitale Ausgänge und digitale Eingänge zur Verfügung. Der C64 kann per Software die digitalen Ausgänge steuern (TTL Pegel, 5V) sowie die digitalen Eingänge (TTL Pegel, 5V) abfragen. Um die Programmierung des C64 zu vereinfachen, implementiert das Modul zusätzliche BASIC Befehle. So kann man einfach über ein einfaches BASIC Programm die Kontrolle über eine elektrische Anlage übernehmen.


Auf dem Board befindet sich:

  • ein EEPROM Speicher mit 64KB (W27C512)
  • ein CPLD ATF-1504
  • ein Arduino Nano


Was kann man mit dem Board tun:

  • automatischer Start eines BASIC Programm nach dem Einschalten (BASIC im EPROM)
  • zusätzliche Befehle im v2 BASIC um digitale Ausgänge zu setzen und digitale Eingänge abzufragen
  • I2C Interface um dezentrale IO Boards zu steuern (MCP 23017)
  • SPI-Out Interface um DO Boards zu steuern (74HC595)
  • SPI-In Interface um DI Boards zu steuern (74HC165)


Schematic, Layout, Prototyp:


Dezentrale IO Boards


Inhalt des FLASH Speicher zusammenstellen

Der Inhalt des EPROM ist die Befehlserweiterung und das Benutzer BASIC Programm (Image Datei). Mit Hilfe eines Windows Tool kann man diese Image Datei selbst erstellen.


Funktionsweise und Technik


C64 Register

Der C64 kommuniziert mit dem Modul über zwei Register. Über das Daten Register ($DE01) werden Daten byteweise gesendet und empfangen. Das Control Register ($DE00) reguliert den Datenfluss über zwei Bits.

Das Control Register an der Adresse $DE00 kann nur gelesen werden und es sind nur zwei Bits relevant. Das Bit 7 (Arduino Byte ready) zeigt, dass ein Byte zur Verfügung steht und über das Daten Register gelesen werden kann. Das Bit 6 (C64 Byte ready) zeigt, ob der Sende Buffer befüllt ist oder leer. Wenn der Sende Buffer leer ist, kann der C64 ein Byte in das Daten Register schreiben.


Kommunikation Arduino / CPLD

Ein Byte senden an den Arduino:

  • der C64 liest das Control Register ($DE00), wenn Bit 6 gesetzt ist, muss das C64 Programm warten ...
  • Daten Byte in das Daten Register ($DE01) schreiben
  • der Schreibvorgang setzt automatisch das Bit 6 (Arduino Byte Ready) im Control Register
  • der Arduino schaltet das 'Dir' Signal auf lesen (1) und prüft das 'Byte-Ready' Signal
  • wenn das Signal 'Byte ready' auf 1 ist, dann holt der Arduino Daten Byte ab
  • der Arduino sendet das 'Acc' Signal über den zugehhörigen Pin, wodurch das Bit 6 (Arduino Byte Ready) im Control Register zurück gesetzt wird


Ein Byte empfangen vom Arduino:

  • der Arduino schaltet das 'Dir' Signal auf schreiben (0) und prüft das 'Byte-Ready' Signal
  • wenn das Signal 'Byte ready' auf 0 ist, dann scheibt der Arduino das Byte und setzt das Signal 'Acc' auf 1
  • das 'Acc' Signal setzt das Bit 6 (C64 Byte Ready) im Control Register
  • der C64 liest das Control Register ($DE00), wenn Bit 7 gesetzt ist, dann steht ein Byte zur Abholung bereit ...
  • ... der C64 liest das Byte aus dem Daten Register, wodurch das Bit 7 im Control Register zurück gesetzt wird


News

  • 14.12.2021 -- erste Prototyp Platine bestellt --


Downloads