EEPROM tut, Sieben-Segment, invertiert

Benutzeravatar
davidvajda.de
Site Admin
Beiträge: 1488
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

Re: EEPROM tut, Sieben-Segment, invertiert

Beitrag von davidvajda.de »

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