C64 SPS: Unterschied zwischen den Versionen
Tw (Diskussion | Beiträge) |
Tw (Diskussion | Beiträge) |
||
| Zeile 61: | Zeile 61: | ||
Der C64 sendet ein Byte: | |||
* der C64 liest das Control Register ($DE00), wenn Bit 6 gesetzt ist (1), muss das C64 Programm warten ... | * der C64 liest das Control Register ($DE00), wenn Bit 6 gesetzt ist (1), muss das C64 Programm warten ... | ||
| Zeile 67: | Zeile 67: | ||
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 Control Register ($DE00), wenn Bit 7 gesetzt ist, dann steht ein Byte zur Abholung bereit ... | ||
Version vom 17. Januar 2022, 00:16 Uhr


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.
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).
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 Arduino / CPLD
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)
News
- 14.12.2021 -- erste Prototyp Platine bestellt --
Downloads
Links