Forum: Mikrocontroller und Digitale Elektronik Parallel to SPI Interface-Chip?


von holm (Gast)


Lesenswert?

Ich bastele an einem Z280 ECB Bus System mit CP/M herum und ich tue das 
weil es mir Spaß macht. Ich hoffe damit erklärt zu haben warum ich nicht 
einfach $xyz nehme statt mit so einem veralteten Prozessor...

Ich verwende sonst auch aktuelle Prozessoren..ist hier aber nicht das 
Thema.

Ich möchte an den Z280 ein Ethernet Interface anhängen, gerne einen 
WIZnet5500 beispielsweise und ich könnte dafür gut ein Master-SPI 
Interface
am Z280 gebrauchen.

Gibt es einen Chip von der Stange der an einer Seite ein paar 
Busregister und auf der anderen Seite ein SPI Interface hat?

Ich weiß, das ich einfach einen Atmel (oder was auch immer) 
programmieren kann und den verwenden, will ich aber so nicht. Ich weiß 
auch das ich mir mit VHDL ein paar Zeilen zusammenschreiben und ein CPLD 
dafür benutzen kann..kann ich aber (derzeit) nicht.

Also nochmal, Ist Jemandem ein existierende fertiger Chip bekannt?

Gruß,
Holm

von Harald (Gast)


Lesenswert?

Bevor Du jetzt irgendeinen Vintage Chip von der Resterampe findest wäre 
doch ein programmierter ATMEGA328 o.ä. nicht so schlecht. Den gibt es 
stilecht in DIP, funktioniert mit 5V und geht auch ohne externen Quarz. 
Vielleicht kann man sogar einen alten Chip nachbilden?

von Harald (Gast)


Lesenswert?

Ich hätte zu Ende lesen sollen, ja, das hast du explizit ausgeschlossen, 
also sorry für den Beitrag.

von pegel (Gast)


Lesenswert?

Kann man machen.
Man könnte aber auch einen LAN Chip mit 8bit Interface nehmen, oder?

https://wiznet.tistory.com/entry/Ethernet-Interfaces

Aber sich suche trotzdem noch weiter.

von Martin (Gast)


Lesenswert?

der TP3465 von National bzw. TI könnte brauchbar sein:


https://www.mouser.com/datasheet/2/405/tp3465-449702.pdf

Der Z80 wird zwar nicht aufgeführt, sollte sich aber über ein paar 
Logik-Gatter anbinden lassen.

von Mikki M. (mmerten)


Lesenswert?

Warum nicht WIZNET W5300 der hat gleich ein Paralell-Interface ?

von pumuggl (Gast)


Lesenswert?

Stilechter waere ein 8392A oder 83C92A.

von pegel (Gast)


Lesenswert?

Ich finde es leider nicht mehr, kann mich aber erinnern, als ich auf der 
suche nach der ganzen 82xx Serie von Intel war, 8237, 8254 ,8255, 8259, 
8284, 8288 usw. war von einem Hersteller die Rede, der diese auch baut, 
jedoch mit erweiterten Funktionen.

von Beo Bachta (Gast)


Lesenswert?

Mikki M. schrieb:
> Warum nicht WIZNET W5300 der hat gleich ein Paralell-Interface ?

Halte ich für den besten Vorschlag.

Man gewinnt bei Parallel gegenüber SPI einiges an Geschwindigkeit.
Der Urvater der Wiznet Familie, der W5100 ist auch dafür geeignet.

von Christian M. (Gast)


Lesenswert?

Mikki M. schrieb:
> Warum nicht WIZNET W5300

Weil's den nicht als Arduino-Breakout-Board gibt...?

Gruss Chregu

von Beo Bachta (Gast)


Lesenswert?

Christian M. schrieb:
> Weil's den nicht als Arduino-Breakout-Board gibt...?

Vielleicht weniger bekannt, aber es gibt die W5xxx Ethernet
Module auch mit Parallel-Interface.

So zum Beispiel:

https://www.mouser.de/ProductDetail/WIZnet/WIZ810MJ?qs=sGAEpiMZZMu3sxpa5v1qrsjreC02GGxCI3OsNkRXFNA%3D

von holm (Gast)


Lesenswert?

Sorry Chergu: Holzweg.
Auch die ECB-Bus Karte mit dem SPI Interface gibts nicht als 
Arduino-Brakout Board. Aber trotzdem danke fürs "für dämlich halten".

@Beobachter: Nein, isses nicht. Es gibt da noch einige andere Sachen mit 
SPI die ich gerne angesteuert hätte, z.B. eine Platine mit Samsung VFD 
die ich mal hier vorgestellt hatte. So ziemlich jede halbwegs aktuelle 
Peripherie kommt mit SPI oder I2C.
Ja, es geht auch Software mit Bitbang, allerdings kann ich dann die im 
Z280 enthaltenen DMA Kanäle nicht verwenden.

@pumuggl: 83C92A, ja hübsch, allerdings muß ich da mit dem gesamten 
TCP/IP Stack selber kämpfen, da kann ich auch den Am7990 (Lance) 
verbasteln.

@Martin: DANKE!!, das Ding paßt wie die Faust aufs Auge. Mit Deiner 
Antwort hat sich der Post gelohnt.

@Harald, ja, wer lesen kann ist klar im Vorteil. Abgesehen davon ist der 
Z280 ein 16 Bit Mikroprozessor mit MMU und getrenntem I/D Space mit bis 
zu 16Mbyte Adreßraum der immerhin mit 12,5Mhz (offziell) dahin kriecht. 
Kann das ein Atmega328? Nicht zuletzt UZI280 ( 
http://oldcomputers-ddns.org/public/pub/rechner/zilog/z280/uzi280/uzi280.html 
) macht das System interessant. Der Z280 sollte ursprünglich mal als 
Z800 auf die Welt kommen.

Danke an Alle, speziell an Martin.

Gruß,
Holm

von holm (Gast)


Lesenswert?

