Forum: Mikrocontroller und Digitale Elektronik Z80 SBC Problem.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Harald N. (haraldn)


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

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Lesenswert?

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 ?

von Harald N. (haraldn)


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...

von (prx) A. K. (prx)


Lesenswert?

Schon versucht, den Software Reset rauszunehmen, oder getrennt von der 
Channel-Control durchzuführen?

von Harald N. (haraldn)


Lesenswert?

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

Jetzt gerade beides versucht. Hat leider nichts gebracht...

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Chip-Select mal mit dem Oszi geprüft?

von Harald N. (haraldn)


Lesenswert?

Ja, alle Signale habe ich bereits geprüft. Und sie sind alle da.

Beitrag #5511834 wurde vom Autor gelöscht.
von (prx) A. K. (prx)


Lesenswert?

Zusammenfassung:
- Hardware ok,
- Software ok,
- funktioniert nicht.
Eines davon stimmt nicht. Welches?

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Ich kenne die CTC Programmiersequenz nicht, aber du schreibst beide Male 
in CTC1... muss das so?

von R. M. (Gast)


Lesenswert?

Soweit ich mich erinnern kann, kommen aus den CTC-Übertragsausgängen, 
nur relativ schmale Nadeln raus.
Nicht das vielleicht doch, alles ok ist...

von Harald N. (haraldn)


Angehängte Dateien:

Lesenswert?

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

von Harald N. (haraldn)


Lesenswert?

R. M. schrieb:
> Soweit ich mich erinnern kann, kommen aus den CTC-Übertragsausgängen,
> nur relativ schmale Nadeln raus.
> Nicht das vielleicht doch, alles ok ist...

Im Logik-Analyzer sollte ich den Takt doch sehen. Solange das System 
läuft sollten dort viele "Nadeln" mit 5,9kHz erscheinen.

von Harald N. (haraldn)


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!?

: Bearbeitet durch User
Beitrag #5511887 wurde vom Autor gelöscht.
von karadur (Gast)


Lesenswert?

Ich denke dein Steuerwort sollte 0x03 sein. Continous operation

von Harald N. (haraldn)


Lesenswert?

karadur schrieb:
> Ich denke dein Steuerwort sollte 0x03 sein. Continous operation

Das zusätzliche Bit Nummer 2 sagt ja nur, dass ich als nächstes die 
Zeitkonstante setzen will.

von karadur (Gast)


Lesenswert?

Vertippt: meinte 0x05

von Harald N. (haraldn)


Lesenswert?

OK. Das habe ich schon probiert = ohne soft reset

von karadur (Gast)


Lesenswert?

Hallo

mit dem Softreset wird die Timerfunktion laut Datenblatt gestoppt.

Kann ich aber leider nicht testen, mein Z80 ist schon 20 Jahre in Rente.

von Harald N. (haraldn)


Lesenswert?

Wie gesagt, ich hab es getestet. Funktioniert auch nicht. Bin ratlos...
Vlt versuche ich doch erstmal die sio...

von Dieter W. (dds5)


Lesenswert?

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.

von karadur (Gast)


Lesenswert?


von Harald N. (haraldn)


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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Harald N. (haraldn)


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....

von G. H. (schufti)


Lesenswert?

also lt. Zilog DB sollte
Steuerwort 0x07 passen und der timer mit Schreiben der Zeitkonstante 
starten
der Ausgangspuls an cz/to ~1.5 sysclk Zyklen sein
die Frequenz an clk/trg max sysclk/2 sein

möglicher Weise die CS vertauscht? Initialisiere mal alle 4 Kanäle ...

Edit: war vorher mit den Bits verrutscht.

: Bearbeitet durch User
von Harald N. (haraldn)


Lesenswert?

Also ich bin mir ziemlich sicher, dass die Programmierung richtig 
ist....
Hab zwischenzeitlich auch versucht den ctc als counter zu programmieren. 
Zur Sicherheit mit dem kleinsten verfügbaren takt (143 Hz von 74hc4060). 
Geht auch nicht.....

Mit der buslast wird das doch noch nichts zu tun haben?

von (prx) A. K. (prx)


Lesenswert?

Harald N. schrieb:
> Mit der buslast wird das doch noch nichts zu tun haben?

