Z80 SBC Problem.

Gast #5511773
Lesenswert?

Hallo!

Ich mir hier einen Z80 SBC auf dem Breadboard aufgebaut und teste gerade 
die Komponenten durch. Die PIO macht was sie soll. Bei der CTC hab ich 
einige Probleme. Entweder sehe ich den Wald vor lauter Bäumen nicht 
oder...
Bevor ich allerdings mit der SIO weitermache, würde ich gerne dieses 
Problem lösen.

Vielleicht hat einer der Z80 Spezialisten kurz Zeit über den Mini-Code 
(umso peinlicher) zu sehen. Vielleicht hab ich wirklich was übersehen.

Nur kurz zum Aufbau: Auswahl der IO-Bausteine erfolgt über zwei 
Adressleitungen und einen 74HC138 (belegt mit A2, A3 und GND). Für die 
CTC ergibt sich die Adresse 0Ch als Basis. Aber hardwareseitig wüsste 
ich nicht, wo der Fehler sein könnte zumal die PIO funktioniert und 
analog angeschlossen ist.

Hier der Code:
1
; =============================================================================
2
; KONSTANTEN
3
; =============================================================================
4
;  Speicher und IO-Ports
5
RAMSTA  EQU $8000          ; RAM Anfang
6
RAMTOP  EQU $FFFF          ; RAM Ende
7

8
CTCBAS  EQU $0C            ; CTC Basisadresse
9
CTC0  EQU CTCBAS + 0        ; CTC Kanal 0
10
CTC1  EQU CTCBAS + 1        ; CTC Kanal 1
11
CTC2  EQU CTCBAS + 2        ; CTC Kanal 2
12
CTC3  EQU CTCBAS + 3        ; CTC Kanal 3
13

14
PIOBAS  EQU $08            ; PIO Basisadresse
15
PIADAT  EQU PIOBAS + 0        ; Port A Daten
16
PIASTA  EQU PIOBAS + 1        ; Port A Status
17
PIBDAT  EQU PIOBAS + 2        ; Port B Daten
18
PIBSTA  EQU PIOBAS + 3        ; Port B Status
19

20
SIOBAS  EQU $04            ; SIO Basisadresse
21
SIADAT  EQU SIOBAS + 0        ; Kanal A Daten
22
SIASTA  EQU SIOBAS + 1        ; Kanal A Status
23
SIBDAT  EQU SIOBAS + 2        ; Kanal B Daten
24
SIBSTA  EQU SIOBAS + 3        ; Kanal B Status
25

26
; =============================================================================
27
; TESTPROGRAMM
28
; =============================================================================
29

30
    ORG $0
31
    
32
    DI          ; Interrupts aus
33
    
34
    ; PIO Test
35
    ; Port A: 0101 0011
36
    ; Port B: 0011 0101
37
    LD A, $0F      ; Steuerwort, nur Ausgabe
38
    OUT (PIASTA), A    ; Port A, Control
39
    
40
    LD A, $53      ; 0101 0011
41
    OUT (PIADAT), A    ; Port A, Daten
42
    
43
    LD A, $0F      ; Steuerwort, nur Ausgabe
44
    OUT (PIBSTA), A    ; Port B, Control
45
    
46
    LD A, $35      ; 0011 0101
47
    OUT (PIBDAT), A    ; Port B, Daten
48
    
49
    ; CTC Test
50
    ; Kanal 1: 5,9 kHz bei 2,4576 MHz Systemtakt
51
    LD A, $07      ; Steuerwort, Timer, Teiler 16
52
    OUT (CTC1), A    ; Channel 1
53
    
54
    LD A, $1A      ; Zeitkonstante (26d)
55
    OUT (CTC1), A    ; Channel 1    
56
    
57
    HLT          ; CPU stoppen
Gast #5511785
Lesenswert?

Rufus Τ. F. schrieb:
> Harald N. schrieb:
>> Vielleicht hab ich wirklich was übersehen.
>
> Du hast nicht erwähnt, was passieren soll und was stattdessen
> passiert.
>
>
>> Bei der CTC hab ich einige Probleme.
>
> Welche ?

Aja, stimmt. Naja es steht im Code.

Soll: Kanal 1 der CTC soll einen Takt von ca 5,9 kHz ausgeben.
Problem: Tatsächlich passiert an der CTC nichts...
Beitrag #5511834 wurde von einem Moderator gelöscht.
Gast #5511846
Lesenswert?

Harald N. schrieb:
> Ja. Zuerst das Steuerwort, danach die Zeitkonstante.
> Ich hänge mal ein Foto der CTC Beschaltung an.

EDIT: Die vier CLK/TRG-Eingänge und der CLK-Eingang sind alle verbunden 
und mit dem Systemtakt verbunden.


Eins noch. Ich hatte die Schaltung vorher mit NMOS-Bauteilen aufgebaut. 
Da hatte ich das gleiche Problem. Ich dachte der CTC sei kaputt. Deshalb 
verwende ich jetzt CMOS-ICs. Und es ist doch relativ unwahrscheinlich 
das beide CTCs kaputt sind!?
Beitrag #5511887 wurde von einem Moderator gelöscht.
Gast #5512145
Lesenswert?