...der TP3465 ist ziemlich schwer zu bekommen, ich habe mal eine Anfrage 
bei S-H-Halbleiter angeworfen, die haben den scheinbar da..

Beim Suchen bin ich aber auf diverse Verilog und VHDL Implementationen 
gestoßen, u.A. bei Lattice aber auch bei Digikey:

https://www.digikey.com/eewiki/pages/viewpage.action?pageId=409609

------------------------------------------------------------------------ 
--------
--
--   FileName:         spi_master.vhd
--   Dependencies:     none
--   Design Software:  Quartus II Version 9.0 Build 132 SJ Full Version
--
--   HDL CODE IS PROVIDED "AS IS."  DIGI-KEY EXPRESSLY DISCLAIMS ANY
--   WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
--   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR 
A
--   PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL DIGI-KEY
--   BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
--   DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF
--   PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
--   BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE 
THEREOF),
--   ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
--
--   Version History
--   Version 1.0 7/23/2010 Scott Larson
--     Initial Public Release
--   Version 1.1 4/11/2013 Scott Larson
--     Corrected ModelSim simulation error (explicitly reset clk_toggles 
signal)
--
------------------------------------------------------------------------ 
--------

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;

ENTITY spi_master IS
  GENERIC(
    slaves  : INTEGER := 4;  --number of spi slaves
    d_width : INTEGER := 2); --data bus width
  PORT(
    clock   : IN     STD_LOGIC;                             --system 
clock
    reset_n : IN     STD_LOGIC; 
--asynchronous reset
    enable  : IN     STD_LOGIC;                             --initiate 
transaction
    cpol    : IN     STD_LOGIC;                             --spi clock 
polarity
    cpha    : IN     STD_LOGIC;                             --spi clock 
phase
    cont    : IN     STD_LOGIC;                             --continuous 
mode command
    clk_div : IN     INTEGER;                               --system 
clock cycles per 1/2 period of sclk
    addr    : IN     INTEGER;                               --address of 
slave
    tx_data : IN     STD_LOGIC_VECTOR(d_width-1 DOWNTO 0);  --data to 
transmit
    miso    : IN     STD_LOGIC;                             --master in, 
slave out
    sclk    : BUFFER STD_LOGIC;                             --spi clock
    ss_n    : BUFFER STD_LOGIC_VECTOR(slaves-1 DOWNTO 0);   --slave 
select
    mosi    : OUT    STD_LOGIC;                             --master 
out, slave in
    busy    : OUT    STD_LOGIC;                             --busy / 
data ready signal
    rx_data : OUT    STD_LOGIC_VECTOR(d_width-1 DOWNTO 0)); --data 
received
END spi_master;

ARCHITECTURE logic OF spi_master IS
  TYPE machine IS(ready, execute);                           --state 
machine data type
  SIGNAL state       : machine;                              --current 
state
  SIGNAL slave       : INTEGER;                              --slave 
selected for current transaction
  SIGNAL clk_ratio   : INTEGER;                              --current 
clk_div
  SIGNAL count       : INTEGER;                              --counter 
to trigger sclk from system clock
  SIGNAL clk_toggles : INTEGER RANGE 0 TO d_width*2 + 1;     --count spi 
clock toggles
  SIGNAL assert_data : STD_LOGIC;                            --'1' is tx 
sclk toggle, '0' is rx sclk toggle
  SIGNAL continue    : STD_LOGIC;                            --flag to 
continue transaction
  SIGNAL rx_buffer   : STD_LOGIC_VECTOR(d_width-1 DOWNTO 0); --receive 
data buffer
  SIGNAL tx_buffer   : STD_LOGIC_VECTOR(d_width-1 DOWNTO 0); --transmit 
data buffer
  SIGNAL last_bit_rx : INTEGER RANGE 0 TO d_width*2;         --last rx 
data bit location
BEGIN
  PROCESS(clock, reset_n)
  BEGIN

    IF(reset_n = '0') THEN        --reset system
      busy <= '1';                --set busy signal
      ss_n <= (OTHERS => '1');    --deassert all slave select lines
      mosi <= 'Z';                --set master out to high impedance
      rx_data <= (OTHERS => '0'); --clear receive data port
      state <= ready;             --go to ready state when reset is 
