Archiv verlassen und diese Seite im Standarddesign anzeigen : Z80 PIO
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
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.
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.
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
*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.
*seufz* wenn ich denk', daß ich mal von beiden (ZX81 u. Spectrum) ein komplettes ROM-Listing hatte, mit kommentar
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
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.
Noch was: Bist du mit Datasheets u. Doku versorgt ?
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
hallo robert,
ist es denn bezüglich der speisung mit TTL-Impulsen in ordnung?
Mfg
Pascal
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
´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
*äää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 ?
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
uiii.
Den Altersdurchschnitt von dem Thread möcht' ich lieber nicht wissen.
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
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
das wär' das miminal-system
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
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 ?
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...
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.
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.
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.
´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... :\
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
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
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
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
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
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
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)
Halöle,
habt ihr vielleicht ein pdf mit codebeispielen zu z80 bei euch rumfliegen?
mfg
pascal
Schau doch mal hier:
http://z80.info/
Sooooooo....ich habe einen stromtest gemacht es fließen 260mA also besteht kein kurzschluß.
grüße
pascal
ich habe es geschafft die schaltung funktioniert einwandfrei-es lag an der clock und an der pio.
dank und viele grüße
Pascal
Hallo CodeX,
was war mit dem Clock und was war mit der Pio ?
Gruss,
stochri
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.