Dieter W. schrieb:
> Harald N. schrieb:
>> Die vier CLK/TRG-Eingänge und der CLK-Eingang sind alle verbunden
>> und mit dem Systemtakt verbunden.
>
> Wenn ich das Mostek MK3882 Datenblatt richtig interpretiere darf der
> Takt an CLK/TRG maximal die halbe CLK Frequenz haben.
>
> Keine Ahnung ob das Problem damit zusammenhängt.

Davon hab ich noch nichts gehört, werde ich aber versuchen.
Gast #5512165
Lesenswert?

A. K. schrieb:
> Dieter W. schrieb:
>> Wenn ich das Mostek MK3882 Datenblatt richtig interpretiere darf der
>> Takt an CLK/TRG maximal die halbe CLK Frequenz haben.
>
> Als Timer programmiert wird der Systemtakt div 16 oder div 256
> verwendet, nicht der externe Eingang.

So hab ich das auch verstanden. Hab auch den systemtakt von den trigger 
Eingängen weggenommen. Geht trotzdem nicht. Ich hab keine Ahnung mehr, 
was ich noch probieren soll. Hab mir jetzt noch eine dritte ctc bestellt 
(z84c3006). Dann werd ich weitersehen. Da kann ich dann auch mit 6 MHz 
versuchen....
Gast #5512216
Lesenswert?

Versuche mal direkt nach ORG $0
eine richtig lange Verzögerung (100ms ?).

Wenn der Z80 aus dem Reset erwacht, dann heisst das
nicht, das auch die Peripherie schon wach ist ;-)
BTDT

Ausserdem solltest Du dem NMI eine Routine spendieren,
denn der lässt sich nicht abschalten.

Noch etwas zur Info:
Sorge für einen definierten Reset bei Unterspannung,
der Z80 bleibt sonst gnadenlos stehen.
#5512218
Lesenswert?

Harald N. schrieb:
> Den hab ich leider nur als Skizze auf Papier. Da werdet ihr mich sicher
> erwürgen wenn ich das präsentiere...

Aber sicher. Es besteht ein gewisses Risiko, dass du das nicht 
überlebst. Aber wenn du Antworten willst, wirst du das Risiko wohl 
eingehen müssen. Oder, noch besser, ein entsprechendes Programm nutzen, 
um ihn lesbar zu machen. Du hast die Wahl ;-)
(Firma: matzetronics) #5512224
Lesenswert?

Naja, die wichtigste Frage wird wohl sein, ob du da Bustreiber für Daten 
oder Adressbus benutzt, die unzulässige Timings produzieren.
Wenn das ein SBC ist, wo der Z80 ohne Buffering alles selber antreibt, 
wird es wohl daran weniger liegen. Ich halte es aber auch für eine gute 
Idee, einfach mal alle Kanäle zu initialisieren und die Signale zwischen 
CTC, PIO und CPU durchzupiepsen.

Dieter W. schrieb:
> Da steht in der Init ein Steuerwort von 0x15 - keine Ahnung was das
> jetzt im Einzelnen bedeutet.

Das würde zumindest heissen, das die Jungs keinen Softreset setzen.

Der CEPAC-80 (TMPZ84C015) treibt die CLK Inputs über einen Teiler von 13 
aus 4 MHz an und die CTCs im TMPZ funktionieren zumindest.
(Firma: matzetronics) #5512242
Lesenswert?

Hier noch ein Auszug aus dem CEPAC-80 Monitor. CTC3 wird hier zur 
Baudratenerzeugung benutzt. Hier der init aus dem alten Monitor der 
Kiste:
1
.equ    ctc3 , h'13
2
; a holds value between 1 and 6 for selecting the baudrate
3
initbd: ld   d,h'0
4
        ld   e,a
5
        ld   hl,baudtab
6
        add  hl,de
7
        ld   a,(hl) 
8
        ld   c,ctc3
9
        ld   b,b'01000101
10
        out  (c),b
11
        out  (c),a
12
        call inisio
13
        ret
14

15
baudtab: .db  h'0
16
          .db  d'175 
17
          .db  d'143
18
          .db  d'128
19
          .db  d'64
20
          .db  d'32
21
          .db  d'16

Mögl. ist es wichtig, das wirklich in zwei aufeinanderfolgenden Befehlen 
geschrieben wird. Schlagt mich nicht wg. der Syntax. Das ist ein uralter 
Assembler, dessen Name ich verdrängt habe.
Gast #5512257
Lesenswert?

karadur schrieb:
> Kann ich aber leider nicht testen, mein Z80 ist schon 20 Jahre in Rente

Ich habe noch Platinen mit CTC, aber es wäre schade um die Arbeit den 
Code zu analysieren: gerade ist hier wieder ein Moderator unterwegs, 
meine Posts ohne jeden erkennbaren Grund zu löschen. Vielleicht habe ich 
einfach zu viele Antworten gepostet und soll in Zukunft die Schnauze 
halten, wer weiss das schon, Begründung wird ja nie gegeben. Jedensfalls 
hat es mit Netiquette nicht das geringste zu tun.

Tut mir leid und Tschüss.

Georg
Gast #5512269
Lesenswert?