Statt andere mit Fragen zu plagen, die sie nicht beantworten können, 
wärs höchste Eisenbahn, mal den kompletten Schaltplan zu präsentieren.

von Harald N. (haraldn)


Lesenswert?

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

von Teo D. (teoderix)


Lesenswert?

Harald N. schrieb:
> Hallo!
>
> Ich mir hier einen Z80 SBC auf dem Breadboard aufgebaut

Ich glaube, dazu müsste er seinen Schädel, auf einen Scanner legen. ;)

von tommy (Gast)


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.

von (prx) A. K. (prx)


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 ;-)

von Dieter W. (dds5)


Lesenswert?

Ich hab gerade mal einen alten Programmschnipsel ausgegraben bei dem der 
CTC als Taktgenerator für einen UART verwendet wird.
Da steht in der Init ein Steuerwort von 0x15 - keine Ahnung was das 
jetzt im Einzelnen bedeutet.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

: Bearbeitet durch User
von Harald N. (haraldn)



Lesenswert?

Gut, köpft mich...

Die ganze Schaltung hab ich schon durchgemessen. Und auch schon alle 
Kanäle initialisiert.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

: Bearbeitet durch User
von georg (Gast)


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

von Harald N. (haraldn)


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...

: Bearbeitet durch User
von Dieter W. (dds5)


Lesenswert?

georg schrieb:
> gerade ist hier wieder ein Moderator unterwegs,
> meine Posts ohne jeden erkennbaren Grund zu löschen ...

In diesem Faden ist kein einziger von einem Mod gelöschter Beitrag.

von tommy (Gast)


Lesenswert?

@ Harald N.:

Hast Du meinen Post von 21:19 Uhr gelesen?

von Harald N. (haraldn)


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.

von Thomas W. (dbstw)


Lesenswert?

Moin, -

hast Du vielleicht A0/A1 vertauscht? Gucke bitte mal,
ob Du ein Signal an pin 7 bis 9 (T0/ZC Kanal 0-2)
siehst.

Die Initialisierung

>    LD A, $07      ; Steuerwort, Timer, Teiler 16
>    OUT (CTC1), A    ; Channel 1

>    LD A, $1A      ; Zeitkonstante (26d)
>    OUT (CTC1), A    ; Channel 1

sieht OK aus.

Gruesse

Th.

von Harald N. (haraldn)


Lesenswert?

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

von Osca (Gast)


Lesenswert?

Ich habe gerade den Fehler gefunden!

Es liegt am Breadboard!!

von Joerg F. (felge1966)


Lesenswert?

@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

von Harald N. (haraldn)


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...

von Joerg F. (felge1966)


Lesenswert?

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

von Harald N. (haraldn)


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.

von Markus F. (mfro)


Lesenswert?

ist Osca nun Haraldn oder nicht?

von Harald N. (haraldn)


Lesenswert?

Nein ist er nicht. Bin kein troll...

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Harald N. schrieb:
> Nur kurz zum Aufbau: Auswahl der IO-Bausteine erfolgt über zwei
> Adressleitungen und einen 74HC138 (belegt mit A2, A3 und GND).

Hast du /CS des CTC mit IORQ verknüpft? Ich sehe keine Schaltung dazu 
hier im Beitrag.

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

Lesenswert?

In etwa so... nur mit deinen Adressen.

von Thomas W. (dbstw)


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.

von Dieter W. (dds5)


Lesenswert?

Joe G. schrieb:
> Hast du /CS des CTC mit IORQ verknüpft? Ich sehe keine Schaltung dazu
> hier im Beitrag.

Doch, IORQ geht an den E1 des 138 Adressdecoders.

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Dieter W. schrieb:
> Doch, IORQ geht an den E1 des 138 Adressdecoders.