exited

    ELSIF(clock'EVENT AND clock = '1') THEN
      CASE state IS               --state machine

        WHEN ready =>
          busy <= '0';             --clock out not busy signal
          ss_n <= (OTHERS => '1'); --set all slave select outputs high
          mosi <= 'Z';             --set mosi output high impedance
          continue <= '0';         --clear continue flag

          --user input to initiate transaction
          IF(enable = '1') THEN
            busy <= '1';             --set busy signal
            IF(addr < slaves) THEN   --check for valid slave address
              slave <= addr;         --clock in current slave selection 
if valid
            ELSE
              slave <= 0;            --set to first slave if not valid
            END IF;
            IF(clk_div = 0) THEN     --check for valid spi speed
              clk_ratio <= 1;        --set to maximum speed if zero
              count <= 1;            --initiate system-to-spi clock 
counter
            ELSE
              clk_ratio <= clk_div;  --set to input selection if valid
              count <= clk_div;      --initiate system-to-spi clock 
counter
            END IF;
            sclk <= cpol;            --set spi clock polarity
            assert_data <= NOT cpha; --set spi clock phase
            tx_buffer <= tx_data;    --clock in data for transmit into 
buffer
            clk_toggles <= 0;        --initiate clock toggle counter
            last_bit_rx <= d_width*2 + conv_integer(cpha) - 1; --set 
last rx data bit
            state <= execute;        --proceed to execute state
          ELSE
            state <= ready;          --remain in ready state
          END IF;

        WHEN execute =>
          busy <= '1';        --set busy signal
          ss_n(slave) <= '0'; --set proper slave select output

          --system clock to sclk ratio is met
          IF(count = clk_ratio) THEN
            count <= 1;                     --reset system-to-spi clock 
counter
            assert_data <= NOT assert_data; --switch transmit/receive 
indicator
            IF(clk_toggles = d_width*2 + 1) THEN
              clk_toggles <= 0;               --reset spi clock toggles 
counter
            ELSE
              clk_toggles <= clk_toggles + 1; --increment spi clock 
toggles counter
            END IF;

            --spi clock toggle needed
            IF(clk_toggles <= d_width*2 AND ss_n(slave) = '0') THEN
              sclk <= NOT sclk; --toggle spi clock
            END IF;

            --receive spi clock toggle
            IF(assert_data = '0' AND clk_toggles < last_bit_rx + 1 AND 
ss_n(slave) = '0') THEN
              rx_buffer <= rx_buffer(d_width-2 DOWNTO 0) & miso; --shift 
in received bit
            END IF;

            --transmit spi clock toggle
            IF(assert_data = '1' AND clk_toggles < last_bit_rx) THEN
              mosi <= tx_buffer(d_width-1);                     --clock 
out data bit
              tx_buffer <= tx_buffer(d_width-2 DOWNTO 0) & '0'; --shift 
data transmit buffer
            END IF;

            --last data receive, but continue
            IF(clk_toggles = last_bit_rx AND cont = '1') THEN
              tx_buffer <= tx_data;                       --reload 
transmit buffer
              clk_toggles <= last_bit_rx - d_width*2 + 1; --reset spi 
clock toggle counter
              continue <= '1';                            --set continue 
flag
            END IF;

            --normal end of transaction, but continue
            IF(continue = '1') THEN
              continue <= '0';      --clear continue flag
              busy <= '0';          --clock out signal that first 
receive data is ready
              rx_data <= rx_buffer; --clock out received data to output 
port
            END IF;

            --end of transaction
            IF((clk_toggles = d_width*2 + 1) AND cont = '0') THEN
              busy <= '0';             --clock out not busy signal
              ss_n <= (OTHERS => '1'); --set all slave selects high
              mosi <= 'Z';             --set mosi output high impedance
              rx_data <= rx_buffer;    --clock out received data to 
output port
              state <= ready;          --return to ready state
            ELSE                       --not end of transaction
              state <= execute;        --remain in execute state
            END IF;

          ELSE        --system clock to sclk ratio not met
            count <= count + 1; --increment counter
            state <= execute;   --remain in execute state
          END IF;

      END CASE;
    END IF;
  END PROCESS;
END logic;


...bekommt man das in ein EPM7032 oder 7064 ..70128 gegossen?
Ich habe einige ältere CPLDs (passend zu 5V) da, müßte mal genauer 
nachsehen..

Gruß,
Holm

von Route_66 H. (route_66)


Lesenswert?

holm schrieb:
> Der Z280 sollte ursprünglich mal als
> Z800 auf die Welt kommen.

holm schrieb:
> Der Z280 sollte ursprünglich mal als
> Z800 auf die Welt kommen.

Nicht als Z8000?
Die DDR hatte ihn jedenfalls als U8000 im Programm.

von Georg G. (df2au)


Lesenswert?

Stilecht wäre ein CS8900 (parallel auf Ethernet). Der passt vom Bus 
Interface zum Z80.
Man kann auch eine alte 8-Bit ISA Ethernetkarte plündern und auf ECB-Bus 
setzen.
Warum der Umweg über SPI?

von Peter D. (peda)


Lesenswert?

Der 74HC299 kann seriell-parallel und zurück. Du brauchst aber noch ne 
Ablaufsteuerung und Takt (4-Bit Zähler + einige Gatter).

von holm (Gast)


Lesenswert?

Route_66 H. schrieb:
> holm schrieb:
>> Der Z280 sollte ursprünglich mal als
>> Z800 auf die Welt kommen.
>
> holm schrieb:
>> Der Z280 sollte ursprünglich mal als
>> Z800 auf die Welt kommen.
>
> Nicht als Z8000?
> Die DDR hatte ihn jedenfalls als U8000 im Programm.

Nein, als Z800 genauso wie ich es schrieb. Eine DDR U8000 Maschine (EAW 
P8000 steht neben mir)

Gruß,
Holm

von Peter D. (peda)


Lesenswert?

Für Ethernet auf 8051 hatten wir einen Chip von Cirrus verwendet. Der 
paßte ideal, da er auch einen ALE-Pin hatte für memory mapped.

von holm (Gast)


Lesenswert?

Georg G. schrieb:
> Stilecht wäre ein CS8900 (parallel auf Ethernet). Der passt vom
> Bus
> Interface zum Z80.
> Man kann auch eine alte 8-Bit ISA Ethernetkarte plündern und auf ECB-Bus
> setzen.
> Warum der Umweg über SPI?

Ich habe aber gar keinen Z80! ...auch wenn der Z280 rückwärtskompatibel 
zum Z80 ist.

Warum nur schreibe ich länglich was ich möchte? Ich schrieb doch auch 
das ich mit der SPI noch andere Sachen vor habe. Die 128MB Flash Disk in 
dem Computer ist auch nicht stilecht.

Ich habe hier mehrere alte Rechner, angefangen vom DDR Bürocomputer 
A5120 und dessen Derivate, über PC1715, diverse PDP11 wie auch eine 
russische Elektronika E60 und auch eine VAX4300 (läuft Alles). Darf ich 
mir bitte einen Rechner mit dem Z280 zum spielen so bauen wie ich mir 
das vorstelle?

Gruß,
Holm

von holm (Gast)


Lesenswert?

@Peda..das dürfte der von Georg G. erwähnte CS8900 gewesen sein und der 
"Inhalt" einer SPI Schnittstelle ist mir im Wesentlichen bekannt. Ich 
wollte aber einen simpel zu handhabenden Peripheriechip..kein 
Kuchenblech aus einzelnen TTL.

In der russischen Elektronika E60 ( ~LSI11) besteht die serielle Console 
Schnittstelle aus einzelnen TTL ICs, das enthält nur die 
Synchronisationslogik für den Asynchrontrnasfer zusätzlich...ja, das 
geht...auch, will ich aber nicht.

Gruß,
Holm

von Beo Bachta (Gast)


Lesenswert?

holm schrieb:
> ...bekommt man das in ein EPM7032 oder 7064 ..70128 gegossen?

Kenne die Altera Dinger nicht (soweit ich mich erinnere waren
die im Fitting immer sehr störrisch), aber in ein XILINX
XCR3128 (also 128 Makrozellen) passt das locker rein. Bei
64 Makrozellen könnte es knapp werden.

von holm (Gast)


Lesenswert?

Ich habe in einer VM ein XP mit Altere MAX+II 10.2 Baseline und ich habe 
ein Altera Quartus 13.0sp1 (32bit) auf dem Rechner die erst mal nicht 
nach einer Erneuerung einer Lizenz rufen..

Mit dem Baseline bin ich auf die Schnelle nicht klar gekommen, das Ding 
will unbedingt mit einem Schematic Entry anfangen..es gibt aber da 
irgendwelche VHDL Plugins..offensichtlich muß ich aber Ein- und Ausgänge 
im Schematic Entry definieren ..hmm..

Ich habe nun mal das Quartus angeworfen MAX700S ausgewählt, das vhdl 
file gelade nund den Compiler angeworfen, erst hat er gemeckert das er 
88 Register nicht in 64 Makrozellen unterbringen kann..verstehe ich. Ich 
habe dann ein EPM7128 mit PLCC84 ausgewählt aber ihm reichen da die 68 
IO Pins nicht. Selbst mit einem QFP100 reichen die 86 nicht ...aber so 
viele wollt eich da gar nicht anschließen.

Mal überschlagen: 8Bits für Daten, 3 Bits für Register, von mir aus noch 
8 Bits für Steuersignale, 4 für CHIP Select Ausgänge und MISO,MOSI, 
SCK..sind
in etwa 26 Pins die ich wirklich haben möchte.

Ich halte deshalb 86 für etwas reichlich. Wenn nun Jemand mit 0 Ahnung 
wie ich in das VHDL File guckt, fällt da auf:

 slaves  : INTEGER := 4;  --number of spi slaves
 d_width : INTEGER := 2); --data bus width

