viewtopic.php?p=2342#p2342
Ich denke, ich habe das EEPROM jetzt sehr gut im Griff.
Seit dem TG weiss ich, dass das PROM Programmierbar ist und das EPROM löschbar und das EEPROM elektrisch löschbar
erst jetzt fiehl mir auf das EEPROM arbeitet mit FG-MOS-FET's. Hat einen Write Eingang. Lässt sich vielleicht auch (vorsichtige Prognose) ohne Programmiergerät wahrscheinlich beschreiben, obwohl kein NVRAM. Egal EEPROM Programmiergerät brauche ich trotzdem
Inzwischen weiss ich: PROM - ODER Programmierbar, Festverdrahtete UND. PLA: Programmierbare UND Matrix, gefolgt von programmierbarer ODER - PAL: ODER Struktur fest verdrahtet
Wie dem auch sei, jetzt weiss ich noch mehr
Neben 27xxx und 28xx kenne ich den Eingang CE - OE - WE
Ich habe dafür eine einfache Logik
COW - wie die Kuh
Danaben gibt es CS
Damit lautet die Regeln
COW - 3 E, 1 x S
Steht für
Chip Enable
Output Enable
Write Enable
Chip Select
Egal. Das habe ich gebraucht. Und werde ich auch brauchen, was den Zilog Z80 und das LCD betrifft.
Also, langsam. Ich weiss jetzt noch mehr
Dank dem Rosa Buch - Informationstechnik, Kommunikationstechnik, Fachkenntnisse
1.) Serielle EPROM's machen einen Sinn. Indem man sie nebeneinander schaltet. Sie sind quasi, ich glaube der Ausdruck war volladdressierbar. Weil sich eben jedes Bit ansprechen lässt
2.) Zeilenleitung/Spaltenleitung und Addressleitung/Wortleitung ist bei genauerer Betrachtung kein Problem
Gut - es ist jetzt so. Ich denke, dass es total easy ist einen Zilog Z80 an den 084 PIO Baustein an zu schliessen, ein EEPROM dazu und dann noch das LCD
Zunächst ein paar Dinge.
1.) Zu dem Ozsillatorbaustein - Gott sein Dank, ich habe ein Oszilloskop und ich es hat 10 MHz, und meine Oszillatoren liefern 2 MHz und 4 MHz
Gut - damit kann ich testen, ob er es tut, was er tun soll
a) Keine Panik vor hoher Taktfrequenz. Indem ich die Taktfrequenz erhöhe ist sie erhöht. Bei relativ einfachen CPU's muss man sich deswegen nicht etwas denken. das heisst, selbst, wenn es 4 MHz sind, ist es noch Digitaltechnik
b) Der Oszillatorbaustein lässt sich einfach verwenden und sowohl PIO als auch Z80 CPU - haben einen Oszillatoreingang
2.) Ich selber bin mikrocontroller.net gefolgt und ich habe bereits mehrfach und sehr oft ein LCD an den Atmega8 angeschlossen. Das nur Text dargestellt hat. Das ist kein Problem
Kombiniert man das mit C, lässt sich sehr einfach damit auch etwas darstellen, was nicht mehr ganz so gewöhnlich ist, etwa Ausdrucke in Backus Naur Form, also zum Beispiel
(4+5)*3
was sich auch ausrechnen lässt
3.) Das nebenbei. Wenn Sie C benutzen, Basic, was auch immer. Sie haben ja einen Compiler. Und der benutzt einen Programmiersprache. Vorausgesetzt, er erzeugt den entsprechenden Assembler/Hex/Binary Output - sie haben zum Beispiel einen Zilog Z80. Und angenommen einen C-Compiler, der entweder auch Zilog Z80 Output erzeugt, oder einen
gcc-z80
gut, dann macht er schon den richtigen Hex Code draus, so oder so. Den speichern sie auf dem EEPROM. Das geht, indem sie den Compiler einen Hex Code erzeugen lassen, und dann mit der Programmiersoftware für das EEPROM diesen Hex Code auf das EEPROM tun.
Gut - angenommen sie haben ihn korrekt an den Zilog Z80 angeschlossen, tut das Programm
Das ist das eine lustige. Das andere ist
wie ist es mit C-Bibliotheken
Na ja, sie kennen vielleicht Funktionen für Netzwerkzugriff, File Zugriff und so weiter
Und für die Standard ein und Ausgabe
printf ("Hallo Welt zum %i\n", 2);
Gut, was passiert damit auch unserem Zilog Z80, MIPS32 und Atmega8? Das lässt sich einfach beantworten.
Sie müssen so denken, dass sie in C Bibliotheken haben. Sie haben eine Syntax zum Beispiel
for (i = 0; i < 10; i++);
Zum einen Bibliotheken sind aber Teil der Programmiersprache. Jetzt haben wir einen 386er mit Linux drauf. Gut - dann tun alle Bibliotheken
warum strcmp(des, src)
nicht? Was ist mit
printf(..)
Der Witz ist, dass printf so in stdio.h steht. Mit Linux verwenden sie int 80h mit DOS INT 21h
Der witz ist, dass das auf dem Atmega8 nicht geht
Aber er hat Ports
PORT A
PORT B
PORT C
PORT D
Sie müssen ein Mal scharf nachdenken!
Zunächst ist die Ausgabe auf einem Atmega8 etwas ganz anderes, als auf einm x86er
Viele denken an Interrupts. Na ja, Interrupts. damit sind wir beim x86er durch seinen Vektor wahrlich verwöhnt
Sie glauben es nicht. Aber der MIPS32, den ich auf den FPGA mit VHDL gerade unterbringe, der hat zunächst mal, in seiner kleinsten Form als ein Zyklus Prozessor keine Interrupts
So, in seinem Schaltplan - nicht mal etwas für die EA
Das ist aber einfach gemacht. Sie brauchen nur einen Port für die Ausgabe, um etwas dar zu stellen. Daran tun sie ein paar LED's. Lassen den MIPS32, mit seinem Speicher rechnen und geben das Ergebnis aus
Sie müssen das bisherige Blockschaltbild nur erweitern und einen Befehl OUT einfügen. Dieser setzt ein Bit an den Befehlsdekoder. Wenn er sitzt, geht es nicht an den Registersatz/ALU/Datenspeicher, sondern an den Port
Gut. Das ist das eine. Der Atmega8 hat auch ganz bequem einfach viele Ports. Bei AVR generell A bis E oder so
Sie haben dabei jeweils 8 Bit. Also ein Byte. Daran muss das LCD. Das LCD hat 8 Bit oder 4 Bit. Die einfach an das Port übertragen und von da aus, geht, wenn angelötet, über den Bus, also die Bits an das LCD
und fertig. Dann können sie Zeichen für Zeichen ausgeben.
Doch, was ist mit Interrupts
Nun Interrupts haben generell erst Mal 2 oder 3 Eingänge und Ausgänge
Sie haben ein INT - für Interrupt Request und ein INTA für Interrupt Acknoledgement. Das zweitere bedeutet, dass es ein Ausgang ist - und bedeutet, die Anfrage wird oder wird gerade bearbeitet
Doch, was tut diese Interrupt Int 21h und die des BIOS.
Das BIOS ist auf einem ROM/PROM/EPROM und so weiter.
Das DOS Interrupt ist 0x21 und das vom BIOS entsprechend 0x16. Am Anfang sieht es so aus, als würde das Interrupt die E/A tun
Nicht ganz richtig. es ist viel mehr so
Interrupts sind etwas, das asynchron auftritt und den Sprung aus dem Benutzerprogramm erlaubt. Das ist wichtig
wenn wir Multitasking angucken, das wird über ein Timer Interrupt gemacht. Es gibt zum Glück zwei. Wenn es nur eines gäbe, würde die Uhr nicht mehr tun
Aber das eine Timerinterrupt verwendet das OS - das heisst, findet es statt, wir springen ins OS
Es gibt als INT und INTA
Interrupts können durch die Hardware aber auch durch die Software aufgerufen werden
Die Software kann auch den Interrupt-Befehl INT betätigen. Das heisst, Sprung aus dem Benutzerprogramm
Nur - es gibt noch INT, INTA, NMI - das steht für Non Maskable Interrupt. Und hat eine grössere Priorität.
Der Ziel von Interrupts ist nicht in erster Linie die Hardware an zu sprechen, das heisst Daten von ihr zu lesen, oder in sie zu schreiben
das Ziel von Interrupts ist, dass sie statt finden können, obwohl gerade das Benutzerprogramm läuft
Solche Interrupts gibt es auf vielen Prozessoren. Das Timer Interrupt ist übrigens ein Hardware Interrupt
Trotzdem erledigen Interrupts nicht die Übertragung von Daten alleine. Bzw. sie sind nicht die Schnittstelle, der Port wo sie landen
Also, der Witz ist, das sehen wir eben am PIO vom Z80, PIO 084,
Sie addressieren die IO etwa so wie den RAM oder das ROM
Das RAM oder das ROM, hat Addressen. Einen Daten und Addressbus. Sie haben ebenso eine Addressierbare Hardware
Sie müssen zwischen einem IO Bereich und DMA und dem IN und OUT Befehl unterscheiden
IN und OUT schreiben direkt auf einen Port. Die I/O wird addressiert. Der Unterschied zwischen DMA und IN und OUT ist, dass sie bei DMA in den Arbeitsspeicher schreiben. Ein DMA Controller übernimmt die Übertragnug an die IO
Doch, was ist IN und OUT
Und - was unterscheidet es von LD und ST - der Witz ist - dass sie eben einen
PIO brauchen
Also, sie brauchen nicht mehr, als
Z80, PIO 084, LCD, ROM und Oszillator
Warum? Der PIO muss unter anderem unterscheiden, schreiben sie in den RAM oder schreiben sie in die IO
Der witz ist - dass sie einen Datenbus und einen Addressbus haben. Sie schreiben sowohl für die IO als auch für den Arbeitsspeicher, Addresse und Daten
Über dieselben Ports. aber nach aussen muss unterschieden werden, schreiben wir in den RAM oder in die IO
Deswegen - hat die CPU - einen Steuerbus. Auch einen Externen. Sie müssen zwischen externen und internen Steuerbus unterscheiden. Ganz was anderes
Beim MIPS32, internen: MemToReg, MemWrite, Branch, ALU-Src, ALU-Op, RegDst, RegWrite das dient dazu, die Einheiten zu steuern
Extern, das heisst, sie senden Steuersignale. Muss ich die kennen? Jein. Es ist natürlich beschissen einen Zilog Z80 zu haben und mal wieder nichts zu wissen
Auf der einen Seite. Auf der anderen. Sie haben einen externen Steuerbus. Dieser Steuerbus enthält - INT, INTA, NMI und weiter
Aber auch Bits, die Angeben, geht es an den RAM oder an die IO. Das ist von Prozessor zu Prozessor unterschiedlich
Aber, warum Befehle LD, MV, ST, IN, OUT
Na ja, durch IN und OUT, wird etwas an den Steuerbits der CPU geändert.
Kurz und gut, es gäbe ein Bit, das würde nach aussen signalisieren, geht es an den RAM oder geht es an die IO
Dann müsste man eine Schaltung haben - die es entweder dahin schickt, oder daher nimmt oder dahin
Gut - deswegen IN OUT und LD und ST. Das ist nicht das gleiche, weil nach aussen sichtbar sein muss, IO oder RAM
Und was ist mit den Steuerbits? Muss ich jetzt eine Schaltung bauen
Nein, dann sagen sie - ich bin nicht vollständig. wenn ich die Schaltung nicht baue
Nein, ich nehme einen Zilog 084. das ist der PIO
Es gibt viele Steuerbits - was heisst, viele, aber doch ein paar, die Legen fest, RAM oder IO.
Ich muss die nicht unterscheiden. Der PIO 084 hat ein paar Bits und die CPU Z80 ein paar. ich schalte sie einfach entsprechend zusammen
Weiss damit der Betreiber einer Seite mehr als ich?
Nein, wenn sie sich das Original Dokument von Zilog anschauen - dann steht da drin wie sie es zu verschalten haben, das steht zwar auch auf Seiten. Aber es steht auch bei Zilog
Jedes Bauteil, jedes 74xx Gatter hat eine Beschreibung. Da steht drin, welcher Pin für was steht
Und - warum muss ich das ding nicht selber bauen und warum muss ich das nehmen und lesen?
Der PIO 084 gehört genauso zum Sortiment. Wie der Z80 selber. Beides gehört zusammen. Und ich soll die Schaltung für den PIO niemals selber bauen. Es ist Teil der sache
Gut - deswegen - IN OUT sagt PIO, bitte einen der beiden Ports nehmen
Und was sind die? Am PIO 084 sind jeweils 2x 8 Bit. Also 2 Byte. Beides ist ein Port. Ich muss die 8 Bit lediglich mit dem LCD verbinden und Bytes schicken
Und wie programmiere ich das? Sehen sie - das ist ganz simpel. sie erzeugen Z80 Assembler Code. Dabei müssen sie Daten an den Port übertragen. Die müssen dem LCD entsprechen
Sie erzeugen mit dem Assembler HEX Code. der kommt auf das ROM. Und fertig. Der HEX Code ist HEX Code und richtig übersetzt
Und wie ist es mit dem Atmega8? Genau das gleiche nur ein unterschied.
Der Witz ist, dass sowohl SATA, SCSI, LCD über gewisse Befehle verfügen
Was heisst das? Jeder OpCode in der CPU ist in HEX Code darstellbar. Ebenso hat die Festplatte und das LCD Befehle
Für das LCD könnten die Befehle lauten
Stelle dich ein, dass du Daten empfängst
Empfange Daten
und so weiter. Der Witz ist, dass das nichts miteinander gemein hat. Der OpCode von der CPU und der des LCD's. Ausser, dass sie Hex Code sind
sie können das Gleiche LCD mit dem 8086er ansteuern, als auch mit dem Zilog Z80. Während die Befehle für 8086er und Z80 anders sind, sind sie für das LCD gleich
Nur, dass die Befehle des Prozessors etwas anderes tun. sie sind keine reinen steuerungsbefehle
ADD, SUB, DIV, MUL
rechnen. Sie müssen zwischen einem Protokoll und einer Programmiersprache unterscheiden. Der Prozessor redet in Form einer Programmiersprache - Assembler - Maschinensprache
Sie haben eine Programmiersprache C - die erlaubt komplexe ausdrücke und ein Protokoll SMTP
Ihr Mailserver verwendet SMTP
Hallo ich bin so und so
Ich möchte eine Mail versenden
Der Absender lautet
Der Empfänger lautet
HELO mail.ituenix.de
MAIL FROM: david@ituenix.de
RCPT TO: david@ituenix.de
DATA
das ist ein Protokoll. Ebenso ist SCSI ein Protokoll. Ebenso hat das LCD ein ganz kleines Protokoll
Sie senden HEX Daten. Die sagen der Hardware was zu tun ist.
Was macht jetzt den Unterschied zum Atmega8
Na ja, bei dem ist es ganz einfach ein LCD an zu schliessen noch einfacher als an den Zilog Z80
Warum? Weil er PIN für PIN Port A, Port B, ...
hat, jeweils 8 Bit. Ja, ber der Z80 auch. Ja, nur - der Atmega8 ist ein Controller. das heisst, der RAM ist auf dem Atmega8 selber
Er hat nach aussen pins, daran kommt die IO
Und was ist beim Zilog Z80. Beide CPU's haben IN und OUT, auch der Atmega
Nur - der Z80 hat nach aussen den ROM oder RAM. sie brauchen für ein LCD kein RAM. Wenn sie die Daten nicht aussordentlich bearbeiten.
Wenn sie den Z80 verwenden, können sie nicht einfach Daten nach aussen tun. Weil der RAM oder das ROM oder beides sind auch noch draussen, beim Atmega8, vielleicht zusätzlich, als Spielerei
Aber - deswegen brauchen sie einen PiO
muss ich dann alle Bits kennen? Jein, wenn ich nicht weiss, worum es geht, das ist nicht gut
Aber ich muss den PIO nur dran machen
Und - wie gebe ich jetzt etwas mit printf aus
Ich habe ja C-Compiler, erzeugt HEX Code, oder ich nehme den Assembler. Wenn ich in Assembler Programmiere habe ich kein printf
Aber, wenn ich in C programmiere. Aber was jetzt? Der Witz ist, dass die Bibilotheken teil der Programmiersprache sind
Anders als bei Windows DLL, aber das weiss ich nicht so genau, ist die Bibliothek kein Teil vom OS
Jedes printf. Wird einzeln in Assembler übersetzt. Es steht in jedem Programm
Aber, printf benutzt, Interrupts hin oder her - die Interrupts des BIOS sind nur deswegen Interrupts, weil sie ausserhalb des Programms sind. Trotzdem wird über IN und OUT auf eine Addresse und Daten geschrieben.
printf verwendet, egal, ob jetzt IN und OUT, oder 0x21 Interrupts und IN und OUT. Und die sind anders
Der Atmega8 hat PORT A bis E und so weiter. Der Zilog hat auch A und B, aber das ist was anderes. Intel noch mal anders
Wie auch immer. 0x16 gibt es so eigentlich nicht beim Z80
Der witz ist, aber sie haben ja die C-Routinen
Sie haben kein printf()
Aber es gibt ein
sprintf()
Das macht folgendes
sprinft (des, "Hallo %", i);
Es schreibt die Ausgabe in einen String. Und die Ausgabe in die Ports müssen sie mit Assembler selber übernehmen. Sie schreiben in einen String formatiert. Und geben den String richtig aus
Und zu letzt, was hat mich am Z80 jetzt gehindert.
1.) Der Witz ist, der Z80 hat 16 Addressleitungen und 8 Bit Daten. das ist etwas viel. Ich muss das auf einer Streifenlochrasterplatine unterbringen. Ich sage so - bei 4 Bit platzt meine Platine bei 4 Bit. Bei 24 Bit, + Steuerleitungen wird es schwieriger. Das muss geplant werden
2.) Ich hatte ein Problem mit dem Blockschaltbild, bei der Anschlussbelegung von
Zilog Z80 und PIO 084
ich sagte ja, ich kenne noch alles nicht so genau.
Ich sage so, ich tue es inzwischen schon, von ein wenig auswendig lernen
BUSREQ
IOREQ
BUSACK
RW
RD
INT
NMI
...
Wie sie sehen, das habe ich auswendig gesagt. Ich habe mich allerdings damit schwer getan, dass ich nicht wusste
was ist
CE
OE
WE
Und das weiss ich ja jetzt. Gerade jetzt. ich habe mir kürzlich ein EEPROM Programmiergerät gekauft
Batronix BX32P Barlino II
Und - in der Verschaltung - vom Z80 und PIO 084, da steht eben auch 2x Cx beim PROM. Ich wusste nicht, genau was das ist
Fatal, wenn man das beim EPROM nicht weiss
Aber ich weiss es jetzt. Ein wenig lernen
Und meine Schaltung ist mit EEPROM gemacht. wie
Na ja, ich könnte Addierer nehmen und Register, kein Problem. Habe ich gemacht, mache ich noch mal. In dem Fall ist ein ROM drin
Addresse und Daten
Geben den nächsten Zustand vor. Geht ins und aus dem Register
Gut - ich weiss es jetzt
CE
OE
WE
fertig. Ein wenig lernen und in der Praxis und es geht wie am Schnürchen
gut, das weiss ich jetzt
3.) So schnell wird es nicht gehen, ich möchte das noch anders machen. Es muss bei 24 Bit geplant werden
Was ist zu tun
a) Um sie nicht unbefriedigt zu lassen - ich werde ein LCD an den Atmega8 anschliessen, um zu zeigen es geht. Das mache ich noch heute. Ich werde es anschliesse und Zeichen senden
Mit einer Einschränkung! Ich lerne heute. Es geht nichts über das Lernen. das anschliessen ist schön und Praxis auch. Lernen wichtiger
b) Ich werde noch einen Versuch machen. Die Oszillatoren sind Bausteine. Ich habe ein 10 MHz Oszilloskop. Ich teste, ob es gute Signale gibt
c) Es geht allerdings - auch, wenn ich das LCD an den Atmega8 anschliesse und auch, wenn ich weiss, wie man Zilog Z80 anschliesst nicht darum, ach ja, habe ich gelesen
NMI und INT
Ich habe es gelesen. Und ach ja, ich weiss es. Egal, ob es der PIO macht oder nicht. Lernen heisst etwas im Kopf verewigen und es genau zu machen. Das heisst, es immer und immer wieder lernen
Das ist mein Ziel. Bevor ich den Z80, dann anschliesse lerne ich alles ganz genau
und auch das mache ich heute, lernen nach Plan.
Das LCD weiss ich - ich muss es nur in Z80 Assembler umformulierne. Der Daraus entstandene HEX Code kommt auf das ROM.
EEPROM tut, Sieben-Segment, invertiert
- davidvajda.de
- Site Admin
- Beiträge: 1517
- Registriert: Di Jul 18, 2023 8:36 pm
- Wohnort: D-72072, Tübingen
- Kontaktdaten: