PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Z80 PIO



CodeX
28.12.2005, 22:55
Hallo zusammen,


ich habe mir ein Z80-Minimalsystem auf einem Steckboard aufgebaut.
32kbE²ROM, Z80PIO und Z80CPU. mein Problem besteht nun darin die PIO richtig anzusteuern falls dort mein Fehler liegen sollte. Die PIO-Anschlüsse B/A' und C/D' sind am Adressbuss unter Pin A0 und A1 angeschlossen.

Mein Betriebsprogramm ist ziemlich simpel gehalten und ist wie folgt aufgebaut.


LD A,$F
OUT ($2), A

start LD A, %10101010
OUT ($0), A
RLA
JP start


Ist das richtig so?
Für jede Hilfe bin ich euch sehr dankbar.

Viele Grüße

CodeX

stochri
28.12.2005, 23:14
Hallo CodeX,
das ist ja historisches Computing, was Du da machst.
Mich würde interessieren, warum Du einen Z80 einsetzt?

!CE,!M1,!IORQ,!RD, IEI hast Du auch angeschlossen ?

Deine Assemblerroutine läuft mit Maximalgeschwindigkeit, was sagt das Oszilloskop?
Wenn Du die Ausgänge mit einem Widerstand belastest, sind sie hochohmig ?

Gruss,
stochri

kalledom
28.12.2005, 23:21
So weit ich mich erinnere :-) muß der PIO-Baustein, genau wie der SIO- und Timer-Baustein initialisiert werden, sonst weiß er nicht, was er machen soll.

stochri
28.12.2005, 23:36
LD A,$F
OUT ($2), A

Im obigen Programm ist die Initialisierung. Es wird der Wert 0x0F in das Steuerregister von Port A geschrieben. Damit sollte der Port A auf Mode 0 = Output gestellt werden.

Theoretisch könnte es also gehen.

kalledom
28.12.2005, 23:41
Ich kann nachts schlecht auf den Speicher; wenns morgen noch nicht klappt, krabbel ich mal rauf.

stochri
28.12.2005, 23:45
Hallo CodeX,
läuft Dein Z80-System grundsätzlich? Wenn Du nicht sicher bist, kannst Du folgenden Test machen:
schreibe in das EEPROM lauter NOPs
Jetzt muss man mit dem Osziloskop die binär gestaffelten Frequenzen an den Adressleitungen sehen.

Gruss,
stochri

PicNick
29.12.2005, 07:54
*hehe* das ist ja wie Jurassic Park (ausgegrabene Fossilien klonen).
Ich war ein großer Fan vom SIO damals, sehr praktisch, wenn man mit den Baudraten zurechtgekommen ist.
Ich hab noch so einen PIO vom Sinclair *seufz*

Rage_Empire
29.12.2005, 09:24
Hehehe, hab irgendwo in ner Kiste noch nen alten ZX81. Das waren noch Besteleien. Und wenn der Kühlschrank eingeschlten hat, ist er abgestürzt.

PicNick
29.12.2005, 09:56
*seufz* wenn ich denk', daß ich mal von beiden (ZX81 u. Spectrum) ein komplettes ROM-Listing hatte, mit kommentar

CodeX
29.12.2005, 10:16
Hallo zusammen,

danke ersteinmal für eure rege anteilnahme an meinem problem.
Ich habe die z80 komponenten vor jahren gekauft und möchte sie nun wo ich endlich ausreichend equipment(bis auf ein osziloskop) endlich verbauen-gedacht sind sie für ein kleines roboterprojekt(wenn ich endlich eine minimalschaltung mit den dinos zum laufen bekommen würde :\).

Muß ich die z80 pio dil40 speziell reseten und muß eine initalisierungskonvention einhalten?

Fürn anfang möchte ich keine interupts verwenden und habe ie1 zwar auf high gelegt, ie2 jedoch offen gelassen. !ioreq ist direkt an der cpu angeschlossen genau wie !m1, !rd und !ce . !ce und !rd sind an !ioreq angeschlossen der Control/!Data eingang an A1 und PortSelection B/!A an A0. ich bin langsam recht ratlos ich habe leider kein equipment wie oszi um fehlerquellen auffindig zu machen*heul*

muß ich eventuell beim clockeingang etwas beachten? um einen effekt nachvollziehen zu können speise ich cpu und pio im moment mit 3hz von einem ne556 ausgang(TTL) ist das vielleicht der fehler?

Welche Fehler sind sonst noch möglich?

Viele Grüße

Pascal alias CodeX