aber auch

 clk_div : IN     INTEGER;    --system clock cycles per 1/2 period of 
sclk
 addr    : IN     INTEGER;    --address of  slave

...wer erzählt hier wieviel Bit Interger ich da haben will? 
Wahrscheinlich Niemand. Ist das die Ursache für den wahnsinnigen 
IO-Bedarf?

Ich habe ja Ein- und Ausgänge bisher nirgends definiert..

Was bedeutet d_with : INTEGER := 2; ?

Theoretisch würde ich das für einen 2Bit Integer halten wollen...

Gruß,
Holm

von Martin K. (mk279)


Lesenswert?

Hallo Holm,

bitte gerne.
Bei meinem 68000 Rechner hatte ich mir das Dogma auferlegt, keine FPGAs 
oder CPLDs zu verbauen. Naja, machte das Ganze nicht einfacher. Man muss 
halt zusehen,  wo man die ICs herbekommt.

Ich habe mir damals ein paar wenige Chips von www.utsource gekauft.
Dort gibt's auch Chips, die schon abkündigt sind.
z.B. auch den besagten TP3465. Bei dem Preis geht man auch kein großes 
Risiko ein.

Sorry, ich dachte, Mouser hat die auch noch verfügbar. Scheinbar gibt's 
nur noch das Datenblatt.

Gruß,
 Martin

von holm (Gast)


Lesenswert?

Ja utsource hat die Dinger schon noch, $3,81 für Einzelstücke, hatte ich 
schon nachgesehen. Bei utsource hatte ich gestern erst bestellt ... :-|
Bei Mouser war ich auch schon zu dem Null-Ergebnis gekommen.

Ich habe eine von Tillman Reh designte CPU-280, das Ding steckt sowieso 
voller GALs ..was nichts anderes als kleine CPLDs sind, in so fern ist 
mir das eigentlich egal. Es kann nur passiere ndas das 2 oder 3 Leute 
mal nachbauen wollen was ich da mache, aber viele Leute klappen schon 
nach hinten um wenn da ein 0805 Widerstand auf der Platine sitzt...was 
mich hier aber nicht weiter stören würde. Das System als Solches läuft, 
derzeit mit 9,8304 Mhz und 4,915s Busclock weil ich keine ausreichend 
schnellen RAMs habe..genau die (4MB) sind auch Bestandteil der utsource 
Bestellung, dann läufts mit 12,5 respektive 6,25Mhz..
Ich habe eine alte Conitec GRIP4 für Display und Tastatur, schon da 
fallen Nachbauten wegen Verfügbarkeit   aus. Ich möchte aber Netzwerk, 
ftp hauptsächlich, und ein paar GPIOs sowie halt ne SPI.
Das von Dir ausgebuddelte Ding tut scheinbar Alles was ich mir wünsche, 
aber wenn ich eines der VHDL Designs in ein altes CPLD bekomme schadet 
das auch nicht, ich habe die CPLDs ja mal zum basteln angeschafft. Ein 
modernes FPGA zu benutzen ist Blödsinn, da paßt der ganze Rechner rein.

Zeug wie ISPLSI1016,1032, EPM 3032,3064,7064,7160,XC9572 und -XL,sowie 
ATF1508 mit von 44 bis zu 100 Pins treiben sich hier herum, das muß sich 
doch da einfüllen lassen..
(Manche Chips sind so alt das die noch nicht mal JTAG kennen, aber man 
hat ja auch alte Programmer :-) )

Am meisten geht mir dabei die Lizenzpolitik aller Hersteller auf den 
Beutel die da der Meinung sind Ihre Software müsse jetzt veraltet sein, 
beim gleichzeitigen Fallenlassen der Unterstützung für alte OS und 
Devices.
Man wird guasi gezwungen Lizenzen "irgendwo" aufzutreiben und Jahre 
zurück zu drehen. Danke ihr Idioten fürs ständige ärgern von Hobbyisten 
und fürs verschwenden von Resourcen! Ne vernünftige Hobbyist-License 
täte es auch!