Ja stimmt, übersehen :-(

von (prx) A. K. (prx)


Lesenswert?

Ich habe eher den Eindruck, dass am Dekoder das /M1 Signal fehlt, um 
nicht auf IACK Zyklen zu reagieren.

von Route_66 H. (route_66)


Lesenswert?

Was wird denn angezeigt, wenn du die einzelnen Zählregister des CTC 
zurückliest?

von Harald N. (haraldn)


Lesenswert?

Me muss m1 nicht an den Decoder?! Warum?
Iorq am Decoder ist nicht vorhanden.
Am Ausgang soll bei der Programmierung nicht nur ein puls kommen sondern 
eine pulsfolge von 5,9 kHz. Das ist die Eigenschaft des timers bei der 
Programmierung.
Rücklesen müsste ich mal probieren. Hab allerdings noch keinen Monitor 
am System.

von (prx) A. K. (prx)


Lesenswert?

Vergiss es. M1 hat der CTC ja selbst.

: Bearbeitet durch User
von Route_66 H. (route_66)


Lesenswert?

Harald N. schrieb:
> Rücklesen müsste ich mal probieren. Hab allerdings noch keinen Monitor
> am System.

Du hast aber ein PIO; mach da einfach 8 LEDs ran.

von ./. (Gast)


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...

von georg (Gast)


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

von Harald N. (haraldn)


Lesenswert?

Wenn ich die Steuerworte sehe ist das eh das, was ich auch mache. Nur 
verwendest du prescaler 256 und schaltest interrupts ein...
Und 47h müsste der Zähler sein. Habe ich auch schon versucht.

: Bearbeitet durch User
von Harald N. (haraldn)


Lesenswert?

Hab jetzt die interrupt Beschaltung rausgenommen und CPU Int über 10k 
auf 5V gelegt.
Also das war es auch nicht...

von Harald N. (haraldn)


Lesenswert?

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...
Dann finde ich Vlt durch Vergleich den Fehler.

von Osca (Gast)


Lesenswert?

Das mit dem Breadbord ist ernst gemeint, wäre nicht das 1. Mal.
Die Dinger sind tückisch und das gesamte Fehlerbild ist abstrus genug!

von Osca (Gast)


Lesenswert?

Lochraster, Lötkolben und das läuft.

Und das Z80 Buch von Rodnay Zacks gibt es für ein paar € in der Bucht.

von Osca (Gast)


Lesenswert?

http://www.z80.info/zip/um0081.pdf
http://www.z80.info/z80core3.htm

Eingänge NIEMALS unbeschaltet lassen!
Direkt am PIN terminieren!

Dein Breadboard ist ne prima Antenne.

von Harald N. (haraldn)


Lesenswert?

Das Buch hab ich und da geht es um die Programmierung.
Ich vermesse immer von pin zu pin. Breadboard Fehler würde ich da 
bemerken

von EinWort (Gast)


Lesenswert?

Ist der 1. IC in der Interruptkette der CTC? Liegt der IEI-Eingang des 
1. IC in der Interruptkette auf definieretm Pegel? Das könnte das 
Verhalten nämlich erklären.

von Harald N. (haraldn)


Lesenswert?

Mittlerweile habe ich die gesamte Interrupt Beschaltung weggenommen. 
Problem bleibt

von (prx) A. K. (prx)


Lesenswert?

Osca schrieb:
> http://www.z80.info/z80core3.htm

Ich verstehe ja, wieso man /RFSH im Speicherdekoder berücksichtigt. Aber 
weshalb im I/O-Dekoder? Copy-and-Paste?

: Bearbeitet durch User
von EinWort (Gast)


Lesenswert?

IEI muss bei allen Z80-ICs immer beschaltet werden, auch wenn man keine 
Interrupts nutzt

von Teo D. (teoderix)


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.

von Harald N. (haraldn)


Lesenswert?

Mann, dann würden die entsprechenden Signale von nicht dort ankommen. 
Ich kann richtig messen....

von Harald N. (haraldn)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

: Bearbeitet durch User
von Teo D. (teoderix)


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. :)

von Harald N. (haraldn)


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.

von Harald N. (haraldn)


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

von Teo D. (teoderix)


Lesenswert?

Harald N. schrieb:
> Aber am breadboard befindet sich genau die schaltung, die ich auf Papier
> habe.

Dieser GLAUBE, ist wohl der häufigste Fehler in Bezug auf Breadboards!

von Harald N. (haraldn)


Lesenswert?

Teo D. schrieb:
> Harald N. schrieb:
>> Aber am breadboard befindet sich genau die schaltung, die ich auf Papier
>> habe.
>
> Dieser GLAUBE, ist wohl der häufigste Fehler in Bezug auf Breadboards!

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

von EinWort (Gast)


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.