PicNick
29.12.2005, 10:42
Sagtest du 3 Hertz ? Für Genaueres muß ich mir auch erstmal die Datasheets wieder einziehen.
Da die Z80-Familie aufeinander abgestimmt ist, brauchst du nicht mit besonderen Schwierigkeiten zu rechnen. d.h. das Oszi ist nicht so dringend.

PicNick
29.12.2005, 10:49
Noch was: Bist du mit Datasheets u. Doku versorgt ?

PicNick
29.12.2005, 11:04
Mal geguckt: CPU
Clock high ist theoretisch statisch, garantiert aber nur bis 200 µS
Clock low maximal 2 µS
rise & fall time maximal 30 nS

Also ein bißchen mehr Stoff für die Clock wär schon gut

CodeX
29.12.2005, 14:05
hallo robert,

ist es denn bezüglich der speisung mit TTL-Impulsen in ordnung?

Mfg

Pascal

PicNick
29.12.2005, 14:16
Ja, der Z80 mit allen seinen Kindern ist hinten und vorn voll TTL-kompatibel.
Takt: Ich hab seinerzeit immer den Quartz mit einem 74xx-NOR im Gegentakt als Clock verwendet. Eigentlich eine Affenschaltung, z.B:
http://www.elektronik-kompendium.de/public/riederer/Quarz-oszil.htm

CodeX
29.12.2005, 14:25
´hallo robert,

gehen denn die bausteine nicht kaputt wenn man sie positiv wie auch negativ also mit 5V in die clock speist?
Weist du in etwa welche frequenz mit welcher tastrate ich in etwa benötige? deine meinung nach könnte es also gut sein, das es an der clock liegt?

Ist ein e²rom mit 300ns noch immer schnell genug um buscollisions zu vermeiden?

grüße

pascal

PicNick
29.12.2005, 14:43
*ääähm*
..positiv wie auch negativ ..
wie meinst du das mit negativ ? Der Zilog will einfach ein Rechteck haben 0 <-> 5 V
EEPROM: das sollte doch reichen. Wenn du mit 1 MHZ fährst, kann nix passieren. Darüber müßt man sich das Timing Zeugs noch genau anschauen. Es gibt aber auch einfache Schaltungen, ein Waitstate reinzuquetschen, falls die memory dann zu langsam ist.

Was soll es denn insgesamt werden ? Spaß an der Freude oder was bestimmtes ?