..es würde mich aber ärgern ein 84poliges PLCC Teil dafür einsetzen zu 
müssen..ich werde mich wohl mal um ein VHDL Tutorial kümmern müssen.

Gruß,
Holm

von Peter D. (peda)


Lesenswert?

holm schrieb:
> wollte aber einen simpel zu handhabenden Peripheriechip..kein
> Kuchenblech aus einzelnen TTL.

Das wird kein Kuchenblech, sondern vielleicht 3..4 Logik-ICs.
Kannst aber auch einen ATF16V8 für die Logik nehmen. Oder einen ATF750 
(20 FFs), der dann gleich den 74HC299 ersetzt.
Die ATF gibt es noch im DIP und sind 5V. Man braucht allerdings einen 
Programmer, z.B. GALEP.
Die Gleichungen schreibt man mit WINCUPL, ist leicht zu erlernen.

https://www.mouser.de/ProductDetail/Microchip-Technology-Atmel/ATF750CL-15PU?qs=sGAEpiMZZMuJNuO2s1hGZJOLqYzZpioSWz8WRO6seeU%3D

von holm (Gast)


Lesenswert?

Peda der ATF16V8 ist ein GAL16V8..Gals sind mir nicht neu und ich habe 
nicht nur Wincupl irgendwo auf den Rechnern sondern auch mehrere GALEPs, 
einen ALL07 und anderes. Auch das "Atmel" aka Microchip die Dinger immer 
noch baut ist mir bekannt.

Nichts desto trotz möchte ich stark bezweifeln das Du eine SPI Master 
Schnittstelle in einen 16V8 bekommst.

Der Aufwand den Implementationen im Web da treiben ist viel höher, auch 
unser Lothar hat Derartiges auf seiner Webseite (was ich allerdings 
wegen seiner schrägen Ansichten zu Meinungsfreiheit und Moderation hier 
nicht benutzen werde).

Gruß,
Holm

von Peter D. (peda)


Lesenswert?

holm schrieb:
> Nichts desto trotz möchte ich stark bezweifeln das Du eine SPI Master
> Schnittstelle in einen 16V8 bekommst.

Das Schieben macht ja der 74HC299. Ein 3 Bit Zähler, bleiben noch 5 
Macrozellen für die Ablaufsteuerung, das reicht dicke. Das /WR lädt das 
Register und startet den Zähler, nach 8 Takten (4MHz) stoppt er wieder. 
Man könnte auf ner 2 Adresse das Busy-Bit lesen, oder einfach die 8 
Takte abwarten.

von holm (Gast)


Lesenswert?

Ok, Du willst die Schieberegister extern anknoten...

Ich hätte aber gerne eine vollständige SPI, d.h. Empfang eines Bytes 
wärend eines gesendet wird, Puffer sind hier auch keine schlechte 
Sache..deswegen ja die Idee das in ein etwas höher integriertes GAL zu 
verpflanzen und die SR gleich mit darin unterzubringen..

Gruß,

Holm

von Irgendwer (Gast)


Lesenswert?

pegel schrieb:
> Ich finde es leider nicht mehr, kann mich aber erinnern, als ich
> auf der
> suche nach der ganzen 82xx Serie von Intel war, 8237, 8254 ,8255, 8259,
> 8284, 8288 usw. war von einem Hersteller die Rede, der diese auch baut,
> jedoch mit erweiterten Funktionen.

z.B.: Z84C4008
Der kann zumindest schonmal einen Syncron Modus. Das Interface ist halt 
Z80 Kompatibel mit 8Bit Datenbus, aber das sollte der Z280 eigentlich 
auch können.
Und er ist immerhin noch lieferbar :
https://www.mouser.de/ProductDetail/ZiLOG/Z84C4008PEG?qs=1C6%2FyOstnVsXfBMunrj5eg==

von fchk (Gast)


Lesenswert?

Du könntest einen Peripherial Interface Controller (PIC) verwenden. Das 
wäre sogar noch authentisch, denn die Dinger hat General Instruments 
Ende der 70'er für Peripheriesteuerungsaufgaben entwickelt. Der PIC16F74 
hat genau dafür einen PSP Parallel Slave Port mit D0..D7, RD, WR und CS, 
und damit bindest Du das Teil an den Z80-Bus an. Ok, wenn Du ganz 
authentisch sein wolltest, würdest Du einen EPROM-basierten PIC16C74 
(der ist aus der Zeit) nehmen, aber ich denke, die Zeit mit 
UV-Löschlampen etc ist auch bei Dir vorbei.

Alternativen aus der Zeit waren 8042, 8048 und ähnliche, die es dann in 
die Tastaturcontroller der PCs schafften.

fchk

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Anbei mal ne einfache Schaltung mit 3 Logic-ICs.
Bei /WR = 0 wird mit der nächsten CLK-Flanke IC4 mit den Daten geladen 
und der IC2 mit 1000b. IC2 zählt somit 8 weitere Takte und sperrt sich 
dann wieder. Dabei schiebt IC4 die Daten raus bzw. rein und geht danach 
in Hold.
Mit /RD = 0 kann dann gelesen werden.
In /RD, /WR müssen noch der Adreßdekoder und /MREQ, /M1 verknüpft 
werden.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>...der ganzen 82xx Serie von Intel war, 8237, 8254 ,8255, 8259,
> 8284, 8288 usw. war von einem Hersteller...

NEC hat diese Intel-Chips auch gebaut, später auch in CMOS-Ausführung, 
unter völlig anderen Typbezeichnungen.

: Bearbeitet durch User
von holm (Gast)


Lesenswert?

@peda: Du bist clever :-)

Ich werde das bestimmt mal testen.

@Christoph: Ich weiß das, nur macht keiner der Chips 
(DMA,PIT,PPI,INT-Contr,Clock-Gen,Status-Dec) das was ich gerne hätte.