georg schrieb:
> karadur schrieb:
>> Kann ich aber leider nicht testen, mein Z80 ist schon 20 Jahre in Rente
>
> Ich habe noch Platinen mit CTC, aber es wäre schade um die Arbeit den
> Code zu analysieren: gerade ist hier wieder ein Moderator unterwegs,
> meine Posts ohne jeden erkennbaren Grund zu löschen. Vielleicht habe ich
> einfach zu viele Antworten gepostet und soll in Zukunft die Schnauze
> halten, wer weiss das schon, Begründung wird ja nie gegeben. Jedensfalls
> hat es mit Netiquette nicht das geringste zu tun.
>
> Tut mir leid und Tschüss.
>
> Georg

Dabei bist gerade du der Profi schlechthin...

Hab doch noch eine ctc zum testen gefunden (die sicher OK ist). Läuft 
nicht. Irgendwas bei der Hardware muss ich übersehen haben...
Gast #5512289
Lesenswert?

tommy schrieb:
> @ Harald N.:
>
> Hast Du meinen Post von 21:19 Uhr gelesen?

Hab ich.
NMI ist auf +5V und funkt somit nicht dazwischen.
Hab eine Reset Beschaltung eingebaut, die zu Beginn verzögert und auch 
bei brown-out reagiert.
Nachdem die PIO wach ist, denke ich, dass die CTC auch bereit ist. Die 
Verzögerung kann ich aber trotzdem noch versuchen.
Gast #5512518
Lesenswert?

Joerg F. schrieb:
> @Harald N
>
> Prinzipell würde ich erst mal die ganze Interrupt Geschichte (/INT und
> IEI/IEO) nicht für die ersten Tests verkabeln. Das verkompliziert die
> Schaltung auf jeden Fall. Mache ab besten den Aufbau schrittweise.
> Nicht, daß dir die SIO die CTC lahmlegt.
>
> Gruß Jörg

Das wäre noch eine Möglichkeit. Obwohl die PIO hat die niedrigste 
Priorität und funktioniert...
Mal schauen ob ich heute noch zum basteln komme...
Gast #5512544
Lesenswert?

Joerg F. schrieb:
> Irgendwie sieht auch dein CTC-Steuerwort komisch aus.
> Lies dir doch noch mal die Programmieranleitung des U857D durch:
> 
http://datasheet.datasheetarchive.com/originals/distributors/Datasheets-AE/DSA5GERT0000353.pdf
>
> Gruß Jörg

Passt doch?
Timer-Modus, es folgt eine Zeitkonstante, Timer soll reseten
Genau wie in der originalen Doku von Zilog.
Gast #5512766
Lesenswert?

Harald N. schrieb:
> A0/A1 passt
> Es geht ja gerade darum, dass an den Ausgängen kein Signal rauskommt. 0V

Wie misst Du das Signal? Der TO/ZC bei der Z80-CTC ist ein Puls-Signal,
1.5 x Systemtakt (bei Dir ca. 0,5 mikrosekunden). Danach ist TO/ZC 
wieder
auf Null.

Mein Z80-System (4MHz) macht 0.375 Mikrosekunden Pulse, die Init-
Sequenz ist:

;; setup CTC
;;  int OFF, timer ON, prescaler = 16, don't care ext TRG edge,
;;  start timer on loading constant, time constant follows,
;;  sw-rst, this a ctrl-command

--> ld a, b00000111

Gruesse

Th.
Gast #5513008
Lesenswert?

Folgenden Schnipsel habe ich mal zum CTC-Testen benutzt:
1
  title "init Z80"
2
;  init both PIOs to bitmode out
3
;  init CTC0  
4
  nolist
5

6
romend  equ  $0ffd
7
ram  equ  $1000
8
ramend  equ  $17ff
9

10
ctc10  equ  0    ; ctc 1
11
ctc11  equ  1
12
ctc12  equ  2
13
ctc13  equ  3
14

15
pio1da  equ  4    ; pio 1
16
pio1db  equ  5
17
pio1ca  equ  6
18
pio1cb  equ  7
19
pio2da  equ  8    ; pio 2
20
pio2db  equ  9
21
pio2ca  equ  10
22
pio2cb  equ  11
23

24
ctint  equ  128    ; enable int
25
ctmod  equ  64    ; 1 counter/0 timer
26
ctpre  equ  32    ; 1 256/0 16 prescaler [timer mode only]
27
ctedg  equ  16    ; 1 rising/0 falling
28
cttrg  equ  8    ; 1 clk/trg start/0 auto after constant
29
ctcon  equ  4    ; constant follow
30
ctres  equ  2    ; 1 software reset
31
ctctr  equ  1    ; 1 control/0 vector
32
  list
33

34
  data
35

36
  bss
37
  org $1000
38
ms10  db 1
39
sec  db 1
40
  
41
  code
42

43
  org 0
44
start  jp $100
45

46
  org $38
47
ctint0  ds 2
48
ctint1  ds 2
49
ctint2  ds 2
50
ctint3  dw ct13isr
51

52
  org $80
53
ct13isr  ex af,af'
54
  in a,[pio2da]    ; servicetime toggle pio2da.7
55
  or $80
56
  out [pio2da],a
57
  ld a,[ms10]    ; 1/100 sec
58
  out [pio2da],a    ; an port 2a
59
  inc a
60
  cp a,100
61
  jr c,l1
62
  ld a,[sec]    ; sec
63
  out [pio2db],a    ; an port 2b
64
  inc a
65
  ld [sec],a
66
  ld a,0
67
l1  ld [ms10],a
68
  in a,[pio2da]    ; servicetime toggle pio2da.7
69
  and $7f