von Teo D. (teoderix)


Lesenswert?

Harald N. schrieb:
> Hab jede einzelne Verbindung gemessen. Mehrmals. Von ausgangspin zu
> endpin.

Davon bin ich auch ausgegangen. Nur ich kanns halt nich lassen, biss ich 
obigen Satz zu lesen bekommen. :/
Also noch mal: Auch das Breadboard selbst mal prüfen, ob da auch alles 
wie gedacht verbunden ist.

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Vielleicht sind die CTCs doch defekt...

von Harald N. (haraldn)


Lesenswert?

Alle drei?
Gibt es eine Möglichkeit die CTC allein auf Funktionalität zu testen?

von EinWort (Gast)


Lesenswert?

P.S. und den offenen TRGx-Eingängen auch mal einen Pull-Down nach GND 
spendieren. Ich verwende in meinem System den CTC als 
Interruptcontroller und habe das ganze vorher auch auf mehrere 
Breadboards verteilt aufgebaut bei 10MHz. Lief bis 18,432MHz stabil.

von Jim Beam (Gast)


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...

von Harald N. (haraldn)


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...

: Bearbeitet durch User
von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

http://www.z80.info/zaks.html

Das Buch ist freigegeben...

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

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 :-(

von sumpfpenner (Gast)


Lesenswert?

Rodney Zack, Progammierung des Z80 gibts als pdf download

von Harald N. (haraldn)


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

von Harald N. (haraldn)


Lesenswert?

sumpfpenner schrieb:
> Rodney Zack, Progammierung des Z80 gibts als pdf download

Lest ihr eigentlich auch meine Antworten?

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Wolfgang R. schrieb:
> http://www.z80.info/zaks.html
>
> Das Buch ist freigegeben...

sumpfpenner schrieb:
> Rodney Zack, Progammierung des Z80 gibts als pdf download

Sagte ich bereits... ;-)

von sumpfpenner (Gast)


Lesenswert?

Nein, warum auch.

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

sumpfpenner schrieb:
> Nein, warum auch.

;-)

Harald N. schrieb:
> Lest ihr eigentlich auch meine Antworten?

Ich hab schon gelesen, dass Du das Buch hast, aber der Link ist 
vielleicht auch für andere interessant... Bist ja nicht nur Du hier 
unterwegs.

von Martin H. (horo)


Lesenswert?

Wolfgang R. schrieb:
> http://www.z80.info/zaks.html
>
> Das Buch ist freigegeben...

Und wem das Cover zu schmuddelig ist:
http://www.z80.info/zip/programming_the_z80_3rd_edition.pdf
(Außerdem kann man darin suchen...)

Ciao, Martin

von Thomas W. (dbstw)


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.

von Route_66 H. (route_66)


Lesenswert?

Jim Beam schrieb:
> Die beiden Z80-Bibeln waren/sind: ...

Mindestens den Kieser/Meder "Mikroprozessortechnik, Aufbau und Anwendung 
des Mikroprozessorsystems U880" würde ich mit dazu zählen.

von Oscale (Gast)


Lesenswert?

Du hast nen Bock in Deiner Schaltung, beschwerst Dich das hier „immer 
noch niemand“ einen funktionierenden Schaltplan gepostiet hat ( Internet 
ist voll davon!) und von Dir gibt es noch immer keine vernünftigen 
Bilder vom Schaltungsaufbau.
Stell die endlich mal ein!

von Oscale (Gast)


Lesenswert?

Reset war auch immer tückisch, der z 80 macht dann was er will.
Nimm nen reset Controller oder eine diskrete Beschaltung

Beitrag #5513825 wurde vom Autor gelöscht.
von (prx) A. K. (prx)


Lesenswert?

Oscale schrieb:
> Nimm nen reset Controller

Hat er gemacht, im Plan steht dafür ein MAX690 drin.

: Bearbeitet durch User
von georg (Gast)


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

von Oscale (Gast)


Lesenswert?


von EinWort (Gast)


Lesenswert?

@Harald: Eine Kleinigkeit bei Deiner Handzeichung 
IMG_20180806_212309.jpg. Am HC138 bei deiner IO-Logik sollte auf E3 noch 
#M1 von der Z80 CPU anliegen, weil bei einem #IORQ/#M1-cycle sollte kein 
CS aktiv sein.