Auch die Russen haben die Dinger gebaut, beim 8237 bin ich mir da nicht 
sicher aber die 8257 gabs auf jeden Fall, dito mit 8254, den 8253A gabs 
auch.
..nur geht das völlig am Thema vorbei.

Gruß,
Holm

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Falls du noch einen Z80-STI (MK3801) in deiner Z80-Sammlung hast, lässt 
sich damit vermutlich mit geringem Aufwand ein SPI-Master emulieren.

von holm (Gast)


Lesenswert?

..nein, davon hab ich nur einen und der steckt auf einer Conitec GRIP-4 
die ich gerade repariert habe, für die mir Conitec (danach) die 
Unterlagen geschickt hat, und mit deren Scan ich gerade befaßt bin...

Gruß,
Holm

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Anbei noch ein SPI-Slave in CUPL auf dem ATF750. Man sieht da schön das 
Schieberegister mit parallel laden. Das kann man als Vorlage für einen 
SPI-Master verwenden. Das 8Bit-Ausgangslatch braucht man ja nicht, d.h. 
die 8 Macrozellen sind frei verfügbar für den 3Bit-Zähler und anderes.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

In grauer Vorzeit habe ich im ATV750 eine Statemachine mit >64 states 
untergebracht, und das alles in CUPL unter DOS.

Dilbert und seine Kollegen schwelgen auch in Erinnerungen...
https://dilbert.com/strip/1990-12-14
http://www.w-uh.com/posts/101220-you_had_zeros.html

: Bearbeitet durch User
von holm (Gast)


Lesenswert?

Dilbert hilft mir hier nicht wirklich, aber ich kann ja zumindest die 
Steckverbinder mit Vaseline behandeln.

Danke Peda, ich werde mal experimentieren und wahrscheinlich diesen 
Thread wieder ausgraben wenn ich konkrete Ergebnisse habe

Gruß,
Holm

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Es war für mich damals Mitte der 90er das Problem, auf einer kleinen 
VME-Bus-Platine ein PLL-IC seriell anzusteuern. Da waren auch 74xx299 
beteiligt, das ATV750 hat damit die Daten parallel vom VME-Bus 
übernommen und als SPI rausgeschoben. Derweil wurde der VME-Bus mit 
einem Busy-Signal angehalten.

von holm (Gast)


Lesenswert?

Eberhard H. schrieb:
> Falls du noch einen Z80-STI (MK3801) in deiner Z80-Sammlung hast,
> lässt
> sich damit vermutlich mit geringem Aufwand ein SPI-Master emulieren.

Indessen sind mir 2 STI zugelaufen..auch wenn ich sicherlich mit einem 
Altera 70xx Dingens als erstes experimentieren werde und mir dazu pedas 
Geschichte näher ansehe (momentan warte ich erst mal auf die bestellten 
Platinen von JLCPCB, generische Prototypenkarte), mal spaßeshalber die 
Frage hier was Du damit vor hattest Eberhard? Im Prinzip ist da wohl ne 
halbe Z80 SIO drin (kann synchron und asnychron, wobei ich gelesen habe 
das sie die Synchron Bytes unterdrücken kann)....

Was ich beim Lesen des Datenblattes auch mitbekommen habe ist, das der 
bekannte MC68901 ne für MC68k aufgebohrte/angepaßte STI ist..wußte ich 
bisher nicht.

Gruß,
Holm

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Stimmt, der MK68901 ist ein 68K-Derivat des MK3801, ergänzt um DTACK und 
einen Oszillator für Quarzbetrieb.

Später wurde er auch von Motorola, ST, Hitachi und Toshiba gebaut, sogar 
in HCMOS.

68901/68HC901 lassen sich ersatzweise per umschaltbarem Bus-Interface 
auch an den Z80 und andere CPUs anschließen.

Je nach Geschwindigkeitsversion (2,5 MHz bis 8 MHz) sollte man mit dem 
USART von 3801/68901/68HC901 im SYNC-Mode und einigen I/O-Pins 
(desselben Bausteins) für das SPI-Handshaking mit wenig Softwareaufwand 
eine akzeptabel schnelle SPI-Schnittstelle emulieren* können, sicher 
nicht so schnell wie per FPGA/CPLD, dafür mit dem Z80-STI authentischer 
in einem Z80-System.

Am Rande sei noch ein exotischer Vorgänger des MK3801 erwähnt, nämlich 
der MK3886 = Z80-COMBO (2,5 MHz und 4 MHz), dessen USART sogar mit bis 
zu 16 Bit Länge betrieben werden konnte.
Allerdings fehlten ihm die I/O-Pins fürs Handshaking.
Dafür besaß er noch 256 Byte SRAM, wovon 64 Byte per Batterie gepuffert 
werden konnten.

* Mit einem der Z80-SIO ist das vermutlich nicht so einfach möglich 
(wenn überhaupt).

von holm (Gast)


Lesenswert?

Na Handshake in dem Sinne brauchts bei SPI nicht, nur ein Chip Select 
Signal das auch aus einem anderen Peripherie-Chip kommen kann. Auch die 
Z80-Sio hat "frei programmierbare" IOs (weiß jetzt nicht mehr welche, 
CTS? RTS? DTR? steht im DB)
Im Prinzip müßte das jeder UART können der auch den Sendetakt mit 
ausgibt und die gleichzeitig senden und Empfangen kann (sollte gegeben 
sein). Störend in Erscheinung treten da Start-, Paritäts- und Stopbits, 
das müßte man sich konkret mal ansehen (ggf. Gatter hinter TxD). Das 
Hauptproblem ist da wohl das das langsam wird, ne SIO kann wohl maximal 
38k4 asynchron, andere Chips mit integriertem Baudratengenerator sind 
evtl. da schneller aber eine SPI wird gerne mit 2 Mhz oder mehr 
betrieben.
Ich habe an ein (kommerzielles) Projekt eine 16550 kompatible Uart 
SC16IS740/750/760 über SPI angebunden (an einen XMega). Das wäre bei 
üblichen UART Geschwindigkeiten Unfug.