70
  out [pio2da],a
71
  ex af,af'
72
  ei
73
  reti
74

75
  org $100
76
  ld sp,ramend+1
77
  ld a,0
78
  ld i,a
79
  im 2
80
  ei
81
  ld a,0
82
  ld [ms10],a
83
  ld a,0
84
  ld [sec],a
85
  ld a,ctint0    ; vectortabelle ab ctint0
86
  out [ctc10],a
87

88
ctcini  
89
  ld a,ctpre+ctcon+ctctr  ; 2.4576 MHz/256, timer, const follow
90
  out [ctc10],a
91
  ld a,3*32    ; 96  256*96=24576 -> 100 Hz
92
  out [ctc10],a
93
  ld a,ctpre+ctcon+ctctr  ; 2.4576 MHz/256, timer, const follow
94
  out [ctc11],a
95
  ld a,6*32    ; 192  256*192=24576 -> 50 Hz
96
  out [ctc11],a
97
  ld a,ctcon+ctctr  ; 2.4576 MHz/16, timer, const follow
98
  out [ctc12],a
99
  ld a,16     ; 16  2.4576/(16*16)=9600 -> 9600 Hz
100
  out [ctc12],a
101
  ld a,ctint+ctpre+ctcon+ctctr ; int enable, 2.4576 MHz/256, timer, const follow
102
  out [ctc13],a
103
  ld a,3*32    ; 96  256*96=24576 -> 100 Hz
104
  out [ctc13],a
105

106
pio1ini  ld a,$ff
107
  out [pio1ca],a
108
  ld a,0
109
  out [pio1ca],a
110
  ld a,$ff
111
  out [pio1cb],a
112
  ld a,0
113
  out [pio1cb],a
114

115
pio2ini  ld a,$ff
116
  out [pio2ca],a    ; pio 2
117
  ld a,0
118
  out [pio2ca],a
119
  ld a,$ff
120
  out [pio2cb],a
121
  ld a,0
122
  out [pio2cb],a
123

124
  jp loop
125

126
  org $200
127
loop  inc bc
128
  ld a,c
129
  out [pio1da],a
130
  ld a,b
131
  out [pio1db],a
132
  jr loop      ; 48 cycles in loop
133
        ; 24576000/48=51200 Hz
134
        ; pio1da: 25600 12800 6400 3200  1600 800 400 200
135
        ; pio1db: 100 50 25 12.5  6.25 3.125 1.5625 0.78125
136

137
  org romend
138
  jp start

Damit tat die CTC anstandlos...
Gast #5513075
Lesenswert?

Vielleicht hilft das Folgende, Programmschnipsel aus den 80er Jahren für 
Z80 und CTC. Auf Hassposts wegen des Programmierstils gehe ich bestimmt 
nicht ein, aber die Software hat mehr als 20 Jahre lang funktioniert.
1
CTC Ports
2

3
  0040                          BAUD    EQU     40H     ;CTC TIMER
4
  0041                          TIMERA  EQU     BAUD+1
5
  0042                          TIMERB  EQU     BAUD+2
6
  0043                          TIMERC  EQU     BAUD+3
7

8
Tabelle zur Initialisierung
9

10
  019C    21 00                 INITAB: DEFB    MODC,0          ;SYNC
11
  .....
12
  01C8    40 08                         DEFB    BAUD,8          ;INT VECTOR
13
  01CA    40 07                         DEFB    BAUD,7          ;START
14
  01CC    40 0C                         DEFB    BAUD,B1200      ;1200 BAUD
15
  01CE    41 A7                         DEFB    TIMERA,0A7H     ;TIMER MODE
16
  01D0    41 17                         DEFB    TIMERA,23       ;TIME 1.6 MSEC
17
  01D2    42 A7                         DEFB    TIMERB,0A7H     ;/256, INT
18
  01D4    42 00                         DEFB    TIMERB,00       ;17.8 MSEC
19
  01D6    43 47                         DEFB    TIMERC,47H      ;COUNTER
20
  01D8    43 FF                         DEFB    TIMERC,0FFH     ;256
21
  01DA    FF                            DEFB    0FFH            ;TABLE END
22

23
Baudraten
24

25
                                ;       BAUD RATE CONSTANTS FOR 3.6 MHZ
26
                                ;
27
  0082                          B110    EQU     130     ;110
28
  0060                          B150    EQU     96      ;150
29
  0030                          B300    EQU     48      ;300
30
  0018                          B600    EQU     24      ;600
31
  000C                          B1200   EQU     12      ;1200
32
  0006                          B2400   EQU     6       ;2400
33
  0003                          B4800   EQU     3       ;4800

Hoffe das entgeht der Löschung,

Georg
#5513650
Lesenswert?

Bevor alle Stricke reisen, mal ne ganz blöde Idee.
Breadboard neu?
Sicher das alle ICs auch wirklich richtig an der Stromversorgung hängen 
und nicht fremd gespeist werden?
Es gib einige Breadboard bei denen die Stromschienen NICHT durchgängig 
sind, sonder auch in größere Segmente geteilt sind. Erkennbar an einem 
etwas größerem Abstand, zwischen den einzelnen Blöcken.
#5513663
Lesenswert?

Harald N. schrieb:
> Mann, dann würden die entsprechenden Signale von nicht dort ankommen.
> Ich kann richtig messen....