von Dieter W. (dds5)


Lesenswert?

EinWort schrieb:
> ... weil bei einem #IORQ/#M1-cycle ...

Gibt's so was überhaupt?
M1 ist doch IMHO der instruction fetch, das sollte eigentlich immer ein 
Speicherzugriff sein.

von (prx) A. K. (prx)


Lesenswert?

EinWort schrieb:
> IMG_20180806_212309.jpg. Am HC138 bei deiner IO-Logik sollte auf E3 noch
> #M1 von der Z80 CPU anliegen, weil bei einem #IORQ/#M1-cycle sollte kein
> CS aktiv sein.

Dachte ich auch erst. Aber da der CTC selbst M1 anliegen hat, weil er 
das für den IACK Zyklus benötigt, sollte das nicht erforderlich sein.

von (prx) A. K. (prx)


Lesenswert?

Dieter W. schrieb:
> M1 ist doch IMHO der instruction fetch, das sollte eigentlich immer ein
> Speicherzugriff sein.

IORQ+M1 = IACK. Im 8080-kompatiblen Interrupt-Modus ist das wirklich ein 
instruction fetch.

: Bearbeitet durch User
von oszi40 (Gast)


Lesenswert?

Nebenbei:Für den Fall, dassss die SW ok sein sollTE, würde ich nochmals 
überlegen, ob ausreichend Abblock-Cs vorhanden sind und gründlich mit 
viel Licht nachsehen, dass keine mikroskopische Zinnbrücke irgendwo 
Ärger macht.

von Teo D. (teoderix)


Lesenswert?

oszi40 schrieb:
> gründlich mit
> viel Licht nachsehen, dass keine mikroskopische Zinnbrücke irgendwo
> Ärger macht.