Vogon
29.12.2005, 15:07
Wenn ich nicht sofort aufhöre in den alten Schateln zu kramen und Manuals zu blättern ... :-s :-k [-X [-o<
... hmmmm, für zehn Z80-System würden die Brocken ja mindestens reichen ... :-$ [-( :-b

Aber dank Internet ist eigendlich jede Info zu bekommen.

http://www.geocities.com/SiliconValley/Peaks/3938/z80robot.htm
oder http://z80.info/

Ich habe doch mal nachgeschaut, eventuell hift es dir ja !



;********************* HARDWARE IO ADR ************************************
; PIO 82C55 I/O
PIO1A: .EQU 0 ; (INPUT) IN 1-8
PIO1B: .EQU 1 ; (OUTPUT) OUT TO LEDS
PIO1C: .EQU 2 ; (INPUT)
PIO1CONT: .EQU 3 ; CONTROL BYTE PIO 82C55


;************************************************* *****************
; INIT_PIO ;
; Funktion....: Init par port >8255< ;
;************************************************* *****************
INIT_PIO:
LD A,10011001B ; A= IN, B= OUT C= IN
OUT (PIO1CONT),A
RET

BOUT: ; LD A,10000000B ; A= OUT, B= OUT C= OUT (DATA TIL LCD)
; OUT (PIO2CONT),A ; if there are 2 PIO
; RET

BIN: ; LD A,10000010B ; A= OUT, B= IN C= OUT (DATA FRA LCD)
; OUT (PIO2CONT),A
; RET

... habe ich aus: http://z80.info/z80sourc.txt

PicNick
29.12.2005, 15:12
uiii.
Den Altersdurchschnitt von dem Thread möcht' ich lieber nicht wissen.

CodeX
29.12.2005, 15:49
ihr habt ja meinen assemblercode gesehen-der ist soweit richtig nehme ich an-wisst ihr eventuell wie wahrscheinlich es ist das eine pio kaputt ist?

vielen lieben dank für eure hilfe.
die schaltung funktioniert zwar noch nicht aber ich habe bis jetzt immerhin fehlerquellen ausschließen können :)

Grüße
Pascal

PicNick
29.12.2005, 16:46
Schick mir' eine Mail, dann send ich dir die Doku & datasheets als zip.
dann hast du ein paar Tage was zu lesen

kalledom
29.12.2005, 16:59
Hier die Anschlüsse der Z80-PIO:
4 = CS Eing. low-aktiv
5 = A1 Eing.
6 = A0 Eing.
23 = INT Ausg. (PullUp-Widerstand ?)
24 = IEI Eing. (PullUp-Widerstand ?)
25 = CLK Eing. bis 4 MHz
35 = RD Eing.
36 = IORQ Eing. low-aktiv
37 = M1

Bedingungen am Z80:
6 = CLK Eing. bis 4 MHz
16 = INT Eing. high
17 = NMI Eing. high
24 = WAIT Eing. high
25 = BUSRQ Eing. high
26 = RES Eing. high

PicNick
29.12.2005, 17:06
das wär' das miminal-system

CodeX
29.12.2005, 17:51
ich habe die schaltung genau nach applikationsvorschrift von zilog aufgebaut und sie läuft immer noch nicht. der prozessor funzt ich habe ihn mit einem signalverfolger getestet.

könnte es sein das ich die pio geschrottet habe als ich fälschlicherweise den Port A als input statt als gedachten output programmiert habe?


grüße

Pascal

PicNick
29.12.2005, 19:18
Gefährlich ist eher umgekehrt Ein Output gegen einen anderen output.
Ich würde auf jeden Fall irgendwas zum visualisieren einbauen.
Einen Latch mit Led, 244, 245 etc. mit logik gatter, wo ich seh, ob das geschrieben wird, was ich glaub.
Hast du ja alle chips mit 100 nF entstört ?

CodeX
29.12.2005, 19:39
oh shit entstören? muß ich jeden ic einzeln entstören? ich habe lediglich mal ausprobiert was passiert wenn ich ein 10nf zur stromquelle parallel zu schalten sprich clockimpulse kurzzuschließen-aber ich habe die ics einzeln nicht entstört...

PicNick
29.12.2005, 19:47
Ich hab schon viele husch-pfusch Schaltungen auch ohne diese 100nF betrieben. Aber erstens überhaupt und zweitens sowieso sollte man jedem einzelnem Chip ganz knapp dran sowas vergönnen. Du darfst ja nicht vergessen, so ein digitaler Fuzzy ist ja eine Impulshölle mit massen von steilen Flanken rechts und links.
Vielleicht hilft es dir nix, aber wir alle können dann besser schlafen.

PicNick
29.12.2005, 19:53
Häng doch wirklich einen 8-Latch auf den Datenbus der jeden Schreibbefehl speichert (einfach /WR -> /LE)
Ein Primi-programm


LD A,$F
OUT ($2), A
start:
JP start

dann muß genau $F dort stehen und sonst nix.
persönlich glaub ich (aus dem Bauch) eher, daß das Programm-lesen nicht richtig klappt, kann ich aber nicht begründen.

stochri
29.12.2005, 20:01
Hallo CodeX,
Meiner Menung nach ist es wichtig zu sehen, ob das System grundsätzlich läuft. Ich habe mir vor längerer Zeit mal ein paar Z80 Systeme auf Lochraster gelötet. Und der erste Test war immer, in den Programmspeicher Nop's reinzuschreiben und zu schauen, ob die Adressleitungen durchgezählt werden.
Die Systeme waren immer mit 4 Mhz getaktet und ich hatte kein Oszilloskop um nachzuschauen, ob der Prozessor läuft. Also habe ich einen hochohmigen Piezolautsprecher genommen und an die Adressleitungen gehalten. Die Tonhöhe muss sich von einer höherwertigen Leitung zu einer niederwertigen Leitung verdoppeln.

Liegt der Fehler vielleicht gar nicht an der Pio liegen, sondern irgendwo anderst, z.B. in einer nichfunktinierenden Anbindung des Speichers an den Prozessor ?

Gruss,
stochri

Upps, jetzt habe ich gerade bemerkt, das ich ein paar Beiträge übersehen habe.
Zu den 100nF Kondensatoren: dringend zu empfehlen! Bei mir hat schon einiges nicht richtig funktioniert, weil die Spannungsversorgung zu unruhig war.
Die Versorgungsspannugn sollte auch möglichst gut bei 5V liegen, so tolerand wie ein AVR waren die Z80 nicht.

CodeX
29.12.2005, 20:14
´hallo ihr,

ich benutze einen bleiakku und habe festegestellt, dass ich beim anschluss an die schaltung einen spannungsabfall in etwa 1,5V erhalte ist das normal muß die energiequelle unbelastet nur 5V abgeben oder auch belastet 5V?

MFg

Pascal

p.s: 100nfs müsste ich leider erst bestellen... :\

stochri
29.12.2005, 20:26
Hallo Codex,
entweder hat Dein Bleiakku einen ziemlich hohen Innenwiderstand und ist wahscheinlich bald am Ende, oder Deine Schaltung zieht ziemlich viel Strom, was auf einen Kurzschluss oder ein verpoltes IC hindeuten könnte.
Du könntest mal die Stromaufnahme messen und mit dem soll aus dem Datenblatt vergleichen.

Gruss,
stochri

CodeX
29.12.2005, 20:39
An einen kurzschluss glaube ich weniger, da sich bauteile überhaupt nicht erwärmen :) ich denke mit dem zweiten könntest du recht haben denn trotz 15h ladung konnte ich den akku nur 5 minuten in betrieb nehmen. erkennt man an einem hohen innenwiderstand das der akku allmählich kaputt geht? welcher spannungswert ist jetzt wichtig-belastet 5V oder unbelastet 5V?

Mfg

Pascal

stochri
29.12.2005, 20:49
Der Prozessor hat einen relativ engen Toleranzpegel, was die Versorgungsspannung anbelangt. Daher muss die Spannung im belasteten Zustand bei 5V liegen. Normalerweise hat man die Z80-System immer an einem 5V Festspannungsregler betrieben, z.B. 7805.
Es war eben anderst als bei den AVR-Prozessoren, die Toleranzen erlauben es schlicht weg nicht, einen Z80 ohne Spannungsregler direkt an einer Batterie zu betreiben, wie es heutzutage bei vielen AVR's üblich ist.

Was den Innenwiderstand des Akkus angeht: Der dürfte meiner Meinung nach hauptsächlich von 2 Faktoren abhängen
- Die Akkukapazität
- Akku-Gesundheitszustand, man stelle sich vor, eine Automobile-Bleiakku wird ohne Flüssigkeit betrieben, dann geht der Innenwiderstand gegen unendlich

Wenn der Innenwiderstand eines Akkus höher wird, deutet das auf eine Fehlfunktion hin.

Gruss,
stochri

CodeX
01.01.2006, 19:29
hallo stochri und co,

ein frohes neues jahr wünsche ich euch. Ihr meintet es könnte auch ein softwareproblem sein... gibt es bei der pio bestimmte vorschriften der initalisierungssequenz? das bestimmte register auf jeden fall gesetzt sein müssen, damit der hochohmige ausgang durchgeschaltetr wird?

viele grüße

Pascal

PicNick
02.01.2006, 16:41
Prosit !
Die Mode -Auswahl ist so beschrieben:
PortA/B
D7.D6.D5.D4.D3.D2.D1.D0
M1.M0..x....x....1....1...1...1
0....0 ----> Mode 0: Output
0....1 ----> Mode 1: Input
1....0 ----> Mode 2: bi direkt (Port A only)
1....1 ----> Mode 3: control

stochri
02.01.2006, 16:51
Auch ein gutes Neues!
Die Initialisierung im Assembler Programm scheint ja zu stimmen ( Mode 0 ). Meiner Meinung nach sollte aber erst einmal sicher gestellt sein, dass ein Programm überhaupt vernünftig läuft. Und mit den oben beschriebenen Versuchen mit dem Akku und dessen Spannung scheint mir das nicht gegeben.

Gruss,
stochri

PicNick
02.01.2006, 17:00
welcher spannungswert ist jetzt wichtig-belastet 5V oder unbelastet 5V?

Belastet oder nicht: 5V, bis daß der Tod eintritt. Kurzschlüsse mußt du über den Strom feststellen (rechtzeitig)
5 V +- 5%
Z80 CPU:
ICC max ~150 mA (wenn ich meine schlechte Kopie richtig lesen kann)

CodeX
02.01.2006, 17:11
Halöle,

habt ihr vielleicht ein pdf mit codebeispielen zu z80 bei euch rumfliegen?


mfg

pascal

Vogon
02.01.2006, 17:15
Schau doch mal hier:
http://z80.info/

CodeX
03.01.2006, 08:16
Sooooooo....ich habe einen stromtest gemacht es fließen 260mA also besteht kein kurzschluß.

grüße
pascal

CodeX
11.01.2006, 06:36
ich habe es geschafft die schaltung funktioniert einwandfrei-es lag an der clock und an der pio.

dank und viele grüße

Pascal

stochri
11.01.2006, 17:19
Hallo CodeX,
was war mit dem Clock und was war mit der Pio ?

Gruss,
stochri

CodeX
12.01.2006, 06:01
Hallo Stochri,

die Clock hat kein stark genug ausgesprägtes Signal und die PIO war im breadboard nicht 100% kontaktiert. Ganz blöde Fehler eigentlich aber das ist wohl das Problem bei Breadboards -sehr viele Fehlerquellen....

Viele Grüße

Pascal