Ich wollte die wahrlich nicht zu nahe treten, nur bin ich nicht vor Ort 
und es ist mittlerweile ziemlich viel Prosa. Und wie geschrieben "Bevor 
alle Stricke reisen, mal ne ganz blöde Idee."
Bin doch nur ein gebranntes Kind. :)
Gast #5513664
Lesenswert?

A. K. schrieb:
> Harald N. schrieb:
>> Mann, dann würden die entsprechenden Signale von nicht dort ankommen.
>> Ich kann richtig messen....
>
> Wenn Hardware und Software korrekt sind, aber es trotzdem nicht
> funktioniert, dann sind Hardware oder Software nicht korrekt, oder es
> funktioniert. ;-)
>
> Also nicht über blöde Fragen klagen.

Aber am breadboard befindet sich genau die schaltung, die ich auf Papier 
habe. Und da sind anscheinend keine Fehler drinnen.
Eine selbstgetestete Schaltung von euch hab ich noch nicht.
Gast #5513669
Lesenswert?

Harald N. schrieb:
> EinWort schrieb:
>> IEI muss bei allen Z80-ICs immer beschaltet werden, auch wenn man keine
>> Interrupts nutzt
>
> Macht doch keinen Sinn? Wie wollen sich die ICs beeinflussen wenn sie
> nicht über die daisy chain verbunden sind. Ausserdem ist der CPU Int auf
> high gelegt

Habs trotzdem versucht. Ohne Erfolg.

@all: ich will niemanden zu nahe treten
Gast #5513687
Lesenswert?

Harald N. schrieb:
> Harald N. schrieb:
>> EinWort schrieb:
>>> IEI muss bei allen Z80-ICs immer beschaltet werden, auch wenn man keine
>>> Interrupts nutzt
>>
>> Macht doch keinen Sinn? Wie wollen sich die ICs beeinflussen wenn sie
>> nicht über die daisy chain verbunden sind. Ausserdem ist der CPU Int auf
>> high gelegt
>
> Habs trotzdem versucht. Ohne Erfolg.
Die ICs beeinflussen sich selbst, wenn man Eingänge einfach offen lässt. 
Der erste IEI-Eingang in einer Interrupt-Kette muss auf HIGH liegen.
Gast #5513703
Lesenswert?

Die beiden Z80-Bibeln waren/sind:

Rodney Zack, Progammierung des Z80
James W.Coffron, Z80 Applications

Habe ich beide im Regal und eben mal reingeschaut.
Die CTC-Kapitel sind leider viel zu lang zum scannen,
aber bei einer gezielten Frage schaue ich gerne mal rein.
Immerhin wird die CTC dort recht ausführlich besprochen.

https://www.booklooker.de/B%C3%BCcher/Angebote/autor=James+W.+Coffron&titel=Z80+Anwendungen

Leider in Gold aufgewogen, vielleicht woanders günstiger...
Gast #5513705
Lesenswert?

Jim Beam schrieb:
> Die beiden Z80-Bibeln waren/sind:
>
> Rodney Zack, Progammierung des Z80
> James W.Coffron, Z80 Applications
>
> Habe ich beide im Regal und eben mal reingeschaut.
> Die CTC-Kapitel sind leider viel zu lang zum scannen,
> aber bei einer gezielten Frage schaue ich gerne mal rein.
> Immerhin wird die CTC dort recht ausführlich besprochen.
>
> 
https://www.booklooker.de/B%C3%BCcher/Angebote/autor=James+W.+Coffron&titel=Z80+Anwendungen
>
> Leider in Gold aufgewogen, vielleicht woanders günstiger...

Hab ich beide. Und mein pio und ctc test code stammt genau aus coffrons 
Buch ;-)
Und im Grunde auch die schaltung...
Persönliche Seite #5513711
Lesenswert?

Harald N. schrieb:
> Würde mir jemand von euch einen Schaltplan mit CPU, ctc, pio, sio, Rom,
> RAM zur Verfügung stellen, den ihr selbst als funktionierende getestet
> habt. Idealerweise gleich mit Testprogramm...