Gruß,
Holm

von holm (Gast)


Lesenswert?

Nochmal wegen "Authentizität" des Systems.. darum gehts mir hier gar 
nicht.
Ich habe eine Z280 am Wickel, also einen Nachfolger wie auch die Z180 
(bis zu 33Mhz) oder eZ80 (50Mhz, was angeblich der Performance eines Z80 
mit 150Mhz entspricht) es sind. Schon ab Z80 waren GALs auf den Boards 
nicht unüblich und ich habe mir die 96poligen DIN41612 Steckverbinder 
gerade aus Controllerboards eines Reel-to-Reel Streamers ausgelötet 
(weil ichs kann, ich habe eine DDR Minischwall Lötanlage) bei dem auch 
Altera CPLDs verbaut sind. Das ist also Alles irgendwie "authentisch".

Das wird ein Maschinchen nur für mich zum spielen, ich bin da nur mir 
selbst verantwortlich...

Gruß,
Holm

von holm (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt mal probiert Pedas Vorschlag in ein CPLD zu füllen 
(Altera EPM3032ALC44). Das Ganze mit Schematic Entry da ich für VHDL 
momentan noch  zu doof bin.

Unklar ist mir das Bauteil tribuf aus Alteras Bibliothek, ist das so 
gemeint das der Ausgang Tristate wird, wenn der Eingang TRI High ist? 
Einen 74LS125 kennt die Bibliothek leider nicht, dann hätte ich gewußt 
was ich vor mir habe.
Das CPLD ist gerammelt voll, 32 von 32 Makrozellen benutzt, 2 Pins noch 
frei.
Altera MAXII insistiert darauf die Schaltung als JPG exportieren zu 
müssen.

Gruß,
Holm

von holm (Gast)


Lesenswert?

Anmerkung: Der BusClock des Z280 ist 6,144Mhz, deswegen teile ich den 
Takt erst noch durch 4.

Gruß,
Holm

von Rob (Gast)


Lesenswert?

Hallo Holm,


ich verwende- da ich tausende davon noch auf Lager habe- die Lattice 
ISPLSI2032 mit 5V, deren -immer noch freie, aber auch jährlich neu zu 
beantragende- Oberfläche kommt-soweit ich das bislang erkennen konnte- 
NUR mit generischen Blöcken, d.h. überhaupt keine 74xxx 1:1 Äquivalente, 
dafür aber eine an die interne CPLD-Struktur angepasste Logik.

Ich gehe mal davon aus, wenn Du Deine Lösung mithilfe solch generischer 
Blöcke umzeichnest (die manchmal in der Tat etwas gewöhnungsbedürftig 
sind und die Beschreibung auch bei Lattice alles Andere als ausführlich, 
aber dazu kann man ja simulieren, gell ;o, dann würde das auch bei 
Altera mit deutlich weniger Ressourcen gehen, oder eben mehr "Luxus" mit 
reinpassen.

Bevor ich nun mit Anfragen überschüttet werde: NEIN, ich bin nicht am 
AB-Verkauf der Bausteine interessiert!

Habe das gerade ausprobiert, bekomme ich LOCKER in ein 2032 rein, selbst 
mit Double-Buffering (d.h. Empfang eines 2.Bytes möglich, während das 
erste noch nicht abgeholt ist, ähnlich dem, wie es in den Microchip PICs 
auch gehandhabt wird...

Nen noch tieferer FIFO und/oder auch in Schreibrichtung erfordert dann 
natürlich ein größeres CPLD... Empfang während Senden hingegen ist kein 
Problem, das gibt ja das Schieberegister selbst her. Interessanter wäre 
schon eine Konfigurationsmöglichkeit ähnlich der PIC-SPI Lösung, welche 
die 4 Möglichkeiten hinsichtlich Ruhepegel von CLK und Übernahme-Flanke 
noch berücksichtigt, sonst kann es sein, dass just genau DER 
SPI/Microwire-Chip, den Du dann mal ansteuern willst just das ANDERE 
Format nur unterstützt. Manche Implementierungen erlauben sogar die 
Umkehr der Schieberichtung, denn auch da gibt es wohl unterschiedliche 
Implementierungen gerade in der Frühzeit der seriellen Ansteuerungen 
-lange bevor man das SPI oder Microwire nannte...


Ich "male" bei CPLDs auch auf Schematic-Entry-Level, ist für CPLD meist 
sinnvoller als VHDL, bei FPGAs jedoch Unfug (ausser fürs Top-Level...)

WinCUPL habe ich auch noch, da auch noch einige GALs vorrätig, aber das 
ist schon sehr grenzwertiges Gefummle...

Tendiere persönlich aber eher zu den oben schon genannten PIC-Lösungen, 
die ja namensgebend für diese Controller wurden, denn zum Einen gibt es 
die "noch" und hoffentlich auch noch länger (bislang war Microchip ja 
mit der einzige Chiplieferant, der konsequent NICHTS abgekündigt hat 
ohne nen 1:1 Ersatz dafür zu haben, aber mit den ganzen Zukäufen der 
letzten Jahre ändert sich das auch gerade massiv...), zum Anderen 
programmiere ich eben seit Urzeiten Prozessoren und Controller, während 
ich HW im Geiste eher aus TTL zusammen setze, was aber halt schnell dann 
wirklich in Richtung Kuchenblech gehen würde, oder aber Features später 
schmerzlich abgehen und dann meist auch nicht mehr ins gewählte CPLD 
reinpassen (und das nächstgrößere schweineteuer ist, oder nur mit 
deutlich mehr Pins erhältlich ist, und/oder nur für 3V3 wenn überhaupt 
etc)

zurück zum PIC:

Der PSP=Parallel-Slave-Port ist da nur ein Anfang, es gibt auch 
Parallel-Master-Ports mit bis zu 2 Adressleitungen, d.h. 4 Register im 
direkten Zugriff. Das sollte fürs SPI oder auch I2C genügen. 
Witzigerweise sind die "16-bit" PIC 24/33 Bausteine auch in sehr kleinen 
Gehäusen und für meist sogar weniger Geld verfügbar, wie die uralten PIC 
16F, bei doch deutlich mehr Leistung, was sogar eine Programmierung in C 
ermöglicht, während man beim 16F doch gut daran tut, das in Assembler 
hin zu fummeln...

Allerdings würde ich mir von Microchip auch eine Variante mit 4 oder 5 
Adressleitungen wünschen, da viele, eigentlich einfach via SW zu 
emulierende Chips, wie die ganze Peripherie der 65x/68x Serie, aber 
sicher auch entspr. Teile aus 808x und Z80, die Videochips und 
DMA-Controller mal generell ausgenommen, eben 16 oder max. 32 Register 
haben.

Ohne genug Register und mit PSP kommt man aber um Assembler nicht rum, 
da man dann "sofort" auf eingehende Daten reagieren muss und 
Lesezugriffe sind noch kritischer, da ist dann auch eine 2 MHz 65/68xx 
CPU dann schon wieder grenzwertig schnell, für nen 12 MHz Z280 wäre das 
sicher nix, es sei denn, man kann mit Waitstates arbeiten und der Bus 
(ohne mich da jetzt einzulesen...) unterstützt das auch...

Wenn es mit der angebotenen Registeranzahl von 1-4 geht, ist ein PIC mit 
32 oder mehr MHz und Port-Change-Interrupt aber sicher schneller als es 
für eine min. dem Original entsprechende Umsetzung von PIO oder SPI 
erforderlich wäre, von UARTs und anderen noch "langsameren" Dingen wie 
I2C ganz zu schweigen...

Ist weit Off-Topic, aber ich wundere mich immer wieder, wie schnell 
Leute nach CPLDs schreien oder BitBanging via Assembler machen, anstelle 
mal die Konfigurationsmöglichkeiten der UARTs & Co. in den div. PIC 
(oder auch anderen Controllerfamilien) durchzulesen. Damit geht fast 
Alles auf High-Level und in C!


Viel Spass weiterhin!

von holm (Gast)


Lesenswert?

Hallo Rob,

ja auch Lattice Kram liegt hier herum, irgendwelche 1016 aber auch 
größere, allerdings wollte die Lattice Lizenz gerade nicht mehr als ich 
anfangen wollte zu spielen, ergo flog der Kram wieder in die Schachtel, 
die wollten also nicht verwendet werden.
Das ich überhaupt mit dem CPLD angefangen habe lag an pedas Vorschlag 
mit 3 oder 4 Teilen eine SPI Schnittstelle zu basteln..allerdings wars 
mir zum probehalber zusammen löten schon wieder zu viel :-)
Hätte peda das nicht vorgeschlagen hätte ich den TP3465 ausprobiert der 
ja zu diesem Zweck gemacht wurde und auch flexibler ist. Der wäre für 
erträgliches Geld noch aufzutreiben gewesen..aber ich wollte es halt mal 
probieren. Lothars FPGA Impelmentierung geht sicher auch und unterstützt 
wohl alle 4 Modi, allerdings wollte ich das aus politischen Gründen 
nicht..Fachlich brillant, aber menschlich ein hochnäsiges...lassen wir 
das.
Die clockphase läßt sich bei meiner Lösung immerhin programmieren, mit 
der Lage siehts trübe aus weil ja mit einem SR gelesen und geschrieben 
wird, das kann man nicht trennen. Über double buffering habe ich mir 
noch keine Gedanken gemacht, vorher würde ich wohl noch eine 
Interruptfähigkeit implementieren.

In einen EPM3032 paßte der Kram nicht mehr, im EPM7064 ist aber noch 
Platz.
Quartus bietet sowohl die 74xx "Blöcke" als auch anonyme Blöcke an, 
wobei der Kram auch noch optimiert wird, d.h. der riesige 74154 ist bei 
weitem nicht so fett wie es den Anschein hat, weil er eben nicht voll 
belegt ist. Manchmal sind diese Blöcke in einer HDL geschrieben (wohl 
meist Verilog), manchmal sind sie selber ein "Schematic", die Grenzen 
sind bei Quartus also fließend und nichts von Beiden ist besser.

Ich habe prinzipiell kein Problem damit Mikrorechner als Peripherie 
einzusetzen, mir ist auch bewußt das das Feature "paralleles 
Busregister" gerade bei PICs existiert..allerdings erinnere ich mich nur 
sehr ungern an einen Auftrag einer Peripherieentwicklung mit PIC16F577 
(oder so)..diese Bankingeschichte muß man nicht wirklich haben, 
jedenfalls nicht auch noch für die Register ein und der selben 
Peripherie im Chip.
Ich habe den Auftrag erfolgreich abgeschlossen..damit ist es erst mal 
gut.
Erfahrungen habe ich sonst noch mit 12C508..vergiß es.

Andere Controller Hersteller haben es offensichtlich nicht nötig solche 
Busregister zu implementieren, weiß der Teufel warum. Ich hätte also 
einen ausreichend schnellen Chip verwenden müssen..was für mich heißt 
irgend einen ARM..aber dann wird das ganze Design ganz einfach Unfug, 
der ARM kann den Z280 gleich mit emulieren..
Eine Suche bei gockel nach "Z80 CP/M ESP8266" förderte auch prompt einen 
CP/M Emulator auf dem ESP32 Prozessor zu Tage....

Ansonsten ist das mit Deiner Verwunderung gar nicht selten. Gerade wenn 
man mit ollen Z80 spielt stößt man ständig auf Designs bei denen irgend 
ein AVR als "remote iüber USB programmierbarer EPROM" verwursted wird. 
Schnulli!
Sowas ist weder "retro" noch sinnvoll.

Gruß,
Holm

von holm (Gast)


Angehängte Dateien:

Lesenswert?

..hier so ziemlich die letzte Version die ich auch auf der Platine habe 
und die auch anstandslos funktioniert.

Gruß,

Holm

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.