Jo, musste erst letztens, ein Stück Alufolie raus zubbel. :(

: Bearbeitet durch User
von georg (Gast)


Lesenswert?

Dieter W. schrieb:
> Gibt's so was überhaupt?

Aber ja doch, wichtig für die Interruptverarbeitung (IRQ ACK Cycle).

Georg

von Georg G. (df2au)


Lesenswert?

georg schrieb:
> Die CTCs sind wohl Sensibelchen

Nicht nur die CTC. Die Spec für das Taktsignal wird gern überlesen. Da 
muss der High Pegel etwas höher als gewöhnlich sein, Pullup an einem 
normalen Ausgang.

von Harald N. (haraldn)


Lesenswert?

Also takt und zähleingänge hochziehen?

von Harald N. (haraldn)


Lesenswert?

Hat auch nicht geholfen...

von Jim Beam (Gast)


Lesenswert?

Mit Verlaub,

Wäre es nun nicht langsam an der Zeit einen Defekt an der CTC zu erwägen
und die mal auszuwechseln?

Ich pers. hätte das schon sehr viel früher probiert...

von Harald N. (haraldn)


Lesenswert?

Jim Beam schrieb:
> Mit Verlaub,
>
> Wäre es nun nicht langsam an der Zeit einen Defekt an der CTC zu erwägen
> und die mal auszuwechseln?
>
> Ich pers. hätte das schon sehr viel früher probiert...

Das ist die dritte ctc...

von Teo D. (teoderix)


Lesenswert?

Harald N. schrieb:
> Das ist die dritte ctc...

Und das dritte mal, das er das schreiben muss. :´(

von Harald N. (haraldn)


Lesenswert?

Hab jetzt den multiplexer wegrationalisiert. Pio geht, ctc nicht

von oszi40 (Gast)


Lesenswert?

Harald N. schrieb:
> Mittlerweile habe ich die gesamte Interrupt Beschaltung weggenommen.
> Problem bleibt

Die Priorisierung der Interruptanforderungen erfolgt intern über eine 
Daisy-Chain. Ob diese Interupt-Kette die richtige Reihenfolge hat oder 
sich selbst den Ast absägt? 
http://www.vias.org/mikroelektronik/b2_03_z80-ctc_programming.html

von Joe G. (feinmechaniker) Benutzerseite


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.

von Harald N. (haraldn)


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?

von Constanze H. (warteschleife)


Lesenswert?

Was sind denn die Signale CLKO und CLK am CTC?
Der CTC hängt als einziger Baustein mit seinem
Clock input nicht an CLKO, sondern an CLK.
Alle anderen hängen an CLKO.

-Connie

von Harald N. (haraldn)


Lesenswert?

Constanze H. schrieb:
> Was sind denn die Signale CLKO und CLK am CTC?
> Der CTC hängt als einziger Baustein mit seinem
> Clock input nicht an CLKO, sondern an CLK.
> Alle anderen hängen an CLKO.
>
> -Connie

Das ist nur schlampig beschriftet. Clk und clko sind beides der 
systemtakt.

von Route_66 H. (route_66)


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)

: Bearbeitet durch User
von Klaus R. (klara)


Lesenswert?

Z80 Problem?

Hatte ich vor über 30 Jahren auch schon einmal.
mfg Klaus

von Joerg F. (felge1966)


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

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Joerg F. schrieb:
> und einen Taktgenerator auf 74HCT oder 74LS Basis empfehlen.

Hmm. Die Definition des Takteingangs der Z80 Komponenten ist mit TTL und 
HCT nicht direkt verträglich, dafür aber mit HC.

von Erich (Gast)


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

von Harald N. (haraldn)


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.

: Bearbeitet durch User
von Erich (Gast)


Lesenswert?

Harald N. schrieb:
> Siehe Datenblatt Seite 6
> Für einen manuellen Reset gehört der Taster und der 100n genau dorthin.

Bild Seite 6 ist nicht für MAX690.
Und vermutlich sowieso falsch.
Ist ja kein "open drain" Ausgang.

Mach' den 100 nF einfach mal raus und probiere neu!

Gruss

von Joe G. (feinmechaniker) Benutzerseite


Angehängte Dateien:

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.

: Bearbeitet durch User
von Michael A. (micha54)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Michael A. schrieb:
> Was ist also daran falsch ?

Der Typ des ICs in diesem Bild: "MAX691/693/695 Typical Application"

: Bearbeitet durch User
von A. H. (ah8)


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.

: Bearbeitet durch User
von Harald N. (haraldn)


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!

von G. O. (aminox86)


Lesenswert?

Harald N. schrieb:
> Idealerweise gleich mit Testprogramm...
> Dann finde ich Vlt durch Vergleich den Fehler.


Hier ist die Verdrahtung und Programmierung ua. der CTC genau erklärt:

http://www.train-z.de/train-z/pdf/howto_program_the_Z80-CTC.pdf

von Erich (Gast)


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

von Erich (Gast)


Lesenswert?

@ Harald N. (haraldn)

Freut mich, daß es jetzt klappt.

Dein Versuch hat sich mit meinem Text von 13:46 überschnitten,
wo ich nochmals zu erklären versuchte, warum das mit dem 100 nF falsch, 
ja sogar kontroproduktiv ist.

Gruss

von Dieter W. (dds5)


Lesenswert?

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

Ich schätze mal, dass durch den 100n die ansteigende Flanke zu langsam 
für den CTC war. Vielleicht hat das DB eine Aussage dazu.

von Harald N. (haraldn)


Angehängte Dateien:

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!

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

Harald N. schrieb:
> Funktioniert! Danke nochmal!

"Ich liebe es, wenn ein Plan funktioniert!" [1]

[1] John Hannibal Smith, A-Team

von Oscale (Gast)


Lesenswert?

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..

von Harald N. (haraldn)


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....

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Harald N. schrieb:

> War ja auch ein ganz konkreter Hinweis....

Zumal es ja gar nicht der Z80 selbst war, sondern wohl eher der CTC,
der mit dem Reset-Impuls nicht klar kam.

@Osca[le]: Verwarnung wegen Verstoßes gegen die Forenregeln.  Bitte
nur einen Namen pro Thread benutzen.

von Georg G. (df2au)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von tommy (Gast)


Lesenswert?

tommy schrieb:
> 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

Da lag ich also richtig, ohne zu dem Zeitpunkt die
Reset-Beschaltung zu kennen.

von Hansjörg W. (Firma: --) (winielektronik)


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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

: Bearbeitet durch User
von Hansjörg W. (Firma: --) (winielektronik)


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.

von Hansjörg W. (Firma: --) (winielektronik)


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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.