Dieses System hatte ich Anfang der 80ziger aufgebaut. Habe ich es schon 
vor jahrzehnten verschrottet :-(
Angehängte Dateien:
Gast #5513714
Lesenswert?

Joe G. schrieb:
> Harald N. schrieb:
>> Würde mir jemand von euch einen Schaltplan mit CPU, ctc, pio, sio, Rom,
>> RAM zur Verfügung stellen, den ihr selbst als funktionierende getestet
>> habt. Idealerweise gleich mit Testprogramm...
>
> Dieses System hatte ich Anfang der 80ziger aufgebaut. Habe ich es schon
> vor jahrzehnten verschrottet :-(

Danke
Gast #5513731
Lesenswert?

> Hab jede einzelne Verbindung gemessen. Mehrmals. Von ausgangspin zu
> endpin.

Pruefe bitte noch mal, ob die D0-D7 richtig angeschlossen wurde
(direkt CPU <-> CTC). Ich gehe aber davon aus, dass Du mehr als
einmal geprueft hast. Hast Du mal Chip-Enable mit dem Scope
geprueft? Die Schaltung ist so einfach, da muss ein simpler
Fehler sein.

Andere Moeglichkeit: Lese den Counter aus und zeige den Inhalt auf
der PIO an.

http://www.z80.info/homebrew.htm ist Dir bekannt?

Gruesse

Th.
Beitrag #5513825 wurde von einem Moderator gelöscht.
Gast #5513835
Lesenswert?

Aus dem Gedächtnis, Unterlagen habe ich vor nicht allzu langer Zeit 
entsorgt:

Die CTCs sind wohl Sensibelchen, meine CPU-Karte hat nach Umstellung auf 
CMOS-Z80 nicht mehr funktioniert, nach Versuchen arbeitete die CMOS-CPU 
nur mit MOS-CTCs zusammen zuverlässig (das hing auch vom Hersteller der 
CPUs ab). Ich habe daher weitere Karten mit CMOS-Z80CPU, aber mit 
Z80BCTC ausgeliefert, das hat immer funktioniert. Den Grund konnte ich 
nie finden, aber was solls wenns tut.

Georg
Persönliche Seite #5514685
Lesenswert?

Ich denke Harald hat es schon richtig beschaltet. Das Z80 System kann 
natürlich auch ohne Interrupt verwendet werden. dazu muss der CTC nur 
bei IEI auf High gesetzt werden. IED und /INT bleibt dann offen. Bei der 
CPU wird /INT auf High gelegt. Nun kann der CTC natürlich kein Interrupt 
mehr auslösen, als Timer muss er jedoch trotzdem arbeiten.
Gast #5514702
Lesenswert?

Joe G. schrieb:
> Ich denke Harald hat es schon richtig beschaltet. Das Z80 System kann
> natürlich auch ohne Interrupt verwendet werden. dazu muss der CTC nur
> bei IEI auf High gesetzt werden. IED und /INT bleibt dann offen. Bei der
> CPU wird /INT auf High gelegt. Nun kann der CTC natürlich kein Interrupt
> mehr auslösen, als Timer muss er jedoch trotzdem arbeiten.

Danke für den Kommentar.
Hast du eine Idee was da los ist?
#5514739
Lesenswert?

georg schrieb:
> Die CTCs sind wohl Sensibelchen,

Kann ich nur bestätigen. Ich weiß aber auch den Grund nicht mehr.

Wenn ich die Initialisierungen in meinen vielen Quelltexten durchsehe, 
istz immer die Sequenz dabei:
Kanal 0 rückestzen mit 03H
InT-Vector laden (auch wenn kein INT benutzt wird)
Kanal 1 Betriebsart setzen mit Steuerbyte 05H für Zeitgeber
Zeitkonstante z.B. für Baudrate nachladen
1
;==========================================================================
2
;  Hardware initialization table
3
;  Byte1  Anzahl
4
;  Byte2  Portadresse
5
;  Byte3... Byte3+Byte1  Steuerbytes
6
;  Tabellenende mit Byte1=0
7

8
tab_i_po:
9
  .DB  1  ;Anzahl Steuerbytes
10
  .DB  wdtmr  ;Watchdog mode register
11
  .DB  7Bh  ;Watchdog anhalten
12

13
  .DB  1  ;Anzahl
14
  .DB  wdtcr  ;Watchdog control register
15
  .DB  0B1h
16

17
  .DB  1  ;Anzahl
18
  .DB  intpr  ;Interruptprioritaet
19
  .DB  0  ;CTC-SIO-PIO
20

21
;  .....................................  
22
  ;CTC
23
;  .....................................  
24
  .DB  2    ;Anzahl Steuerbytes
25
  .DB  ctc_0    ;an Kanal 0
26
  .DB  03h    ;Ruecksetzen
27
  .DB  (invet)%256  ;
28
  ;hier ist der L-Teil des Interruptvectors fuer Kanal 0
29
  ;einzutragen, die anderen Kanaele folgen unmittelbar
30

31

32
  .DB  2    ;Anzahl Steuerbytes 
33
  .DB  u_ctc    ;An Kanal 1
34
  .DB  00000101B  ;Betriebsart
35
  ;  +--------------- 0=no INT
36
  ;   +-------------- 1=counter 0=timer
37
  ;    +------------- prescale by 0=16 1=256
38
  ;     +------------ clock on rising edge (not used)
39
  ;      +----------- auto trigger
40
  ;       +---------- TC follows
41
  ;        +--------- Reset/Run
42
  ;         +-------- Kennzeichen fuer Steuerword
43
  .DB  tk3    ;TC fuer Baudrate
44

45
;  .....................................  
46
  ;SIO
47
;  .....................................

(ich glaube, es ist vom CEPAC80)
#5514938
Lesenswert?

Auch wenns nur ein Stochern im Nebel ist, so wäre doch noch die 
Möglichkeit, daß der CTC dein Takt nicht so gefällt. Da der Z80 
insgesamt auch mit niedriegeren Takte läuft, würde ich dir mal ein 
Absenken auf 1MHz oder weniger und einen Taktgenerator auf 74HCT oder 
74LS Basis empfehlen. Die 74HC Serie war auch schon bei aderen z80 
Projekten der Showstopper.

Gruß Jörg
Gast #5514959
Lesenswert?

HALLO,
was hast du denn für eigenartiges "/Reset" ?
Erst einen MAX690 spendieren, und dessen sauberes Ausgangssignal dann 
mit 100nF kaputtmachen??
Und gelegentlich noch kurzschliessen???
Da weiss man nicht, was einem mehr schmerzen soll: Der MAX690, der 
Kondensator oder der Taster. Oh' weh'

Dein Schaltbild hier
Beitrag "Re: Z80 SBC Problem."
https://www.mikrocontroller.net/attachment/372920/IMG_20180806_212238.jpg

Gruss
Gast #5514967
Lesenswert?

Erich schrieb:
> HALLO,
> was hast du denn für eigenartiges "/Reset" ?
> Erst einen MAX690 spendieren, und dessen sauberes Ausgangssignal dann
> mit 100nF kaputtmachen??
> Und gelegentlich noch kurzschliessen???
> Da weiss man nicht, was einem mehr schmerzen soll: Der MAX690, der
> Kondensator oder der Taster. Oh' weh'
>
> Dein Schaltbild hier
> Beitrag "Re: Z80 SBC Problem."
> https://www.mikrocontroller.net/attachment/372920/IMG_20180806_212238.jpg
>
> Gruss

Siehe Datenblatt Seite 6
Für einen manuellen Reset gehört der Taster und der 100n genau dorthin.
Persönliche Seite #5514996
Lesenswert?

Harald N. schrieb:
> Hast du eine Idee was da los ist?

Ich würde zunächst untersuchen, ob die CTC überhaupt funktioniert.
Also testen ob Timer Mode und Counter Mode funktionieren. Da der Timer 
Mode bei dir nicht geht, untersuche mal ob wenigstes der Counter Mode 
geht. Im Timer Mode könntest du noch versuchen extern den Counter über 
den Trigger zu starten (Bit 3 auf high – Time Trigger). Wenn all das 
nicht fruchtet, dann ist etwas mit der Ansteuerung faul. Kannst du den 
Takt runtersetzen? Eine Möglichkeit ist noch eine kleine Single-Step 
Logik an den Z80 und dann tatsächlich Schritt für Schritt…

Im Anhang meine Schaltung für so eine Logik auf dem Z180.
Angehängte Dateien:
#5515033
Lesenswert?

A. K. schrieb:
> Schon versucht, den Software Reset rauszunehmen, oder getrennt von der
> Channel-Control durchzuführen?

Würde ich auch so sehen:

Bit 1 = 1.
Counting and/or timing operation is terminated and the channel is reset. 
This is not a stored condition. *The bits in the Channel Control 
register are unchanged*. If bits 1 and 2 are set to 1, the channel 
resumes operation upon loading a time constant.
Gast #5515048
Lesenswert?

Erich schrieb:
> HALLO,
> was hast du denn für eigenartiges "/Reset" ?
> Erst einen MAX690 spendieren, und dessen sauberes Ausgangssignal dann
> mit 100nF kaputtmachen??
> Und gelegentlich noch kurzschliessen???
> Da weiss man nicht, was einem mehr schmerzen soll: Der MAX690, der
> Kondensator oder der Taster. Oh' weh'
>
> Dein Schaltbild hier
> Beitrag "Re: Z80 SBC Problem."
> https://www.mikrocontroller.net/attachment/372920/IMG_20180806_212238.jpg
>
> Gruss

Es gibt keine Vorschuss Lorbeeren aber ich denke zu hattest recht. Ich 
habe zwar zur Zeit irgendein Monitor Programm drauf, und die schaltung 
ist schon längst nicht mehr die, welche ich skizziert habe.
ABER: 100nF raus, Strom an, multimeter frequenzmessung an den to pins 
UND da kommt was raus!!!!!
Ich werde am Nachmittag wieder auf meine schaltung umbauen und mein 
Testprogramm Rauf laden um das genauer untersuchen zu können.

Und kann mir das jetzt jemand auch erklären. Das reset Signal war 
nämlich immer schön auf high.

Und vielen Dank Erich!
Gast #5515059
Lesenswert?

Michael A. schrieb:
> Hallo,
>
> die benutzte Schaltung des Reset mit Taster und C steht genau so auf
> Seite 6 des Datenblattes des Maxim690.
>
> Was ist also daran falsch ?
>
> Gruß,
> Michael

Daß das Teil nichts taugt, das ist falsch.

Schaust die hier im Nachbau von Linear Technology (jetzt schon lange zu 
Analog Devices gehörend)
http://www.analog.com/media/en/technical-documentation/data-sheets/690ff.pdf
Seite 15,
da erklären sie warum mind. zusätzlich ein 100R rein muß,
und das das Ding sowieso besser durch einen LTC1235 ersetzt gehört.
WEIL der mechanische Reset durch den Taster sonst eben keinen richtigen 
Reset macht; da könnte man das Ding gleich weglassen und durch einen 
hochohmigen Pullup ersetzen.

MAX690, Seit 9, links unten:
" RESET has  an  internal  3μA  pullup"
Ich krieg' einen (Lach-) Anfall !!
Ein hochohmiger Ausgang, doch open drain.
Entspricht quasi einen > 100 kOhm Widerstand @5V.

MAX690 Seite 6 rechts oben:
"The  manual  reset  switch  and
the  0.1μF  capacitor  connected  to  the  reset  bus  can  be
omitted if manual reset is not needed. "

Das Ding hatte ich selbst nie verwendet, sondern nur immer LTC1232 (den 
dann wiederum Maxim als MAX1232 nachgebaut hat).

Wenn er jetzt doch drinbleiben soll, dann bitte das /RESET über 2 
hintereinandergeschaltete Cmos Inverter (74HC04) oder noch besser 
Schmitt-Trigger 74HC132 ergänzen.
Um dem armen Taster denn 100R spendieren. Seine Goldschicht haste aber 
inzwischen schon weggebrannt.

Gruss
Gast #5515112
Lesenswert?

Erich schrieb:
> Michael A. schrieb:
> Wenn er jetzt doch drinbleiben soll, dann bitte das /RESET über 2
> hintereinandergeschaltete Cmos Inverter (74HC04) oder noch besser
> Schmitt-Trigger 74HC132 ergänzen.
> Um dem armen Taster denn 100R spendieren. Seine Goldschicht haste aber
> inzwischen schon weggebrannt.
>
> Gruss

Funktioniert! Danke nochmal!
Angehängte Dateien:
Gast #5515519
Lesenswert?

Oscale schrieb:
> Toll das der Hinweis schon längst kam.
> Du hast mit Deinem Oszi viel gemessen, aber nicht die grundlegenden
> Dinge geprüft.
>
>
>
> Autor: Oscale (Gast)
> Datum: 08.08.2018 12:31
> Reset war auch immer tückisch, der z 80 macht dann was er will.
> Nimm nen reset Controller oder eine diskrete Beschaltung..

War ja auch ein ganz konkreter Hinweis....
#5516033
Lesenswert?

Jörg W. schrieb:
> Zumal es ja gar nicht der Z80 selbst war, sondern wohl eher der CTC,
> der mit dem Reset-Impuls nicht klar kam.

Das Problem ist eher, dass jeder Baustein seine individuelle Schwelle 
hat, an der er den Reset als erledigt ansieht. Die hochohmige Schaltung 
mit dem großen Kondensator und die daraus resultierende langsame Flanke 
führen dazu, dass der CTC noch im Reset ist, während der Z80 schon 
loslegt. Wenn dann der CTC auch aktiv wird, ist schon alles gelaufen.
Moderator Persönliche Seite #5516095
Lesenswert?

Georg G. schrieb:
> Die hochohmige Schaltung mit dem großen Kondensator und die daraus
> resultierende langsame Flanke führen dazu, dass der CTC noch im Reset
> ist, während der Z80 schon loslegt.

Klar, logische Erklärung.

Reset-Controller hatte ich damals nicht, Pushbutton brauchte ohnehin
eine Entprellung (über Flipflop), im Zuge der entsprechenden Logik
hing dann auch gleich der Power-on-Reset mit dran.
(Firma: --) #5594011
Lesenswert?

Hallo zusammen, habe soeben gelesen das hier sich einige mit dem Z80 und 
darum beschäftigen. Hatte auch einige anlauf probleme die ich noch selbt
mit Datenblätter in den Griff bekommen habe.
Um mir ein Bild zu mache war ich auch in Internet auf der suche und 
landete
hier. Würde gerne mehr mit meinem Z84c15 System machen und einige Ideen 
aufgreifen. Übrigens die CTC läuft jetzt bei mir Teiler auf 9600Baud.
(Firma: matzetronics) #5594144
Lesenswert?

Hansjörg W. schrieb:
> Würde gerne mehr mit meinem Z84c15 System machen und einige Ideen
> aufgreifen.

Meinst du den Toshiba TMPZ84C015? Da wirst du die Probleme des TE nicht 
haben, denn der Toshiba integriert ja so gut wie alle übliche Peripherie 
eines Z80 SBC auf einem Chip und damit sind solche Reset Probleme so gut 
wie ausgeschlossen.
Ich habe den damals auf dem CEPAC 80 Board der c't benutzt und habe 
damit z.B. die Steuerung eines Grundig SAT Receivers ersetzt mit 
zusätzlichen Spezialitäten.
Tatsächlich liegen hier noch ein oder zwei unverlötete Chips, die ich zu 
verwenden gedachte, bis ich zur MCS51 Fraktion übertrat.
(Firma: --) #5594616
Lesenswert?

Hi Matthias S.
Ja auf meinen 5 Bords sind 1Toshiba Z84c015-10 und 3 Zilog Z84c150-10
beide verhalten sich gleich. Und eins ist DIN A4 große und gehörte mal 
zu einem Auswerte Server da sind noch alle Zilog Bausteine einzelnd 
verbaut.
Um überhaupt damit arbeiten zu können, habe ich von meinem IT-Lehrer 
damals
CPM bekommen und mit einem MZ80 Sharp System angepasst.
Jetzt kann ich auch Programme selbst auf meinem System schreiben.
Kleiner Projekte habe ich schon gemacht. Würde aber mal ein größeres 
angehen.
Hardware wäre dafür genügend da für Änderungen/Erweiterungen.
Derzeit schreibe ich keine Tools um mein System zu optimieren.
Kleine Steuerungen im Haus und für Solar betrieb.
(Firma: --) #5594805
Lesenswert?

Hi Mathias S.
Habe gerade ein Interrupt-Timer mit CTC3 geschrieben.
Der ein 500µs puls = 2KHz Interrupt auslösen und für Programme
als Timer fungiert. Dabei decrementiere ich im SRAM ein vorgegebenen
Wert jedesmal -1 bis auf 00h (500µs * SRAM = Timer). z.B. für ein
Steppermotor. Diese Tools setze ich dann bei bedarf ein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren