C64 SPS: Unterschied zwischen den Versionen

Aus
Zur Navigation springen Zur Suche springen
Tw (Diskussion | Beiträge)
Tw (Diskussion | Beiträge)
Zeile 96: Zeile 96:
==== Funktion des CPLD ====
==== Funktion des CPLD ====


Die Kommunikation zwischen C64 und Arduino wird vom CPLD unterstützt durch zwei Buffer und zwei 'Byte ready' Flags. Es gibt einen Empfangs Buffer (ein Byte) und einen Sende Buffer (ein Byte). Die beiden Flags (Arduino Byte ready und C64 Byte ready) signalisieren, ob die Buffer voll sind (1) oder leer (0).  
Die Kommunikation zwischen C64 und Arduino wird vom CPLD unterstützt durch zwei Buffer und zwei 'Byte ready' Flags. Es gibt einen C64 Empfangs Buffer (ein Byte) und einen C64 Sende Buffer (ein Byte). Die beiden Flags (Arduino Byte ready und C64 Byte ready) signalisieren, ob die Buffer voll sind (1) oder leer (0).  




Zeile 109: Zeile 109:
* das Flag wird gesetzt (auf 1), sobald der Arduino signalisiert, dass er das Byte geschrieben hat (Dir=0, /ACC kurz auf low)
* das Flag wird gesetzt (auf 1), sobald der Arduino signalisiert, dass er das Byte geschrieben hat (Dir=0, /ACC kurz auf low)
* das Flag wird automatisch zurück gesetzt (auf 0), sobald der C64 ein Byte aus dem Datenregister liest
* das Flag wird automatisch zurück gesetzt (auf 0), sobald der C64 ein Byte aus dem Datenregister liest
Der C64 Empfangs Buffer:
* der Empfangs Buffer wird vom C64 gelesen indem der C64 das Daten Register liest
* der Empfangs Buffer wird vom Arduino beschrieben über die Signal Leitungen (Dir=0, Daten Bits D0 bis D7 anlegen, /ACC kurz auf low)
Der C64 Sende Buffer:
* der Sende Buffer wird vom C64 beschrieben indem der C64 das Daten Register schreibt
* der Sende Buffer wird vom Arduino gelesen über die Signal Leitungen (Dir=1, Daten Bits D0 bis D7 lesen, /ACC kurz auf low)


<br />
<br />

Version vom 17. Januar 2022, 00:30 Uhr

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.


Der C64 sendet ein Byte:

  • der C64 liest das Control Register ($DE00), wenn Bit 6 gesetzt ist (1), muss das C64 Programm warten ...
  • wenn Bit 6 nicht gesetzt ist (0), dann kann der C64 ein Daten Byte in das Daten Register ($DE01) schreiben


Der C64 empfängt ein Byte:

  • 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 automatisch zurück gesetzt wird


Kommunikation des Arduino

Die Kommunikation zwischen Arduino und CPLD erfolgt über 11 Signal Leitungen:

  • Signal D0 bis D7: acht Daten Bits (ein Byte)
  • Signal 'Dir': über diese Leitung signalisiert der Arduino die Daten Richtung (1=lesen, 0=schreiben)
  • Signal 'Acc': über diese Leitung signalisiert der Arduino dass Daten gelesen oder geschrieben worden sind (je nach 'Dir' Signal)
  • Signal 'Byte ready': diese Leitung signalisiert dem Arduino den Status (1=Buffer voll) des Sende- Und Empfangs Buffer (je nach 'Dir' Signal)


Arduino empfängt ein Byte:

  • 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 (1 --> 0 --> 1)


Arduino sendet ein Byte:

  • 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' (1 --> 0 --> 1)


Funktion des CPLD

Die Kommunikation zwischen C64 und Arduino wird vom CPLD unterstützt durch zwei Buffer und zwei 'Byte ready' Flags. Es gibt einen C64 Empfangs Buffer (ein Byte) und einen C64 Sende Buffer (ein Byte). Die beiden Flags (Arduino Byte ready und C64 Byte ready) signalisieren, ob die Buffer voll sind (1) oder leer (0).


Das Flag 'Arduino Byte ready':

  • das Flag wird automatisch gesetzt (auf 1), sobald der C64 ein Byte in das Datenregister schreibt
  • das Flag wird gelöscht, sobald der Arduino signalisiert, dass er das Byte gelesen hat (Dir=1, /ACC kurz auf low)


Das Flag 'C64 Byte ready':

  • das Flag wird gesetzt (auf 1), sobald der Arduino signalisiert, dass er das Byte geschrieben hat (Dir=0, /ACC kurz auf low)
  • das Flag wird automatisch zurück gesetzt (auf 0), sobald der C64 ein Byte aus dem Datenregister liest


Der C64 Empfangs Buffer:

  • der Empfangs Buffer wird vom C64 gelesen indem der C64 das Daten Register liest
  • der Empfangs Buffer wird vom Arduino beschrieben über die Signal Leitungen (Dir=0, Daten Bits D0 bis D7 anlegen, /ACC kurz auf low)


Der C64 Sende Buffer:

  • der Sende Buffer wird vom C64 beschrieben indem der C64 das Daten Register schreibt
  • der Sende Buffer wird vom Arduino gelesen über die Signal Leitungen (Dir=1, Daten Bits D0 bis D7 lesen, /ACC kurz auf low)


News

  • 14.12.2021 -- erste Prototyp Platine bestellt --


Downloads