Forum: Mikrocontroller und Digitale Elektronik Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino


von Armin (sps123)


Lesenswert?

Hallo,
Ich möchte mit einem Arduino Mega ein Intersil/Harris 6654A EPROM 
auslesen (512x8).
Der hat 2xCE und 1xCS.

https://deramp.com/downloads/mfe_archive/050-Component%20Specifications/Harris/Harris%20IM6654.pdf

Ich habs mal versucht aber der dump sieht falsch aus (viele FF und 00). 
Eine vermutliche 0 ist eine 1.
60ns sind weniger als 1 cycle. Geht das nur mit direct port 
manipulation? Vielleicht hab ich auch falsch angeschlossen.

Ich verstehe auch das Datenblatt nicht ganz.
VDD is 'normally' tied to VCC.

Data remains valid until 'either' CE1 or CS returns to a higher level.

Address lines and CE2 must be valid one setup time before TAVEL and one 
hold time after TELAX.

CE1 must remain high one minimum positive pulse width before the next 
cycle can begin.

Vielen Dank im voraus!

von H. H. (Gast)


Lesenswert?

Im Datenblatt auf Seite 5, unten, steht doch alles haarklein.

Was ein Stolperstein sein könnte: /CE1 ist flankensensitiv.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Armin schrieb:
> 60ns sind weniger als 1 cycle. Geht das nur mit direct port
> manipulation?

Das ist die Zeit die es dauert bis nach dem Anlegen einer Adresse bzw. 
dem enabled die Daten auf dem Datenbus stabil sind. Für dich also quasi 
die Mindestzeit die du warten musst bevor du die Daten einlesen kannst. 
Du kannst aber auch beliebig länger warten. Dauert dann halt einen 
Moment länger bis du alle Daten ausgelesen hast, bist dafür aber auf der 
sicheren Seite.

von Armin (sps123)


Lesenswert?

Sorry, ich bin kein Fachmann, daher ja auch die Frage.
Geht das denn nun ohne direct port manipulation? (Antwort auf H.H.)
Was bedeutet normally tied?
Was bedeutet either im 2. Satz. Kann man sich da eins aussuchen?
Mit den Flanken sah ich eigentlich weniger Probleme. Alle activ low.
Aber ich bräuchte da leider etwas detailliertere Hilfe.

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

Zeig doch mal deinen bisherigen Code zum auslesen.

von Georg G. (df2au)


Lesenswert?

Armin schrieb:
> Was bedeutet normally tied?
"wird für den normalen Betrieb verbunden mit", also abgesehen von 
exotischen Experimenten immer.

> Was bedeutet either im 2. Satz. Kann man sich da eins aussuchen?
"die Daten sind gültig, bis einer der beiden..." Beide Leitungen müssen 
zum Lesen auf Low sein, sobald eine der beiden es nicht ist, werden die 
Daten ungültig.

von Sebastian R. (sebastian_r569)


Lesenswert?

Armin schrieb:
> Was bedeutet normally tied?

Dass VCC und VDD in einer normalen, typischen Anwendung das gleiche 
Potential (+5V) haben. Wenn man Bock drauf hätte, gäbe es spezielle 
Anwendungen, bei denen zwei verschiedene Spannungen sinnvoll sein 
könnten (VDD ist die Spannung der Ausgangstreiber, VCC die Versorgung 
der Logik. Steht im DB). Ist für dich aber eher irrelevant.

Armin schrieb:
> Geht das denn nun ohne direct port manipulation? (Antwort auf H.H.)

Ja. Du kannst dir beim Auslesen so viel Zeit wie du möchtest lassen.
Du kannst die Adresse anlegen und meinetwegen auch nach 5 Sekunden die 
Daten einlesen.

Du musst aber mindestens 60ns warten. Da es dir aber egal ist, ob der 
Dump nun 1 Sekunde oder 1 Minute dauert, kannst du dir auch eine 
Millisekunde pro Byte Zeit lassen.

Armin schrieb:
> Was bedeutet either im 2. Satz. Kann man sich da eins aussuchen?

Naja, jein.
Da du ja mehrere Bytes vom gleichen Chip auslesen möchtest, wäre CE 
(Strobe) für dich wohl der richtige Pin, CS (Chip Enable) kann dabei auf 
low bleiben, da du ja keinen anderen Chip selektieren möchtest und nur 
einen am Bus hast.

von Armin (sps123)


Lesenswert?

Ich habe den code von dieser Seite (geringfügig geändert, Speichergröße 
und Leitungen) mit diesen Steuerleitungen

  #define VCC_pin      24

  #define CE1_pin       28

  #define CS_pin      27

  #define CE2_pin      26

  #define VDD_pin      29

https://danceswithferrets.org/geekblog/?p=315

von H. H. (Gast)


Lesenswert?

Armin schrieb:
> geringfügig geändert

Und eben das ist zu zeigen.

von Max M. (jens2001)


Lesenswert?

Armin schrieb:
> code von dieser Seite (geringfügig geändert

DANN ZEIG IHN!!!

von Georg G. (df2au)


Lesenswert?

Armin schrieb:
> mit diesen Steuerleitungen

ohne den Code zu kennen... VCC und VDD solltest du fest verdrahten. Das 
sind KEINE Steuerleitungen.

von Ove M. (Firma: ;-) gibt es auch) (hasenstall)


Lesenswert?

Das ganze Unterfangen ist genau Null zeitkritisch! Du kannst notfalls 
auch die Daten mit der Hand anlegen und die einzelnen Bits ausmessen!
Heist, langsamer als 60ms ist kein Problem!

von Armin (sps123)


Angehängte Dateien:

Lesenswert?

Hier ist der code als Anhang

Beitrag #7390935 wurde vom Autor gelöscht.
von Georg G. (df2au)


Lesenswert?

Armin schrieb:
> Hier ist der code als Anhang

Wo finde ich die Behandlung der Chip Enable, des Strobe Signals usw...? 
Der Code ist für einen voll statischen Speicher geschrieben.

von Harald K. (kirnbichler)


Lesenswert?

Entscheidend aber ist: Änderungen an Adressleitungen werden erst mit 
einer fallenden Flanke an E̅1̅  übernommen.

Das heißt, für jedes zu lesende Byte ist wie folgt vorzugehen:

1: E̅1̅  auf high
2: Adresse anlegen
3: E̅1̅  auf low
4: (nach einem Moment Innehalten) Daten einlesen
5: bei 1: weitermachen

von Max M. (jens2001)


Lesenswert?

Harald K. schrieb:
> 2: Adresse anlegen
> 3: E̅1̅  auf low

Auch dazwischen sollte man eine kleine Pause einlegen.
Denn je nach realem elektrischen Aufbau kann es etwas dauern bis die 
Adresse stabil auf dem Bus liegt.

von Armin (sps123)


Angehängte Dateien:

Lesenswert?

Als Anfänger habe ich versucht, ähnliche Projekte zu finden.
Zuvor hatte ich einen anderen, längeren Code (von Charles Baetsen) mit 
verschiedenen EPROM typen zB 1702, 2708, 8316A, 2102.
Da war das Ergebnis komplett verzogen und jedesmal anders nach Änderung 
von delays.
Die meisten Projekte haben zusätzliche shields.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Max M. schrieb:
> Auch dazwischen sollte man eine kleine Pause einlegen.

Wenn man das mit einem AVR und dessen I/O-Ports macht, ist das implizit 
gegeben. Ansonsten ja, die "setup time" muss berücksichtigt werden.

Theoretisch. Denn die liegt laut Datenblatt bei 0 nsec (Tabelle "AC 
Electrical Characteristics" auf S. 6 / 6-273).

von Armin (sps123)


Lesenswert?

Der Anschluss an den Arduino ist kein Problem.
Man kann ja praktisch alles an die digitalen pins anschließen.
Man muss dann "nur" den richtigen code schreiben.
Leider findet man fast nur Beispiele für EEPROMs.
Ich hatte mich schon auf direct port manipulation eingestellt.
Nach tagelanger Suche fand ich 2 Beispiele (hatte schon verdrahtet).
Aber wenn's ohne geht mach ich's lieber ohne.

Ich versuch's dann nochmal mit eigenem code.
Ohne gute Beispiele ist das für Anfänger schwer.

Schon mal vielen Dank an alle!

von Rüdiger B. (rbruns)


Lesenswert?

Der Chip scheint 2704 / 2708 Kompatibelzu sein, such dir jemand der 
einen EPROM Programmierer hat.

von Armin (sps123)


Lesenswert?

Ich habe ein shield zum Auslesen von 2708. Und habe schon 8x 2708 
ausgelesen.
2 hatten teils leere Bereiche. Fehlerhaft gedumpt?
Aber brauchen die nicht 3 Spannungen zum lesen und 4 zum schreiben?

von H. H. (Gast)


Lesenswert?

Rüdiger B. schrieb:
> Der Chip scheint 2704 / 2708 Kompatibelzu sein,

Ist er nicht!

von Armin (sps123)


Lesenswert?

Ich hatte zuerst auch überlegt, ihn als 2708 auszulesen, da ich das 
shield und die Software habe.
Die pins/Layout könnte man ja modifizieren.
Aber leider konnte man die Windows Software nicht ändern und auch die 
Lese-Einstellungen nicht.
Der Quellcode ist zudem sehr kompliziert und nicht nur für verschiedene 
EPROM typen sondern auch 2 verschiedene Programme.
Aber vermutlich sind die anderen technischen Daten (Timing, Reihenfolge) 
ohnehin anders.
Und wenn man eh selbst programmieren muss, kann man ja auch direkt 
anschließen.

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


Lesenswert?

2708 benötigt drei Versorgungsspannungen.
Der 6654 hat mit 2708/04 absolut keine Gemeinsamkeiten, außer, dass es 
auch ein EEPROM ist.

Ein 2704 ist übrigens ein 2708 mit Defekt in einer Speicherhälfte.

von Joe L. (joelisa)


Lesenswert?

Armin schrieb:
> Ich möchte mit einem Arduino Mega ein Intersil/Harris 6654A EPROM
> auslesen (512x8).
> Der hat 2xCE und 1xCS.
> > 
https://deramp.com/downloads/mfe_archive/050-Component%20Specifications/Harris/Harris%20IM6654.pdf
> > Ich habs mal versucht aber der dump sieht falsch aus (viele FF und 00).
> Eine vermutliche 0 ist eine 1.
> 60ns sind weniger als 1 cycle. Geht das nur mit direct port
> manipulation? Vielleicht hab ich auch falsch angeschlossen.
> [viel unnützes Zeug gelöscht]

Was ist blos aus der guten alten uC.ger geworden, oder was habt ihr 
zugelassen, zu was sie sich entwickelt hat?

Ich komme hier alle 1-2 Wochen mal vorbei - und bin zunehmend 
schockiert, was für ein Tinnef hier verzapft wird. Ganz schlimm ists 
geworden, seit die "Letzten Guten" - wohl durch Registrierungswut - 
verscheucht wurden. Seither rennen hier leider verstärkt Semi-<censored> 
rum ...

Zu eurem Problemchen: Was redet ihr denn da? Hier gehts um 50 Jahre alte 
Technik. So ein oller COSMAC (Takt: wenige MHz) aus den '70er musste 
so'n Bauteil ganz ordinär per Businterface lesen - und ihr macht euch 
Sorgen um Setupzeiten >0/5 ns - das Timing mit einem dilettantisch 
C-Programm nachprogrammiert?

Ich wette Stein und Bein, dass es hier keine 10 Leute mehr gibt, die 
ns-Schaltungen überhaupt noch entwerfen, geschweige denn Schaltzeiten in 
diesem Bereich messen können. BTDT, hatte so was 1000-fach mit meinem 
ollen Magnastat in "bleihaltig" zusammengebraten - und mit meinem ollen 
hp1725A ausgemessen - besser als es alle China-"Lötstationen" und 
-"Rigols" je könnten.

Macht mal zu, lest das Dingens straightforward aus (ein timing diagram 
sollte man schon lesen können, nicht nur als Rigoler) und macht euch 
ECHTE Gedanken über:

> Ich habs mal versucht aber der dump sieht falsch aus (viele FF und 00).
> Eine vermutliche 0 ist eine 1.

Und dann löscht ihr die vielen 0'en und 1'en - weil anfangen könnt ihr 
damit eh nichts. Oder ihr druckt es halt aus und heftet es ab...

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

Joe L. schrieb:
> Ich komme hier alle 1-2 Wochen mal vorbei - und bin zunehmend
> schockiert, was für ein Tinnef hier verzapft wird. Ganz schlimm ists
> geworden, seit die "Letzten Guten" - wohl durch Registrierungswut -
> verscheucht wurden. Seither rennen hier leider verstärkt Semi-<censored>
> rum ...

Niemand wird dich vermissen.

von Harald K. (kirnbichler)


Lesenswert?

Wolfgang R. schrieb:
> Der 6654 hat mit 2708/04 absolut keine Gemeinsamkeiten, außer, dass es
> auch ein EEPROM ist.

Nun, das Ding hat immerhin das übliche JEDEC-Pinout.

2708 hat halt noch A9 (statt E̅2̅ ) und Vee (statt S̅), der Rest aber 
ist identisch belegt.

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


Lesenswert?

Joe L. schrieb:
> Ich komme hier alle 1-2 Wochen mal vorbei

Bei dem Schmarrn, den du verzapfst, wäre das hier auch nicht nötig 
gewesen.

von H. H. (Gast)


Lesenswert?

Harald K. schrieb:
> Wolfgang R. schrieb:
>> Der 6654 hat mit 2708/04 absolut keine Gemeinsamkeiten, außer, dass es
>> auch ein EEPROM ist.
>
> Nun, das Ding hat immerhin das übliche JEDEC-Pinout.
>
> 2708 hat halt noch A9 (statt E̅2̅ ) und Vee (statt S̅), der Rest aber
> ist identisch belegt.

Und das Gewicht ist auch noch ähnlich...

von Armin (sps123)


Angehängte Dateien:

Lesenswert?

Ich hab jetzt mal einen neuen code verfasst, abgewandelt von meinem 2. 
verlinkten.

Ich wäre sehr dankbar, wenn da mal jemand drüberschauen könnte.

Ist die Stelle mit CE1 auf low dort richtig?
Was ist eigentlich mit CE2 und CS?
Ich habe mich hiernach gerichtet.

Harald K. schrieb:
> 1: E̅1̅  auf high

> 2: Adresse anlegen

> 3: E̅1̅  auf low

> 4: (nach einem Moment Innehalten) Daten einlesen

> 5: bei 1: weitermachen

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Ich habe mich hiernach gerichtet.

Hast Du nicht, denn

>  digitalWrite(CE1_pin, LOW);

steht in setup().

Stattdessen gehört es nach jeden Aufruf von SetAddressPins(), und nach 
jeden Aufruf von ReadDataValue() gehört ein

>  digitalWrite(CE1_pin, HIGH);


In setup() hingegen gehört

>  digitalWrite(CE1_pin, HIGH);

und

>  digitalWrite(CE2_pin, LOW);

und

>  digitalWrite(CS_pin, LOW);


Deine Schleifen sind sehr, sehr ungeschickt aufgebaut.

Es ist völlig überflüssig, zwei Schleifen für High- und Low-Address zu 
haben, abgesehen davon zählen beide Schleifen je ein Element zu weit.

Genügen würde
1
  for (i = 0; i < MaxAddress; i++)
2
  {
3
    SetAddressPins(i >> 8, i & 0xff);
4
    digitalWrite(CE1_pin, LOW);
5
    dataValue = ReadDataValue();
6
    digitalWrite(CE1_pin, HIGH);
7
8
    // irgendwas mit dataValue anstellen
9
  }


MaxAddress ist 512, denn das EPROM kann 512 Byte speichern.

Wenn Du die I/O-Zugriffe nicht mit den umständlichen 
digitalRead-/Write-Funktionen, sondern einem direkten Portzugriff 
durchführen würdest (was voraussetzt, daß Du Data_D0_pin bis Data_D7_pin 
auf einen der Ports des AVR legst, und zwar in der richtigen 
Reihenfolge), dann würde die Funktion ReadDataValue() in sich 
zusammenfallen zu einem

>  dataVaue = PINB;

(wenn der verwendete Port zufälligerweise Port B des AVR ist).

Vergleichbares würde für die unteren acht Adressbits in SetAddressPins 
zutreffen, das würde mit

>  PORTA =  LowAddress;

deutlich übersichtlicher werden.

(wieder vorausgesetzt, daß die acht unteren Adressbits passend an einem 
Port angelegt werden und der PortA heißt).

von Peter D. (peda)


Lesenswert?

H. H. schrieb:
> Was ein Stolperstein sein könnte: /CE1 ist flankensensitiv.

Der ATmega2560 hat doch ein externes Memoryinterface, da kann man 
einfach den Chip direkt anschließen.
/CE1 geht an ALE, d.h. das Latch ist schon im Chip, einen extra 74HC573 
braucht man nicht.
Q7..0 werden mit A7..0 an AD7..0 der AVR angeschlossen.
/S geht an /RD des AVR.
/CE2 an GND, A8 an A8
Nicht vergessen, das externe Memoryinterface einzuschalten.
Falls der AVR zu schnell ist, kann man noch den Clock-Prescaler 
einschalten.
Und dann einfach nur auslesen, z.B. von extern in den internen SRAM 
kopieren.

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Peter D. schrieb:
> Falls der AVR zu schnell ist

Das wird er wohl sein, bei 300 bis 600 nsec Zugriffszeit ...

von Peter D. (peda)


Lesenswert?

Harald K. schrieb:
> Das wird er wohl sein, bei 300 bis 600 nsec Zugriffszeit ...

Mit Prescaler 256 und 3 Waitstates bei 16MHz dauert der Lesepuls
256 * 3 / 16MHz = 48µs
Sollte also dicke reichen.
Siehe ATmega2560 Datenblatt:
Figure 9-6. External Data Memory Cycles with SRWn1 = 1 and SRWn0 = 1

Man kann den CPU-Prescaler einschalten, die Daten in den RAM kopieren, 
dann den Prescaler wieder ausschalten und die Daten per UART senden.

: Bearbeitet durch User
von Armin (sps123)


Lesenswert?

Vielen Dank für all die Hinweise!

Also es gibt nun 3 Möglichkeiten, jeweils mit anderer Anschlussart und 
anderer Programmierung.
Direct Port Manipulation ist erst mal raus. Also alles komplett von 
vorne.

Über das externe Memory interface klingt ja jetzt am einfachsten.
Einen Code braucht man aber so oder so. Und jetzt geht's wieder um's 
timing.

Der Anschluss (Q7 mit A7 an AD7) ist auch nicht unbedingt schlichter.
Nach längerer Suche (am besten Arduino Mega XMEM) habe ich bislang nur 
diese Seite mit Code-Beispielen gefunden (eigene Bibliothek 2011, gibt 
es da mittlerweile offizielle oder bessere?). Vieles ist mir noch unklar 
(Buffergröße). Zudem fehlt da wohl der entscheidende Code + timing.

https://andybrown.me.uk/2011/08/28/512kb-sram-expansion-for-the-arduino-mega-software/

Teils findet man 10 Jahre alte Beispiele die trotz XMEM zusätzliches 
Latch und Bauteile verlangen.

Praktisch alles dreht sich um eine RAM erweiterung, also lesen und 
schreiben mit SRAM.
Als Anfänger werde ich mich da wohl ein paar Tage einlesen müssen und 
hoffe, mehr Beispiele zu finden.

Ich fand auch den Proteus Simulator. Aber zumindest in der Testversion 
fehlt das exakte Bauteil bzw kann nicht geändert werden.

Das Datenblatt ist auch sehr knapp diesbezüglich, zumindest mit code.

Wer kann mit gute Seiten/Beispiele empfehlen. Oder notfalls ein Video? 
Verschiedene Code-Schnipsel von verschiedenen Projekten zusammenklauben 
ist auch sehr fehleranfällig. Über XMEM finden man noch weniger als 
ohnehin schon.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Direct Port Manipulation ist erst mal raus.

Und warum?

von Armin (sps123)


Lesenswert?

Harald K. schrieb:
> Direct Port Manipulation

Alles hat doch offenbar Vor- und Nachteile.
Für zeitkritisches bräuchte man es halt, was ja nicht der Fall ist.
Für Anfänger leichter ist es doch auch nicht unbedingt.
Und nicht kompatibel mit anderen Boards, also Beispiele von anderen 
Projekten kann man so nicht übernehmen.
Die meisten Projekte sind über die normalen digitalen Ports und normaler 
Programmierung.

Als Anfänger kann ich nur das sagen, was ich mir bisher angelesen habe.
Via externes Memoryinterface klingt nach der Beschreibung oben 
einfacher.
Ich lasse mich natürlich gerne von anderem überzeugen.
Zum Lernen wäre es natürlich auch interessant.

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

Armin schrieb:
> Via externes Memoryinterface klingt nach der Beschreibung oben
> einfacher.

Für Profis schon, aber nicht wenn man Arduino nutzt.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Via externes Memoryinterface klingt nach der Beschreibung oben
> einfacher.

Magst Du noch erklären, warum Du Anmerkungen zu Deinem geposteten 
Versuch komplett ignorierst?

Beitrag "Re: Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino"

von Armin (sps123)


Lesenswert?

Ich dachte, diese low-level Programmierung wäre eher für Profis.
Ich meine mehrfach gelesen zu haben, dass die nur empfohlen wird, wenn 
man's unbedingt braucht. (Ich weiß nicht mehr wo).

Gut dass ich es noch nicht neu verkabelt habe. Das wäre 2x umsonst 
gewesen.

Ich muss jetzt erst mal schauen, was jetzt wirklich für mich am 
einfachsten ist. Möglichst mit einem Beispielcode, den man nur 
geringfügig abändern muss.

von Armin (sps123)


Lesenswert?

Harald K. schrieb:
> Magst Du noch erklären, warum Du Anmerkungen zu Deinem geposteten
> Versuch komplett ignorierst?

Wie gesagt, klang das mit XMEM und Direkt-Anschluss einfacher. Weil das 
ja empfohlen wurde.

von H. H. (Gast)


Lesenswert?

Harald hat alles nötige geschrieben. Du musst nur deinen letzten Code 
danach etwas anpassen.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Ich dachte, diese low-level Programmierung wäre eher für Profis.

Worauf beziehst Du Dich bitte? Auf das, was ich gerade geschrieben habe?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Armin schrieb:
> Mit den Flanken sah ich eigentlich weniger Probleme. Alle activ low.

Nein, offenbar verwechselst Du Pegel mit Flanken. Befasse Dich lieber 
mal mit den absoluten Grundlagen der Digitaltechnik.

von Armin (sps123)


Lesenswert?

Harald K. schrieb:
> Worauf beziehst Du Dich bitte? Auf das, was ich gerade geschrieben habe?

Nein.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Armin schrieb:
> Ich dachte, diese low-level Programmierung wäre eher für Profis.
> Ich meine mehrfach gelesen zu haben, dass die nur empfohlen wird, wenn
> man's unbedingt braucht. (Ich weiß nicht mehr wo).

Komisch. Als ich damals(tm) meinen ersten EPROM-Brenner an einen Sharp 
MZ-80K dranknüpperte, war mir von vornhrein völlig klar, wie die ganze 
Ansteuerung und das Timing aussehen mussten. Und damals gab es keine 
Internetforen, sondern nur das Datenblatt für mein EPROM (2716, 2732) 
und zwei Bücher über den Z80. Und meine Programmiersoftware 
funktionierte trotzdem auf Anhieb, was natürlich auch das Auslesen der 
EPROMs beinhaltete. Und damals, d.h. Mitte der 1980er Jahre, muss ich 
ca. 16 Jahre alt gewesen sein.

von Thomas Z. (usbman)


Lesenswert?

Armin schrieb:
> Möglichst mit einem Beispielcode, den man nur
> geringfügig abändern muss.

Denn hat dir Harald doch gezeigt:

> Genügen würde
1
   for (i = 0; i < MaxAddress; i++)
2
   {
3
     SetAddressPins(i >> 8, i & 0xff);
4
     digitalWrite(CE1_pin, LOW);
5
     dataValue = ReadDataValue();
6
     digitalWrite(CE1_pin, HIGH);
7
     // irgendwas mit dataValue anstellen
8
   }

Du must lediglich bei SetAddresspin() einen korrekte steigende Flanke 
haben damit die Adressen gelatched werden. Also einfacher wirds nimmer.
1
void SetAddressPins(byte HighAddress, byte LowAddress)
2
{
3
    digitalWrite(addr_A00_pin, (LowAddress & 0b00000001));
4
    digitalWrite(addr_A01_pin, (LowAddress & 0b00000010));
5
    digitalWrite(addr_A02_pin, (LowAddress & 0b00000100));
6
    digitalWrite(addr_A03_pin, (LowAddress & 0b00001000));
7
    digitalWrite(addr_A04_pin, (LowAddress & 0b00010000));
8
    digitalWrite(addr_A05_pin, (LowAddress & 0b00100000));
9
    digitalWrite(addr_A06_pin, (LowAddress & 0b01000000));
10
    digitalWrite(addr_A07_pin, (LowAddress & 0b10000000));
11
    
12
    digitalWrite(addr_A08_pin, (HighAddress & 0b00000001));
13
    digitalWrite(CE1_pin, LOW); 
14
    digitalWrite(CE1_pin, HIGH);// rising edge is strobe
15
}

von Armin (sps123)


Lesenswert?

(Mehrfacher Bearbeitungskonflikt, Änderungen nicht mehr möglich)

> Worauf beziehst Du Dich bitte? Auf das, was ich gerade geschrieben habe?

Nein. Komplett allgemein. Sorry, wenn ich mich unklar ausgedrückt habe.

Mir XMEM wurde es mir ja danach (als vermeintlich) bessere Möglichkeit 
angeboten, wissend das ich Anfänger bin. Ist ja nicht persönliches.

Auch das mit Möglichst mit einem Beispielcode... von mir war anders 
gemeint, da ja der Weg noch unklar ist. Wenn es jetzt mehrere "beste" 
Optionen gibt.

@Andreas S.
Die Theorie ist klar, steht ja im Datenblatt. Mit einem Gerät, Software 
und Büchern ist das aber anders, als wenn ein Anfänger einen Arduino in 
verschiedenen Arten programmieren muss.

von Armin (sps123)


Lesenswert?

@ Thomas Z.
Vielen Dank!
Auch hier konnte ich den post erst danach lesen, da ich gerade am 
schreiben war.

Ich werde es mal direkt probieren.

Ich bin halt vorsichtig, ich habe mir schon mal einen USB-Port am PC 
zerschossen durch solche Basteleien.

Wie man an meinem Beispiel oben sieht ist es für einen Anfänger nicht 
leicht alles 100% zu verstehen und dann korrekt umzusetzen.
Man muss nur richtig anschließen und dann nur noch...

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Der Strobe an E1 ist in SetAddresspin() nicht mal notwendig, schadet 
aber auch nicht.

von Armin (sps123)


Lesenswert?

Harald K. schrieb:
> Deine Schleifen sind sehr, sehr ungeschickt aufgebaut.
>
> Es ist völlig überflüssig, zwei Schleifen für High- und Low-Address zu
> haben, abgesehen davon zählen beide Schleifen je ein Element zu weit.

Der Code ist ja nicht von mir. Wie gesagt ein Shield für mehrere Typen. 
Wahrscheinlich erscheint er deshalb ungeschickt. Warum die Schleifen zu 
weit zählen ist mir allerdings unklar. Ich habe die Kommentare (u.a. mit 
den Pinbelegungen) und überflüssige EPROM-typen gekürzt. Das Original 
habe ich ja als EPROM5.ino verlinkt.

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


Lesenswert?

Das letzte Sondermöhren-EPROM, welches ich mit einem Arduino ausgelesen 
habe, habe ich mit HC595-Schieberegistern angesteuert. War eine Sache 
von einer halben Stunde. Ich verstehe die Komplexität hier nicht...

von Armin (sps123)


Lesenswert?

Harald K. schrieb:
> MaxAddress ist 512, denn das EPROM kann 512 Byte speichern.

Ich habe den Code vom 2704 übernommen, daher oben

word EPROMSize=511;

Warum der Programmierer später schreibt ist mir auch unklar. Bei ihm 
scheint es aber zu funktionieren.

 int MaxHighAddress = (EPROMSize)/256;

Schieberegister habe ich glaube ich keine. Müsste ja auch ohne gehen 
(beim Mega).

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

Wolfgang R. schrieb:
> Das letzte Sondermöhren-EPROM, welches ich mit einem Arduino
> ausgelesen
> habe, habe ich mit HC595-Schieberegistern angesteuert. War eine Sache
> von einer halben Stunde. Ich verstehe die Komplexität hier nicht...

Eine Blinddarm OP ist ja auch ganz einfach, für einen Chirurgen.


Armin ist ja offensichtlich Anfänger, und noch ziemlich ganz am 
Anfang...

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


Lesenswert?

H. H. schrieb:
> Eine Blinddarm OP ist ja auch ganz einfach, für einen Chirurgen.
>
> Armin ist ja offensichtlich Anfänger, und noch ziemlich ganz am
> Anfang...

Das stimmt natürlich.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Thomas Z. schrieb:
> digitalWrite(CE1_pin, HIGH);// rising edge is strobe

Also im Datenblatt steht was anderes.
Ab /E1 = high sind die Daten ungültig (4-5).

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Der Code ist ja nicht von mir. Wie gesagt ein Shield für mehrere Typen.
> Wahrscheinlich erscheint er deshalb ungeschickt. Warum die Schleifen zu
> weit zählen ist mir allerdings unklar.

1
for (i = 0; i <= 10; i++)

hat elf Schleifendurchläufe.

Armin schrieb:
> word EPROMSize=511;

Wenn man so einen Unfug macht, funktioniert die falsche Schleife 
natürlich. Ist nur halt durchs Knie ins Auge.

Logisch wäre es, die Größe als die tatsächliche Größe anzugeben. Da 
passen 512 Byte rein, also schreibt man 512 hin.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Hier zum Vergleich das Timing des AVR.
Man sieht schön, ALE = /E1.

von Armin (sps123)


Lesenswert?

Also, ich schreibe gerade den code und habs verdrahtet.
Leider sind da noch grundlegende Unklarheiten.

Ist das jetzt doch die direct Port Manipulation?
Dann war das das Missverständnis und muss das überlesen haben. Sorry!
Ich dachte, ich könnte meinen code geringfügig ändern.
Dann brauche ich doch noch spezielle (andere) binäre Definitionen am 
Anfang und muss das komplett neu aufzäumen.

Was ist mit ADR 8?
Ich habe da C0 genommen. Oder muss man C7 nehmen? Bzw vergleichbare.
Bei direktem Portzugriff muss ich da nochmals alle Pins/Ports 
prüfen/ändern.

Brauche ich noch etwas von meinem code (außer der Ausgabe?)

Unklar ist ja jetzt noch die Sache mit E1.

Wenn ich keine Unklarheiten gehabt hätte, hätte ich das beinahe schon 
ausprobiert.

: Bearbeitet durch User
von 🕵︎ Joachim L. (Gast)


Lesenswert?

I2C converter for HD44780 LCD display zweckentfremden! Fuer Adress-Bus 
noch ein paar Leitungen extra. Einer fuer Daten, der andere fuer die 
Adressen. Versorgungsspannung anlegen. Chip Enable und Output Enable 
setzen. Nochmal ins Datenblatt schauen wg. evtl. Invertierungen bei 
letzteren Signalen. Laest sich leicht zum Programmer erweitern und 
vermeidet unnoetige Loeterei und Kabelsalat. Das Timing ist voellig 
unkritisch da statisch. SRAM geht damit ebenso. S' cool man!

von Armin (sps123)


Lesenswert?

Ich versteh nur Bahnhof.
Programmieren geht mit Sicherheit ohne externe 4 Spannungen nicht (Ich 
glaube u.a. -40 V). Aber brauch ich auch nicht.
Löten tu ich auch nicht am Breadboard.
Jetzt sind es 4 Möglichkeiten.

Nach 8 Std heute habe ich nichts geschafft. Und steh ganz am Anfang.
Immerhin haben sich Missverständnisse offenbar teils aufgeklärt.

von Harald K. (kirnbichler)


Lesenswert?

Ich geb's auf.

von Nils S. (wall-e)


Lesenswert?

Wie wäre es für den Anfang einfach mal alle Adresseleitungen statisch , 
per Draht, auf Low zu legen und dann die korrekte Sequenz an die E und 
S- Signale zu legen.
So wie es im Datenblatt steht.
Kann sein das dann mit dem Multimeter auf den Datenleitungen nur Nullen 
erscheinen, kann aber auch sein das schon Einsen auftauchen. So klimpert 
man ein paar Bytes durch und weiß dann wenigstens das das PROM nicht 
defekt ist. Dann weiß man auch das die Sequenz korrekt ist.
Und dann an die CPU anschließen und genau das selbe in SW machen.
Schritt für Schritt, eine Baustelle nach der anderen.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Harald K. schrieb:
> Ich geb's auf.

Was ist denn so schwer daran, sich das Datenblatt anzuschauen, siehe 
Ausschnitt?

- Adresse anlegen, /E2 = low
- /E1 = low
- /S = low
- Lesen
- /E1 = high
- fertig

Wenn es Dir zu kompliziert ist, das den AVR automatisch machen zu 
lassen, dann mach es eben zu Fuß.

von Harald K. (kirnbichler)


Lesenswert?

Peter D. schrieb:
> Was ist denn so schwer daran, sich das Datenblatt anzuschauen, siehe
> Ausschnitt?

Du verwechelst mich. Ich habe das Datenblatt angesehen und verstanden, 
und ich habe dem Threadstarter beschrieben, wie er sein Codebeispiel 
anpassen müsste, damit er was erreichen kann.

Ich gebe nur auf, zu versuchen, dem Threadstarter helfen zu wollen. Denn 
seine Reaktionen sind ... schwierig.

von Armin (sps123)


Lesenswert?

So, ich habe jetzt (nach einem anderen Beispiel) es mit direktem 
Portzugriff versucht.
Ursprünglich waren dort 19 Adressleitungen (27c800) andere Ports usw.
Ich habe es angepasst nach dem letzten Schema von Peter D.
Harald K schrieb ja oben
1: E̅1̅  auf high
2: Adresse anlegen
3: E̅1̅  auf low
4: (nach einem Moment Innehalten) Daten einlesen
5: bei 1: weitermachen
Ich weiß auch nicht, ob da jetzt ne Flanke drin ist.
1
long addressCounter = 0;
2
byte readWord[1] = {0, 0}; //war 2 
3
void setup() {
4
  DDRA = B11111111; //A0-A7 1= output
5
  DDRL = B00000000; //Q0-Q7
6
  DDRC = B00000001; //A8  C0 
7
  pinMode(41, OUTPUT); // CE1
8
  pinMode(40, OUTPUT); // CE2
9
  pinMode(39, OUTPUT); // CS
10
  Serial.begin(9600); //war 115200
11
  digitalWrite(40, HIGH); // Flanke?
12
  digitalWrite(41, HIGH); 
13
  digitalWrite(39, HIGH);
14
15
}
16
17
void loop() {
18
  if (Serial.available() > 0) {
19
    while (addressCounter != 512) {    //war 524288 aber oben steht 0, 511?
20
      PORTC = (addressCounter & 512) >> 8; //war A 65280
21
      PORTA = addressCounter & 255; //war C
22
      digitalWrite(40, LOW); //war 3
23
      delayMicroseconds(1);
24
      digitalWrite(41, LOW); //war 2
25
      delayMicroseconds(1);
26
      digitalWrite(39, LOW); 
27
      delayMicroseconds(1);
28
      readWord[0] = PINL; //war K
29
      Serial.write(readWord, 1); //war 2
30
      digitalWrite(41, HIGH); //war 3
31
      addressCounter++;
32
    }
33
  }
34
}

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> digitalWrite(40, HIGH); // Flanke?
>   digitalWrite(41, HIGH);
>   digitalWrite(39, HIGH);

Was soll der Quatsch?

von Martin H. (horo)


Lesenswert?

Armin schrieb:
> Ich weiß auch nicht, ob da jetzt ne Flanke drin ist.

Dann nimm Dir Karopapier und Bleistift und zeichne den zeitlichen 
Verlauf auf, dann siehst Du die Flanken, wenn Dir die Abstraktion 
"Programmcode anschauen -> Zeitverlauf sehen" schwer fällt. Ein Tip, 
spendiere noch drei #defines für die 39, 40 und 41, dann fällt auch das 
Verstehen einfacher.

von Armin (sps123)


Lesenswert?

Was ist denn daran falsch. Das ist das Original Beispiel aus dem Arduino 
Forum

https://forum.arduino.cc/t/simple-27c800-eprom-dump-to-serial/437245

.
Ich fand noch ein 2. Beispiel a la

DDRD = 0b11111111;    //All pins in PORTD are outputs

PORTD = 0b11111111;    //All pins in PORTD are high

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Was ist denn daran falsch. Das ist das Original Beispiel aus dem Arduino
> Forum

Vorher hast Du wenigstens symbolische Namen verwendet, jetzt verwendest 
Du "magic numbers". So etwas ist maximal fehlerträchtig.

von Armin (sps123)


Lesenswert?

Der code funktioniert leider nicht.
Erst gab es einen Fehler bezüglich

byte readWord[1] = {0, 0};

Ich habe dann statt 1 wieder 2 genommen als auch nur {0}.

Dann ging der code, aber ich bekomme absolut keine Ausgabe.
Weder mit Serial.write noch Serial.print. Weder mit Terminal Software 
noch im Monitor.

Ich habe alles mögliche versucht, readWord, readWord, HEX, ,1 .
Mit 0, 1 und 2. Mit Klammern und ohne.
Im Original werden da 2 Bytes gelesen.

von Peter D. (peda)


Lesenswert?

Armin schrieb:
> Der code funktioniert leider nicht.

Welcher, ich sehe keinen.

Armin schrieb:
> Dann ging der code, aber ich bekomme absolut keine Ausgabe.

D.h. Deine UART sendet nicht.

Aktivier mal die Pullups an den Dateneingängen. Dann liest Du 0xFF, wenn 
es nicht funktioniert oder der EPROM leer ist.

Armin schrieb:
> Im Original werden da 2 Bytes gelesen.

Wen interessiert das.
Dein Stein hat Q7..0, das ergibt ein Byte je Lesezyklus.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Armin schrieb:
> @Andreas S.
> Die Theorie ist klar, steht ja im Datenblatt.

Offenbar scheint sie Dir nicht ansatzweise klar zu sein, denn ansonsten 
hättest Du überhaupt kein Problem damit, den entsprechenden Dreizeiler 
selbst zu schreiben.

> Mit einem Gerät, Software
> und Büchern ist das aber anders, als wenn ein Anfänger einen Arduino in
> verschiedenen Arten programmieren muss.

Genau, mit einem Arduino ist es hundertmal einfacher. Du hast offenbar 
nicht einmal eine Vorstellung davon, wie mühsam es damals war, solch ein 
Programm zu schreiben. Ein damaliger Rechner wie der MZ-80K war eher wie 
ein Microcontroller mit Bildschirm statt wie ein heutiger PC.

von Armin (sps123)


Lesenswert?

Den code habe ich etwas höher geposted (11h20).

Auch mit aktivierten Pullups keinerlei Ausgabe. Sofern ich das richtig 
und an der richtigen Stelle gemacht habe.

Gestern, mit anderem code ging es noch.
Ich hab vergessen, den noch mal zu testen. Hole ich gleich nach. Oder 
teste das Board besser anderweitig.
Das EPROM ist auch nicht leer, wie eingangs beschrieben konnte ich ja 
teilweise Bytes auslesen.
Ich kann natürlich nicht ausschließen, dass mittlerweile was defekt ist.
Aber ich vermute eher, dass der code falsch ist.
Gerade bei der Definition des zu lesenden Bytes gab es ja die 
Fehlermeldung.

Also der Arduino und UART funktionieren noch per Test.
Muss also am code und/oder Anschluss liegen (siehe Kommentare im code).

: Bearbeitet durch User
von Armin (sps123)


Lesenswert?

Ich hatte (zuletzt) CE2 und CS vertauscht.
Wie das trotz verschiedener Kabelfarben passieren konnte ist mir 
schleierhaft.
Ich hab den code neu erstellt, diesmal wieder ohne direktem Portzugriff.

Ich hab jetzt einen neuen Dump, der sieht etwas besser aus.
Allerdings habe ich weder opcodes entdeckt, noch Text, noch sonst 
sinnvolle Daten.
Die genaue Funktion des PROMs ist nicht bekannt.
Das Gerät (soweit testbar) funktioniert jedoch mit diesem PROM noch.

Der Fall ist soweit erledigt.

Ich bedanke mich vielmals für die Geduld und die Hilfe!

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Allerdings habe ich weder opcodes entdeckt

Woran meinst Du die erkennen zu können? War da denn ein Dir bekannter 
Mikroprozessor angeschlossen, dessen Opcodes Du in binärer Form 
auswendig kennst? (Und warum nur kommt mir das so unendlich 
unwahrscheinlich vor?)

von Wastl (hartundweichware)


Lesenswert?

Harald K. schrieb:
> Und warum nur kommt mir das so unendlich unwahrscheinlich vor?

Wenn man den TO so in mehr als 50 Beiträgen zu seiner Lösung
hinbeten bzw. hintragen muss dann verwundert mich das nicht.

Armin schrieb:
> Ich hab den code neu erstellt

Jedes Mal das Programm neu eingetippt?

von Armin (sps123)


Lesenswert?

Die CPU ist eine Intersil 6100, also 12 bit. Die opcodes sind zu hoch.

Die Programme habe ich teils neu erstellt. Aber nicht vollständig neu 
eingetippt.
Die Grunddefinitionen, Ausgabe usw. habe ich übernommen, aber angepasst.
Letztendlich basiert der letzte code auf dem ersten.

von Wastl (hartundweichware)


Lesenswert?

Armin schrieb:
> Die CPU ist eine Intersil 6100, also 12 bit. Die opcodes sind zu hoch.

Schon mal an Endianess gedacht?

von Armin (sps123)


Lesenswert?

Die opcodes sind zu hoch (16 bit). Außerdem startet es mit vielen 00. 
Falls der Dump korrekt ist, könnte es am ehesten eine Datentabelle sein.
Bei 76 76 76 76 kann es an Endianness nicht liegen.

von Wastl (hartundweichware)


Lesenswert?

Armin schrieb:
> Ich hab jetzt einen neuen Dump, der sieht etwas besser aus.
> Allerdings habe ich weder opcodes entdeckt, noch Text, noch sonst
> sinnvolle Daten.

Nachdem du dich standhaft weigerst sowohl "funktionsfähigen"
Code also auch deine Schaltung bzw. Aufbau zu zeigen darf man
annehmen dass da schon noch etwas oder einiges im Argen liegt.

von Armin (sps123)


Lesenswert?

Ich habe 3 codes geposted.
Der Fall war zudem für mich abgeschlossen.
Weitere Fehler kann ich natürlich nicht ausschließen.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Armin schrieb:
> Ich habe 3 codes geposted.

Die alle nicht funktioniert haben.

Armin schrieb:
> Der Fall war zudem für mich abgeschlossen.

Schon klar, wenn du schreibst:

Armin schrieb:
> Ich hab jetzt einen neuen Dump, der sieht etwas besser aus.

Armin schrieb:
> Weitere Fehler kann ich natürlich nicht ausschließen.

Das würde ich nach dem jetzigen Thread-Verlauf annehmen.

von Armin (sps123)


Lesenswert?

Ich habe jetzt nochmals den 3. code getestet. (Code wie gepostet. Die 
verwechselten Steuerleitungen nun umgesteckt). Bei der Definition von 
readWord kann ich mich im Moment nicht erinnern, was ich letztlich dort 
genommen habe. 1 und 0,0 gab ja einen Fehler. Ich glaube es war 1 und 
nur eine 0 in der Klammer. Bin auf einer anderen Partition.

Der code wurde ja (inhaltlich) nicht bemängelt; keine Fehler benannt.
Die Versorgungsleitungen sind direkt angeschlossen, der Rest steht ja im 
Kommentar.

Diesmal kommt eine Ausgabe, und diese sieht "noch etwas" besser aus. 
(Trotz im Prinzip gleicher Logik etwas anders).
Kaum noch FF. Inhalt startet nicht mit 00. Dafür 10x70 (Hex). Weiterhin 
also höchstens eine Datentabelle, was jedoch richtig sein kann, da das 
Gerät weitere PROMs hat.

Wenn sich jemand den 3. code nochmals ansehen könnte, wäre ich sehr 
dankbar!

von H. H. (Gast)


Lesenswert?

Armin schrieb:
> Der code wurde ja (inhaltlich) nicht bemängelt; keine Fehler benannt.

Hatte wohl niemand mehr Lust so wirren Code zu lesen.


Aber eines ist mir doch aufgefallen: bei deinem Code wird A8 immer 0 
sein.

von Armin (sps123)


Lesenswert?

Ich habe jetzt herausgefunden, warum ich keine Monitor Ausgabe hatte:

Die baudrate (9600) war zu niedrig. Es dauerte 1-2 Minuten bevor etwas 
kam. Da hatte ich nicht mehr mit gerechnet. Das ging bei früheren 
Versuchen und gleicher Rate wesentlich schneller.

Ich bin auch nicht sicher, ob ich die Flanke zu spät erhöht habe. Nach 
dem Lesen ist klar. Aber vor oder nach der Monitor-Ausgabe?

Es gab weitere Probleme und Fehlermeldungen. Einstellungen (insbesondere 
des Ports) bei der Terminal-Software usw. Da dies ein 
anderes/allgemeines Thema ist, erstelle ich dazu einen neuen Thread.

Bezüglich A8 habe ich verschiedene Vermutungen. Viel Möglichkeiten gibt 
es bei dem kurzen Code ja nicht. Aber ich muss erst mal die Ausgabe 
hinkriegen.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Bezüglich A8 habe ich verschiedene Vermutungen.


Armin schrieb:
> PORTC = (addressCounter & 512) >> 8; //war A 65280

Sehen wir uns doch mal an, was da rauskommt. Schritt für Schritt.
1
addresscounter | & 512 | >> 8
2
---------------+-------+-----
3
254            |    0  |   0
4
255            |    0  |   0
5
256            |    0  |   0
6
257            |    0  |   0
7
...
8
510            |    0  |   0
9
511            |    0  |   0

512 kann nicht auftreten, denn man fängt bei 0 mit dem Zählen an.

Hmm. Sieht nicht gut aus. Warum?

von Stephan S. (uxdx)


Lesenswert?

bin(512) = '0b1000000000'

d.h. eine 8-Bit-Zahl wird mit & immer 0

von Harald K. (kirnbichler)


Lesenswert?

Stephan S. schrieb:
> d.h. eine 8-Bit-Zahl wird mit & immer 0

Nö, das ist es nicht:

Armin schrieb:
> long addressCounter = 0;

von Armin (sps123)


Lesenswert?

Dank Hilfe klappt jetzt die Ausgabe (array-Fehler).

Ich habe die Tabelle auch nicht verstanden.
Auch die 2. Erklärung lässt Spekulationen des Fehlers offen.
Long oder 0. (Ich habe beides getestet).
Vermutlich soll statt 0 eine 1 stehen, damit nicht wieder von 0-511 
gezählt wird.
Offenbar ist die Zählung ab 0 doch nicht selten, zumindest 
international.
Im Original wird trotz 0 die volle Größe angegeben.

Je nach Art der Ausgabe, werden zB bei Hex stets nur 11 Bytes 
ausgegeben.

Bei addressCounter 0: 11x30, bei 1 11x00.

BIN: Ausgabe von 3 Bytes

1-OCT: 6x 162

1-DEC: 11x00

Das 12. Byte ist fast immer das Ersetzungszeichen �.

Bei Ändern des arrays, werden bei HEX-Ausgabe auch nicht Hex-Zeichen wie 
LL, sowie auch das Ersetzungszeichen ausgegeben.

Ich habe ja jetzt einen Vergleich zur Ausgabe von code 1 (mit allen 
Bytes).
Falls es nur an A8 liegt, glaube ich nicht, dass aus langen 
Datenkolonnen plötzlich sinnvoller Text oder auch opcodes rauskommen.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Auch die 2. Erklärung lässt Spekulationen des Fehlers offen.
> Long oder 0. (Ich habe beides getestet).

Du hast nicht ansatzweise verstanden, was Du da machst.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

H. H. schrieb:
> Was ein Stolperstein sein könnte: /CE1 ist flankensensitiv.

Wie schon von H.H. gesagt.
Die Prozedur in ein Ausleseprogramm umschreiben.
Und dann hast Du die Daten parallel anliegen.
Dann brauchst Du noch eine weitere Routine.
Wie willst Du die Daten dann behandelt wissen.
Im Terminal darstellen über RS232 oder irgendwo zwischen"puffern".
Das wären so meine prinzipiellen Überlegungen.
Und nein, mein Eprombrenner würde da nicht funktionieren, da wie oben 
schon gesagt, Abfrageimpuls dynamisch.
Sonst wäre das recht einfach.
Adressen anwählen, Output enable und schon ist was auf dem Ausgang.


ciao
gustav

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Alter Falter, das muss doch schon wehtun. Wenn aber Armin daran Spaß 
hat, soll er sich ruhig weiter seinem neuen Hobby widmen. Vermutlich 
riskiert er damit weder die Gesundheit von Mensch und Tier noch einen 
großen Sach- oder Umweltschaden. Vielleicht sollte man ihn mal mit Kurt 
B. verknüpfen? Ach nee, lieber dann. Dann könnte es doch noch gefährlich 
werden. Aber vielleicht Josef G. als neuer Spielkamerad? Völlig harmlos.

von Mario M. (thelonging)


Lesenswert?

Harald K. schrieb:
> Armin schrieb:
>> Auch die 2. Erklärung lässt Spekulationen des Fehlers offen.
>> Long oder 0. (Ich habe beides getestet).
>
> Du hast nicht ansatzweise verstanden, was Du da machst.

In Fachkreisen auch "Management by surprise" genannt. 😂

von Peter D. (peda)


Lesenswert?

Armin schrieb:
> Ich habe jetzt nochmals den 3. code getestet.

Schön.
Und welcher ist das denn?

Du kannst alte Beiträge direkt verlinken (Zitatfunktion) oder rechte 
Maus auf Überschrift im gelben Balken.
Und Code immer als Anhang und vollständig (compilierbar).

von Axel R. (axlr)


Lesenswert?

Habtas jetzt? Kann ja nicht soo schwer sein...
Schade, dass eben durch solche Anfragen, welche deutlich erkennen 
lassen, dass der TO überhaupt nicht verstanden hat, was da eigentlich 
passiert, der Ruf jender User, welche einen Arduino (ich nehm die "Pro 
Mini" wirklich gern für jeden Quark) hernehmen, derart zwiegespalten 
ist.
Aber ist wirklich schon kaum mehr mit anzusehen(lesen). Auch wenn die 
Ausdrucksweise vom "Joe L." weiter oben recht harsch klingt, trifft sie 
in jedem Fall zu:
Beitrag "Re: Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino"
dem ist nichts hinzuzufügen.
Einfach was kopieren und hoffen, dass es das macht, was man will. Das 
geht genau aundersrum. Aber: nun gut. Ich wollte erst garnix dazu 
schreiben. Es ärgert mich schon ..

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Full Ack an Axel R. !

von Wollvieh W. (wollvieh)


Lesenswert?

Bei den paar Bits ist man doch mit Kippschaltern und LED schneller, als 
eine Kanone auf diesen Spatz zu programmieren.

von Harald K. (kirnbichler)


Lesenswert?

Dieses sich-Antworten-geben-lassen-und-weitestgehend-ignorieren-Spiel 
läuft hier jetzt schon seit einer Woche.

von Wastl (hartundweichware)


Lesenswert?

Harald K. schrieb:
> Dieses sich-Antworten-geben-lassen-und-weitestgehend-ignorieren-Spiel
> läuft hier jetzt schon seit einer Woche.

Wenn es nur díeses eine Spiel wäre. Es kommen ja dauernd wieder
solche hochqualitativen Threads hoch. Und nix anderes mehr.

von Axel R. (axlr)


Lesenswert?

---
Hallo zusammen
---
na - habs am Rande mitbekommen, aber kein wirkliches Interesse verspürt 
bekommen, mich einzuklinken. "Wird ja so schwer nicht sein" dachte ich.
Als ich mittendrin, fast am Ende das hier las, war ich mir da nicht mehr 
so sicher
Armin schrieb:
> long addressCounter = 0;
> byte readWord[1] = {0, 0}; //war 2

das kannte ich aus nem anderen Thread ;)

Man braucht doch nur einen Port hochzählen,nämlich den, wo man die 
Adressleitungen dran hat (A0 - A7 an portpin PB0 - PB7 meinetwegen) wenn 
erledigt, A8 auf H setzen, um an den oberen Adressbereich zu kommen und 
PORTB wieder von Null anfangend, hochzählen. Wenn man genugt Ports zur 
Verfügung hat, kann man die Daten dann an einem anderen Port einlesen, 
im SRAM zwischenspeichern und blockweise auf der UART ausgeben. Wenn man 
nur wenige Portpins zur Verfügung hat, kann man den Arduino auch so 
anschliessen, wie im Datenblatt auf der letzten Seite und teilt sich 
Adress - und Datenpins. War ja früher so üblich.

Adresse anlegen (E2, S auf LOW lassen, Portpins, die man A0 - A9 
zugewiesen hat, setzen (Hochzählen) und dann E1 von HIGH nach LOW. Die 
Daten auf dem Port einlesen, wo man die Datenleitungen halt dran hat und 
E1 wieder von LOW (issa ja noch) wieder auf HIGH.
Jetzt das gelesene Byte wegspeichern, LeseIndex erhöhen und merken(!) 
und von vorn. Hat man das meinethalben 16x gemacht, lässt man den Riegel 
in Ruhe, als wenn er garnicht da wäre und gibt die 16Bytes auf der Uart 
aus. Dann wieder von vorn.
Man kann auch die Adresse direkt vorgeben und die zuordnung der Portpins 
vorab vereinbaren und die entsprechende "PORTPIN Setz - und 
Löschroutine" on the fly machen, wie im oben aufgezeigten Beispiel 
unter:
https://danceswithferrets.org/geekblog/?p=315
Hier könnte man einfach irgendeine Adresse, die einen gerade 
interesiert, angeben und diese auslesen, was aber im Programm nicht 
gemacht wird.
Was hier natürlich fehlt, ist das PIN-Wackeln des E1-Pins. Logisch, dass 
man da nix auslesen kann. Ist ja auch n ganz anderer Chip.

Jedoch: all dies steht, verteilt und sicher wohlwollend gemeint, hier 
schon beschrieben. Ziemlich gut sogar, wie ich finde.

von Harald K. (kirnbichler)


Lesenswert?

Aber das hier ist kompletter Schwachsinn. Ein Array mit nur einem 
Element Größe, das ist schon ohne den Versuch, zwei Elemente zu 
initialisieren, grober Unfug.

>> byte readWord[1] = {0, 0}; //war 2

von Axel R. (axlr)


Lesenswert?

Nee, in dem Sinn einfach nur Unwissenheit. Is ja aber auch blöd: der 
Index fängt bei NUll an, beim initialisieren wird aber nicht der Index, 
sondern die Anzahl der zu initialisierenden Elemente angegeben, wie die 
meisten von uns wissen. Das Beispiel liest auch einen 27C800 aus, also 
einen 16bit ROM. Klar, dass man da, so man garnicht mit dem Thema 
vertraut ist, komplett ins Straucheln kommt. Hier braucht es garkein 
Array. Eine "normale" Byte-Variable hätte es auch getan.
Mich wumrt die "kopieren und wundern", wenn es dann so garnicht klappen 
will.

von Axel R. (axlr)


Lesenswert?

Harald K. schrieb:
> zwei Elemente zu
> initialisieren, grober Unfug.
>
>>> byte readWord[1] = {0, 0}; //war 2

Ist es nicht sogar ein zweidimesionales Array, was so initialisert 
werden würde? Mit den geschweiften KLammern bin ich mir auch etwas 
unsicher gerade.
1
byte readword[16] = {0};
initialisiert alle 16 elemente im Array "readWord" mit "0", dachte ich.
Mit Eckigen Klammern initialisiert man jedes der Elemente separat, mit 
Komma getrennt, dachte ich. (ich bin da ganz vorsichtig in meiner 
Schreibweise, da ich mir nicht sicher bin - hab da wenig mit zu tun)

von Axel R. (axlr)


Lesenswert?

Auch scheint mir die Wandlung einer Dezimalzahl in eine binäre noch ein 
wenig Verständnis zu bedürfen. Gerade, wenn die Adresspins auf 
verschiede Ports wild verteilt sind, was ja beim Arduino meist immer 
gegeben ist. Ist zwar in den Beispielen hingeschrieben, aber nicht 
erklärt. Muss immer alles erklärt stehen? Wie man hier anschaulich 
sieht, ja. Also die Zahl einfach nacheinander mit allen zweierpotenzen 
verunden, bei treffer, Bit setzen, wenn nicht, portbit nicht setzen. 
Auch blöd erklärt. Aber: erklärt.und man kann die Arduino-Nummerierung 
verwenden und muss sich um das interene Mapping nicht scheren. Zeit 
genug ist ja für "digitalWrite".
Na - und wenn der ROM nur 512 Speicherplätze hat, muss man natürlich 
nicht auf 512 prüfen, um gegebenenfalls noch ein Portbit setzen zu 
wollen. Es gibt hierfür keinen Eingang, es gibt keinen A9-Adresseingang 
am ROM!

von H. H. (Gast)


Lesenswert?

Axel R. schrieb:
> Gerade, wenn die Adresspins auf
> verschiede Ports wild verteilt sind, was ja beim Arduino meist immer
> gegeben ist.

Er hat einen Mega2560, da hat es genug 8 Bit breite Ports.

von Harald K. (kirnbichler)


Lesenswert?

Axel R. schrieb:
> Is ja aber auch blöd: der
> Index fängt bei NUll an, beim initialisieren wird aber nicht der Index,
> sondern die Anzahl der zu initialisierenden Elemente angegeben

Du verwechselst Initialisieren mit Deklarieren.
1
int bla[2];

deklariert ein Array vom Typ int mit zwei Elementen.
1
int bla[2] = { 1 };

deklariert ein Array vom Typ int mit zwei Elementen und initialisiert 
das erste davon mit dem Wert 1.

Das zweite Element bleibt hier uninitialisiert.
1
int bla[2] = { 1, 2 };

deklariert ein Array vom Typ int mit zwei Elementen und initialisiert 
das erste davon mit dem Wert 1 und das zweite mit dem Wert 2.
1
int bla[] = { 1, 2 };

deklariert ein Array vom Typ int und bestimmt die Anzahl der Elemente 
aus der Anzahl der Initialisierer, hier also ebenfalls zwei.


Axel R. schrieb:
> Ist es nicht sogar ein zweidimesionales Array, was so initialisert
> werden würde?

Nein, das ist die Initialisierung eines eindimensionalen Arrays mit 
mindestens zwei Elementen.

Axel R. schrieb:
> Mit Eckigen Klammern initialisiert man jedes der Elemente separat, mit
> Komma getrennt,

Das gibt es erst ab C99 und ist das Array-Äquivalent der "designated 
initializers" von Strukturen.


Wie auch immer: Um das eine aus dem Eprom gelesene Byte 
zwischenzuspeichern, ist ein Array --egal, wieviele Elemente es hält-- 
einfach der falsche Ansatz.

Wie man im anderen Thread des Threadstarters sieht, ist das auch der 
Grund, warum sein Versuch, den Wert auszugegeben, so gründlich 
fehlschlägt. Weil er der Ausgabefunktion sein Array übergibt, statt den 
Wert, den er ausgeben will.

von Armin (sps123)


Lesenswert?

Ich bedanke mich bei allen, die noch versuchen, mir zu helfen.

Danke auch für neue Vorschläge, es ohne Arduino zu machen (gabs schon 
2x) oder nochmals versuchen das Datenblatt zu erläutern. Das ist nicht 
mehr nötig. Das Pin-Wackeln hatte ich ja selbst (eigenständig) eingefügt 
wie gepostet. Die Codes sind ja eben nicht nur 1:1 kopiert, sondern 
mühsam angepasst.

Wenn ich es richtig verstanden habe, geht es nur noch um 2 falsche 
Zeilen? (Definition+Ausgabe; hängt aber zusammen).

Dann wäre ich ja theoretisch kurz vor einer Lösung (und das ohne 
ausreichende Programmierkenntnisse). Aber vermutlich gibt es da noch 
mehrere Fehler (was war nochmal mit A8?)

Ich habe es jetzt ohne Array versucht. Also int readWord; und bei der 
Ausgabe Serial.print (readWord, HEX);.
Ich habe auch andere Datentypen versucht wie byte, short, unsigned usw.

Die Ausgabe wird immer besser und bei int auch etwas länger. Aber egal 
was ich mache, ich erhalte immer 1 oder mehrere Ersetzungszeichen. 
Bedeutet das, dass das EPROM defekt ist? Oder warum ist eine Hex-Ausgabe 
nicht Hex?

Geht es überhaupt so einfach in einer Zeile analog zu Serial.write. Oder 
braucht man da eine Schleife?

von Harald K. (kirnbichler)


Lesenswert?

Du machst es Dir und allen beteiligten halt maximal schwer. Dadurch, 
daß Du statt Deinen vollständigen Quelltext zu zeigen immer nur wirre 
Prosa von Dir gibst, dadurch, daß Du nicht fehlerhafte Ausgaben o.ä. 
zeigst, sondern diese ebenfalls nur durch wirre Prosa beschreibst 
("Ersetzungszeichen").

Und nein, sich auf die gezeigten Codefragmente zu beziehen ist was 
anderes, als den tatsächlich konkret von Dir verwendeten Quelltext in 
Gänze zu zeigen (als Dateianhang!).

Du musst lernen, Dich verständlich, konkret und eindeutig auszudrücken.

von Armin (sps123)


Lesenswert?

Wirre Prosa?

https://de.wikipedia.org/wiki/Ersetzungszeichen

Vollständiger code ist gepostet. 2 Änderungen erklärt.

Beitrag "Re: Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino"

Laut Forenregeln soll man nur längeren code als Anhang posten.

: Bearbeitet durch User
von Martin H. (horo)


Lesenswert?

Armin schrieb:
> Vollständiger code ist gepostet. 2 Änderungen erklärt.

Armin schrieb:
> Die Ausgabe wird immer besser und bei int auch etwas länger. Aber egal
> was ich mache, ich erhalte immer 1 oder mehrere Ersetzungszeichen.

Poste doch einfach den vollständigen Code - so wie Du ihn aktuell 
ausführst - und zeige auch dessen aktuelle Ausgabe (die immer besser 
wird), statt alles in Deinen eigenen Worten zu paraphrasieren.

Dann kann einer der mitleidigen Mitleser (die extreme Geduld zeigen) Dir 
vermutlich sofort sagen, woran es hapert. Ansonsten gab es schon 
mehrfach den Tip, kritische Teile Deines Programms separat zu testen, 
z.B. in "setup()" könntest Du schon mal bekannte Werte als HEX ausgeben 
und die Ausgabe kontrollieren:
1
Serial.println( "Test1" );
2
for ( int n = 250; n < 260; ++n )
3
    Serial.println( n, HEX );
u.s.w.

P.S. hast Du die Warnungen aktiviert - gerade als Anfänger solltest Du 
das tun (Menü: File/Preferences/Compiler Warnings, bzw. 
Datei/Voreinstellungen/Compiler-Warnungen)

von Peter D. (peda)


Lesenswert?

Armin schrieb:
> Ich habe auch andere Datentypen versucht wie byte, short, unsigned usw.

Was willst Du uns damit sagen?
Das Ding hat 8 Datenanschlüsse, also ist uint8_t (= 1 Byte) das richtige 
Format.
Deine Versuche mit "short, unsigned usw." sind daher sinnlos.
Und als Adreßzähler verwendet man vorzugsweise uint16_t, da 9 
Anschlüsse.
Unsigned Formate, um Seiteneffekte bei gesetztem MSB zu vermeiden.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Laut Forenregeln soll man nur längeren code als Anhang posten.

Noch nicht mal das hast Du verstanden. Da steht was anderes:

> Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

von Wastl (hartundweichware)


Angehängte Dateien:

Lesenswert?

Damit nichts anbrennt hab ich mal was vorbereitet.

Ist zwar dem Lernerfolg des TO nicht förderlich, aber ich
habe diesbezüglich keine Hoffnung dass da etwas weitergeht .....

Ohne das EPROM in Händen zu halten und testen zu
können: der Sketch sollte prinzipiell so funktionieren,
vielleicht muss man nochmal an den CE1, CE2 und CS
herumprobieren ob das mit dem Bus Handling so stimmt.

von 🕵︎ Joachim L. (Gast)


Lesenswert?

Wastl schrieb:

> Ohne das EPROM in Händen zu halten und testen zu
> können...

ist das nicht sehr hilfreich. Warum nimmst du nicht ein aehnlich 
organisiertes?

von H. H. (Gast)


Lesenswert?

🕵︎ Joachim L. schrieb:
> Wastl schrieb:
>
>> Ohne das EPROM in Händen zu halten und testen zu
>> können...
>
> ist das nicht sehr hilfreich. Warum nimmst du nicht ein aehnlich
> organisiertes?

EPROMs mit Adress-Latch sind selten.

von Wastl (hartundweichware)


Lesenswert?

Wer den Sketch des TO ausprobiert hat wird erkennen dass er
noch an ganz anderen Stellen bereits Probleme hat.

Nun, ich lasse Meckereien zu meinem letzten Beitrag einfach
mal so stehen.

von Roland F. (rhf)


Lesenswert?

Hallo,
Peter D. schrieb:
> Unsigned Formate...Seiteneffekte...MSB

Bist du dir sicher das Armin weiß was diese Begriffe bedeuten?

rhf

von Stephan S. (uxdx)


Lesenswert?

seit >1 Woche wird hier herumgewurstelt und ich habe irgenwie das 
Gefühl, das sich der TE gar nicht helfen lassen will, jedenfalls geht er 
nicht auf etliche Posts ein.

Sollte ein Moderator der gleichen Ansicht sein, dann bitte ich darum den 
Thread zu schliessen.

von Armin (sps123)


Lesenswert?

Vielen, vielen Dank für den Code!

Er funktioniert soweit, allerdings habe ich festgestellt, dass nach 
jedem neuen Durchlauf, andere Werte ausgegeben werden.
Es sieht aber so aus, dass es nur um etliche Bytes verschoben wird.
Ich muss dies nochmals ausgiebig prüfen.

Manche Werte hatte ich schon durch meine Codes erhalten.
Etliche Werte sind erneut 16 bit, so dass es sich zumindest nicht 
ausschließlich um opcodes handeln kann.
Nach strings muss ich noch suchen und verschiedene character sets 
testen.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Etliche Werte sind erneut 16 bit,

Nein. Ganz, ganz sicher nicht. Das ist ein 8-Bit-EPROM, da können nur 8 
Bit breite Werte (d.h. welche im Wertebereich zwischen 0 und 255 bzw. 0 
und 0xff) drinstehen. Und davon exakt 512 Stück.


Wenn Du da irgendwo 16-Bit-Werte siehst, hast Du einen Anzeige- oder 
Interpretationsfehler.

von Wastl (hartundweichware)


Lesenswert?

Harald K. schrieb:
> Wenn Du da irgendwo 16-Bit-Werte siehst, hast Du einen Anzeige- oder
> Interpretationsfehler.

Ab jetzt gibt mein Trolldetektor deutliche Alarmsignale aus.

von Harald K. (kirnbichler)


Lesenswert?

Wastl schrieb:
> Ab jetzt gibt mein Trolldetektor deutliche Alarmsignale aus.

Was exakt willst Du damit sagen?

von H. H. (Gast)


Lesenswert?

Harald K. schrieb:
> Wastl schrieb:
>> Ab jetzt gibt mein Trolldetektor deutliche Alarmsignale aus.
>
> Was exakt willst Du damit sagen?

Dass er Armin für einen Troll hält.

von 🕵︎ Joachim L. (Gast)


Lesenswert?

H. H. schrieb:
> Harald K. schrieb:
>> Wastl schrieb:
>>> Ab jetzt gibt mein Trolldetektor deutliche Alarmsignale aus.
>>
>> Was exakt willst Du damit sagen?
>
> Dass er Armin für einen Troll hält.

Er hat ja auch keinen Grund angegeben, warum er das auslesen will. Muss? 
Kann? Spass an der Freud'? Da kann einem ein solcher Gedanke schon mal 
durch das Huern flutschen.

Ich habe das Kistchen mit den ollen EPROMS an einen Tech-Schmuck Bastler 
verkauft und mir dafuer 'ne Stange TSOP Eeproms zugelegt. Die sind viel 
viel einfacher zu benutzen und man muss sich keinen abfaedeln.

von Joachim B. (jar)


Lesenswert?

H. H. schrieb:
> Dass er Armin für einen Troll hält.

es wurde mehrfach hier erklärt das immer nur 8-Bit Byte aus dem EPROM 
kommen, https://datasheetspdf.com/pdf-file/539392/Intersil/IM6654/1

die Wiederholung
Armin schrieb:
> Etliche Werte sind erneut 16 bit

ist nun trollig oder der TO versteht es nicht besser, auch dann kann man 
nicht mehr helfen!

: Bearbeitet durch User
von Stephan S. (uxdx)


Lesenswert?

Stephan S. schrieb:
> seit >1 Woche wird hier herumgewurstelt und ich habe irgenwie das
> Gefühl, das sich der TE gar nicht helfen lassen will, jedenfalls geht er
> nicht auf etliche Posts ein.
>
> Sollte ein Moderator der gleichen Ansicht sein, dann bitte ich darum den
> Thread zu schliessen.

Wastl schrieb:
> Harald K. schrieb:
>> Wenn Du da irgendwo 16-Bit-Werte siehst, hast Du einen Anzeige- oder
>> Interpretationsfehler.
>
> Ab jetzt gibt mein Trolldetektor deutliche Alarmsignale aus.

Ich möchte nochmal auf meinen Vorschlag verweisen!

von Peter D. (peda)


Lesenswert?

H. H. schrieb:
> EPROMs mit Adress-Latch sind selten.

Ich hab die früher oft verwendet, z.B. von ST den M87C257.
Man sparte damit den 74LS573 am 80C51.
Es gab auch SRAM mit Adreßlatch, z.B. in der DDR den U6516.

von Armin (sps123)


Lesenswert?

Ja, sorry, die Werte bzw Größe eines Bytes sind natürlich 8 bit.

Da die CPU aber 12 bit ist, müssen die opcodes passen. 16 bit Worte 
passen da nicht. Hatte ich aber bereits erklärt.

Kann vielleicht jemand beantworten, warum es jedesmal verschiede 
Ausgaben gibt?

Ich hatte leider noch keine Zeit die Daten komplett zu analysieren. 
Strings sind nicht in ASCII.

von Peter D. (peda)


Lesenswert?

Armin schrieb:
> Da die CPU aber 12 bit ist, müssen die opcodes passen.

Nö, die CPU bastelt sich erst intern die 12 Bit zusammen.
Entweder aus 2 Bytes und schmeißt je 4 Bit weg.
Oder je 2 Befehle aus 3 Bytes.
Welche CPU ist das denn?

von Wastl (hartundweichware)


Lesenswert?

Armin schrieb:
> Er funktioniert soweit

Ja, das übliche Spiel. Bisschen schwanger sein geht nicht.
Entweder es funktioniert oder eben nicht.

Armin schrieb:
> Kann vielleicht jemand beantworten, warum es jedesmal verschiede
> Ausgaben gibt?

Vermutlich weil das Bus-Handling noch nicht stimmt. Wenn drei
Select- bzw Enable-Signale vorhanden bzw. zu steuern sind sagt
mir der gesunde Menschenverstand dass die auch zyklisch bedient
werden müssen. Das ist im aktuellen Code nicht der Fall. Nur CE1
wird dauernd auf und ab gesteuert.

Wastl schrieb:
> Ohne das EPROM in Händen zu halten und testen zu
> können: der Sketch sollte prinzipiell so funktionieren,
> vielleicht muss man nochmal an den CE1, CE2 und CS
> herumprobieren ob das mit dem Bus Handling so stimmt.

von Axel R. (axlr)


Lesenswert?

haah, fetzt

Vielleicht packst du deinen Kram zusammen und es findet sich jemand, der 
dir das fürn größeres Packen Pall-Mall-Rot schnell am Samstag richtet 
und es Dir zurückschickt. Iss es denn wichtig? Was willst' denn 
"häggen"?
Das wird doch hier nichts.

von H. H. (Gast)


Lesenswert?

Wastl schrieb:
> Wenn drei
> Select- bzw Enable-Signale vorhanden bzw. zu steuern sind sagt
> mir der gesunde Menschenverstand dass die auch zyklisch bedient
> werden müssen. Das ist im aktuellen Code nicht der Fall. Nur CE1
> wird dauernd auf und ab gesteuert.

Du hast nicht ins Datenblatt gesehen.

von Wastl (hartundweichware)


Lesenswert?

H. H. schrieb:
> Du hast nicht ins Datenblatt gesehen.

Hätte ich das irgendwo behauptet? Dann bitte das Zitat dazu.

von Axel R. (axlr)


Lesenswert?

...mit /CE1 "wackeln" sollte reichen, oder?

von Martin H. (horo)


Lesenswert?

Armin schrieb:
> Strings sind nicht in ASCII.

Zeig doch mal (per C&P, nicht in Deinen eigenen Worten).

von Wastl (hartundweichware)


Lesenswert?

Axel R. schrieb:
> ...mit /CE1 "wackeln" sollte reichen, oder?

Vielleicht muss man die Adresse erst mal 'reinlatchen. So
einfach mir nichts dir nichts eine Adresse Anlegen und sich
freuen muss nicht unbedingt funktionieren.

von H. H. (Gast)


Lesenswert?

Wastl schrieb:
> H. H. schrieb:
>> Du hast nicht ins Datenblatt gesehen.
>
> Hätte ich das irgendwo behauptet? Dann bitte das Zitat dazu.

"Wenn man keine Ahnung hat, einfach die Klappe halten!"

von Axel R. (axlr)


Angehängte Dateien:

Lesenswert?

Wolln, wir das alles nochmal durchnehmen? Das wurde doch nun hinreichend 
erklärt, wie man das Teil ausliest...

/E2 und /S können auf LOW bleiben.
Adresse anlegen, /E1 auf LOW ziehen
Daten auslesen
/E1 wieder auf H
vorn vorn

: Bearbeitet durch User
von Armin (sps123)


Lesenswert?

Peter D. schrieb:
> Welche CPU ist das denn?

Armin schrieb:
> Die CPU ist eine Intersil 6100, also 12 bit.

Die anderen 8 PROMs haben 12 bit Worte, gebildet aus 2 Bytes.

Es handelt sich um ein SPS Programmiergerät. Da ich in den 8 PROMs auch 
nach umfangreicher Suche und verschiedenen Kodierungen keine Strings 
finden kann vermutete ich diese in dem letzten PROM. Oder wenigstens 
opcodes.

Lebensnotwendig ist es nicht, verschicken lohnt nicht.

Der dump startet mit 70 70 00 00. Etwa die Hälfte ist 70 00 (Hex).

Strings können es ohnehin nicht sein, dafür gibt es nicht genügend 
unterschiedliche Bytes. Ich erinnere mich noch an folgende Bytes 20 30 
BD 8D AD, ganz wenig FF. Als strings findet man im prinzip nur ab und zu 
ein p (70). Das Gerät kann aber auch kein ASCII, soviel ist bekannt.

von H. H. (Gast)


Lesenswert?

Du hast eben auch keinerlei Ahnung von Code für eine PDP-8.

von Armin (sps123)


Lesenswert?

H. H. schrieb:
> Du hast eben auch keinerlei Ahnung von Code für eine PDP-8.

Ich beschäftige mich erst seit etwa 1 Jahr damit.

von H. H. (Gast)


Lesenswert?

Armin schrieb:
> H. H. schrieb:
>> Du hast eben auch keinerlei Ahnung von Code für eine PDP-8.
>
> Ich beschäftige mich erst seit etwa 1 Jahr damit.

Dann wird es wohl noch Äonen dauern...

von Armin (sps123)


Lesenswert?

Wastl schrieb:
> Entweder es funktioniert oder eben nicht.

Ja, wenn ich die Wahl habe, dann funktioniert es nicht.
Aber der Code ist ja nicht gänzlich falsch.

Wahrscheinlich nur eine Kleinigkeit. Ich vermute dass es irgendwie am 
Timing liegt (chip und/oder Arduino).

Ich habe einen Intersil 6654 AI. Der hat andere Zugriffszeiten.
Ich weiß nicht, ob diese beim Auslesen eine Rolle spielen, aber ich sehe 
die Charakteristika gar nicht im Code.

TE1LE2X Chip Enable Hold time minimum 60 ns
E1 Pulse Width (Negative) min 300 ns
Sowie aber auch andere max Werte wie OE time max 60 ns.

Und für High Speed Zugriff braucht der 10V (Seite 1) oder sehe ich das 
falsch?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Armin schrieb:
> Ja, wenn ich die Wahl habe, dann funktioniert es nicht.

Exakt so ist es.

> Aber der Code ist ja nicht gänzlich falsch.

Wenn Du weiterhin solch ein Geheimnis aus Deinem Programmcode machst, 
kann ihn niemand überprüfen. Deine bisher völlig 
durcheinandergewürfelten Codeschnipsel lassen keine Aussage zu. Und 
insbesondere kennen wir auch nicht Deinen Aufbau, d.h. welche Pins 
miteinander verbunden sind, und vor allem auch nicht Dein 
Stromversorgungskonzept.

> Wahrscheinlich nur eine Kleinigkeit. Ich vermute dass es irgendwie am
> Timing liegt (chip und/oder Arduino).

Nein, nicht der Chip oder der Arduino sind daran schuld, sondern 
ausschließlich DU selbst. Bei normalem Portgeklimper per Firmware 
dürfte es Dir allerdings kaum gelingen, ein Timing zu erzeugen, das zu 
schnell für das EPROM wäre. Und außerdem könntest Du ja ggf. mittendrin 
auch explizite Verzögerungen einbauen.

> Ich habe einen Intersil 6654 AI. Der hat andere Zugriffszeiten.
> Ich weiß nicht, ob diese beim Auslesen eine Rolle spielen, aber ich sehe
> die Charakteristika gar nicht im Code.

Beim Erzeugen des Timing per Firmware spielt das nahezu überhaupt keine 
Rolle. Außerdem müsstest Du das ja schon längst mit einem Oszilloskop 
oder Logikanalysator geprüft haben. Warum verheimlichst Du auch schon 
wieder solche Bilder/Fotos/Screenshots/Tabellen?

> TE1LE2X Chip Enable Hold time minimum 60 ns
> E1 Pulse Width (Negative) min 300 ns
> Sowie aber auch andere max Werte wie OE time max 60 ns.

Das sind alles nur die zugesicherten maximalen Latenzen des EPROMs. Jede 
langsamere Ansteuerung ist zulässig.

> Und für High Speed Zugriff braucht der 10V (Seite 1) oder sehe ich das
> falsch?

So sieht es aus. Bei 10 V ist aber Dein Arduino hinüber. Außerdem ist 
das aus den genannten Gründen nicht erforderlich.

von Armin (sps123)


Lesenswert?

Andreas S. schrieb:
> ein Geheimnis aus Deinem Programmcode machst

Es geht doch gar nicht mehr um meinen Code, sondern um den von Wastl

Beitrag "Re: Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino"

Die Pins sind natürlich genauso angeschlossen. Versorgungsleitungen 
direkt.

Andreas S. schrieb:
> schon längst mit einem Oszilloskop
> oder Logikanalysator geprüft haben

Habe ich als Anfänger natürlich nicht.

Andreas S. schrieb:
> könntest Du ja ggf. mittendrin
> auch explizite Verzögerungen einbauen

Das habe ich gestern mal schon vor deinem Post versucht. Je nach 
Verzögerung ist das Ergebnis immer anders, als auch nach jedem Durchlauf 
mit gleichen Einstellungen. Die Daten sind komplett falsch. Auffällig 
ist, dass es in der 1. Hälfte sehr viele 00 sind und in der 2. Hälfte 
viele FF. Praktisch jedes 2. Byte.

Auch auffällig ist, dass bei weiteren Durchläufen sich nicht nur Bytes 
verschieben, sondern auch einzelne Bytes bzw Bits geringfügig ändern. 
Aus 70 wird manchmal 72. Im Prinzip Datenmüll. Und weiterhin viel zu 
wenig unterschiedliche Bytes. Das letzte Byte ist (wenn es nicht FF ist) 
fast immer 85. Das 1. Byte häufig 00 oder 38, manchmal 10.

Wenn es nicht am Timing liegt, woran könnte es denn noch liegen?

von H. H. (Gast)


Lesenswert?

Armin schrieb:
> Wenn es nicht am Timing liegt, woran könnte es denn noch liegen?

Ein interotaler Fehler!

von Peter D. (peda)


Lesenswert?

Armin schrieb:
> Es geht doch gar nicht mehr um meinen Code, sondern um den von Wastl

sprintf (prbuff, "addr 0x%04X:  val 0x%02X \r\n", addressCounter, 
byte_read);

printf möchte Werte 16-bittig:
1
sprintf (prbuff, "addr 0x%04X:  val 0x%02X \r\n", addressCounter, (uint16_t)byte_read);

von Armin (sps123)


Lesenswert?

Peter D. schrieb:
> printf möchte Werte 16-bittig

Leider gleiches Problem der Ausgabe. (Jede Zeile ein neuer Durchlauf)

00 70 00 00 20 ..

00 30 00 00 20

00 30 00 00 30

Bei Verzögerungen (an verschiedenen Stellen mit verschiedenen Werten 
getestet, hier 4ms nach der letzten Flanke)

70 00 00 70

00 30 00 00

Vermutlich muss die Definition oben auch geändert werden?

Gibt es denn noch andere Fehler? Vielleicht Tipps bzw. 
Verzögerungswerte?

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Wenn es nicht am Timing liegt, woran könnte es denn noch liegen?

Zeig mal ein Bild Deines Aufbaus. Keine Skizze, ein Foto.

von Armin (sps123)


Lesenswert?

Wieviel Fotos soll ich denn posten, so dass man alles erkennen kann? 
Oder was soll genau dargestellt werden? 1 Foto reicht da sicher nicht.

Und warum reicht da keine Beschreibung der Anschlüsse?

Die Address- und Datenleitungen sind definitiv richtig (der Reihe nach 
gemäß Portskizze). Die Steuerleitungen wurden nochmals überprüft, da 
wurde ja schon eine Verwechslung erkannt.
Bleiben die Versorgungsleitungen. Wie gesagt direkt angeschlossen. GND 
(VSS) an GND. VCC und VDD an +5V (Digitalanschlüsse).

von Peter D. (peda)


Lesenswert?

Sieht so aus, als würden Deine Datenpins floaten.
Hast Du mal die Pullups an den Dateneingängen aktiviert, wie oben 
empfohlen. Dann muß ohne EPROM 0xFF gelesen werden.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Wieviel Fotos soll ich denn posten, so dass man alles erkennen kann?

So viele, wie nötig sind.

Armin schrieb:
> Und warum reicht da keine Beschreibung der Anschlüsse?

Weil damit eine Fehlerquelle nicht erkennbar ist. Du hast eine, Du 
siehst sie nicht. Andere, die mehr Erfahrung als Du haben, können aber 
anhand eines Bildes Deines Aufbaus möglicherweise mehr erkennen.

Willst Du Dir helfen lassen? Wozu hast Du diesen Thread hier angelegt? 
Also.

von Armin (sps123)


Lesenswert?

Ich werde es nachm Essen nochmals mit den Pullups versuchen.

Hatte ich zwar bereits, aber da unter anderen Bedingungen.

Dauert etwas, auch weil die Angaben für einen Anfänger nicht konkret 
genug sind. Ich musste damals schon selbst recherchieren, wie man das 
überhaupt macht. Da ich ja selbst lernen soll, dauert das eben dann 
Tage.

Muss das EPROM denn raus dazu? Oder was ist sonst zu beachten? Alte 
Befehle raus? Oder zusätzlich, wenn ja wo?

Gute Fotos zu erstellen ist derzeit schwierig (Lichtverhältnisse).

von Armin (sps123)


Lesenswert?

Bei Aktivierung der Pullups ist nicht alles FF.

Beim ersten Durchlauf ist Byte 1 00, dann folgen 15x72 dann 16xFF, dann 
wieder 16x72 usw. 15x abwechselnd Reihen von 72 und FF, der Rest ist FF.

Beim 2. Durchlauf startet es mit 16x72. Sonst wie oben.

Was bedeutet dies nun?

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


Lesenswert?

Armin schrieb:
> Bei Aktivierung der Pullups ist nicht alles FF.
>
> Beim ersten Durchlauf ist Byte 1 00, dann folgen 15x72 dann 16xFF, dann
> wieder 16x72 usw. 15x abwechselnd Reihen von 72 und FF, der Rest ist FF.
>
> Beim 2. Durchlauf startet es mit 16x72. Sonst wie oben.
>
> Was bedeutet dies nun?

Mit oder ohne eingestecktes EPROM?

von Armin (sps123)


Lesenswert?

Wolfgang R. schrieb:
> Mit oder ohne eingestecktes EPROM?

Mit EPROM

von Axel R. (axlr)


Lesenswert?

Armin schrieb:
> Lebensnotwendig ist es nicht, verschicken lohnt nicht.

Wie Du meinst.
man könnte der Nachwelt (alle, die in nächster Zeit in Bedrullie 
geraten, sowas auslesen zu müsen) einen RiesenGefallen tun, und zeigen 
wie es geht. Meinthalben Durchaus mit einem ATmega2560 Adruino, aber 
als Alternative auch mit gemeinsamen Adress - und Datenleitungen. Denn 
das ist ja gerade der Vorteil dieses Typs. Dann kann man auch ein Setup 
hernehmen, bei dem nicht so viele Porst zur Verfügung stehen.
Andererseits wurde ja schon auf funktionierende Beispiele verlinkt, die 
- rein von der Architektur her - eine Auslesen ermöglichen.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Armin schrieb:
> Die Address- und Datenleitungen sind definitiv richtig (der Reihe nach
> gemäß Portskizze). Die Steuerleitungen wurden nochmals überprüft, da
> wurde ja schon eine Verwechslung erkannt.

Dann funktioniert doch alles! Problem gelöst.

von Armin (sps123)


Lesenswert?

Axel R. schrieb:
> man könnte der Nachwelt (alle, die in nächster Zeit in Bedrullie
> geraten, sowas auslesen zu müsen) einen RiesenGefallen tun

Es heißt doch unisono, dass alles ein Kinderspiel sei, und es nur an mir 
läge.

Und dass das EPROM gar nicht so selten sei.

Es wäre zwar wirklich interessant, ob das jemand schafft, oder gar zu 
beschreiben. Aber ich kann ja alle Anweisungen ausprobieren.

Übrigens: Sämtliche funktionierende Beispiellinks stammen von mir.

von Harald K. (kirnbichler)


Lesenswert?

Und Du hast noch nicht mal eine Lampe in Deinen Räumlichkeiten, so daß 
es nicht möglich ist, wenigestens ein Bild Deines perfekt 
funktionierenden und garantiert total richtigen Versuchaufsbaus zu 
machen und zu zeigen. Klar.

von Armin (sps123)


Lesenswert?

Ich habe jetzt einen Fehler (selbst) gefunden.

VPP hatte ich nicht angeschlossen

(weil ich nicht programmiere und auch die Spannung nicht habe) muss aber 
beim Lesen an 5V. Geschenkt.
Geht aber immer noch nicht.

Ich habe mal CS direkt an GND angeschlossen.
Die Ausgabe ist jetzt stabil und nicht nach jedem Durchlauf verschoben. 
Ich habe aber den Eindruck, dass dies erst stabil ist, wenn der Chip 
warm wird.

Nach wie vor gibt es viele falsche Werte (häufig 00 und FF, FE, F8), ab 
und zu kommt hier und da ein Byte, was richtig sein könnte, auch in 
späteren Durchläufen häufig das selbe. Es könnte jetzt lediglich am 
Timing liegen. Habe aber da vieles ausprobiert.

Muss da vielleicht noch was mit E2 passieren? Datenblatt: Latched by E1. 
Und: wenn die Adresse gültig ist, ist die Ausgabe ungültig und 
umgekehrt. Davor und danach ist man im Z-Zustand. Vielleicht ist auch 
die Spannung nicht stabil 5V oder man braucht doch 10V. Ich hatte 
zwischenzeitlich auch andere Ports versucht. Pullup ohne EPROM bringt 
FF. Und ja, meine Beleuchtung ist nicht gut genug, für gute, 
verwacklungsfreie Fotos.

Ich muss den Chip auch nochmal einbauen, ob da eine Fehlermeldung kommt. 
Falls nicht könnte er aber auch schon vorher defekt gewesen sein.

von Harald K. (kirnbichler)


Lesenswert?

Da Du nach wie vor kein Bild von Deinem Aufbau zeigst, frage ich mich, 
was diese Berichte für einen Zweck haben.

von Armin (sps123)


Lesenswert?

Harald K. schrieb:
> was diese Berichte für einen Zweck haben

Vielleicht hat da jemand Tipps und kann auf meine Fragen eingehen. 
Niemand wollte bisher ernsthaft Bilder sehen. Alles ist ja beschrieben.

von H. H. (Gast)


Lesenswert?

Armin schrieb:
> Vielleicht hat da jemand Tipps und kann auf meine Fragen eingehen.

Damit du die Antworten ein weiteres mal ignorierst?


> Niemand wollte bisher ernsthaft Bilder sehen. Alles ist ja beschrieben.

In deinen Träumen.

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Niemand wollte bisher ernsthaft Bilder sehen.

Es wäre mir neu, daß ich "niemand" bin. Meine Fragen und im übrigen auch 
hilfreichen Hinweise an Dich waren hingegen ernstgemeint.

von Wastl (hartundweichware)


Lesenswert?

Armin schrieb:
> Niemand wollte bisher ernsthaft Bilder sehen. Alles ist ja beschrieben.

Niemand kann beurteien ob du auch beim Aufbau alles richtig
gemacht hast da man durch deine blumigen Beschreibungen nichts
sehen kann. Durch falschen Aufbau kann nichts passieren? Ach
so, dann funktioniert ja alles und dein Thread kann hiermit
beendet/geschlossen werden.

Ich behaupte mal es muss massive Gründe geben weswegen du
hier keine Bilder deines Testaufbaus zeigst, sonst wären
du und wir schon einen grossen Schritt weiter.

von Klaus (feelfree)


Lesenswert?

Das ist schon Realsatire was hier abgeht.
Solange aber immer noch gut gemeinte Antworten kommen, wird Armin immer 
so weiter machen.

Deshalb mein Vorschlag: Bevor Armin nicht
- Bilder seines Aufbaus
- den aktuell verwendeten Code
- und die dazugehörige Ausgabe

bringt, sollte auch keiner mehr irgendwie geartete, gut gemeinte Tipps 
geben. Dann geht's es entweder voran oder es ist Ruhe, und beides wäre 
auf seine Art gut.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Klaus schrieb:
> Solange aber immer noch gut gemeinte Antworten kommen .....
> ........

Du hast ja sooo Recht. Eigentlich sollte man hier zumachen.

von Armin (sps123)


Lesenswert?

Der Code ist exakt der von Wastl.

Die Ausgabe ist jedesmal anders (Datenmüll).

Blieben die Bilder.

Warum man wegen ein paar eventuell strittigen Leitungen, deren 
Anschlüsse man besprechen könnte, Bilder posten soll bleibt unklar.

Da hier wieder Spekulationen auftauchen (es gab ja schon mal andere, die 
ich widerlegt habe, zB die CPU), geht es doch offenbar um etwas anderes 
bei den Fotos. Genau das gleiche wie "meine" wirren Codes oder 
vermeintlichen Fragmente, die nachher auch niemand mehr sehen wollte.

Gut gemeinte Antworten... Nur nicht zum Thema.

von H. H. (Gast)


Lesenswert?

EOT

von Harald K. (kirnbichler)


Lesenswert?

Armin schrieb:
> Warum man wegen ein paar eventuell strittigen Leitungen, deren
> Anschlüsse man besprechen könnte, Bilder posten soll bleibt unklar.

Weil Menschen mit Erfahrung und Ahnung auf diesen Bildern möglicherweise 
erkennen können, was Du die ganze Zeit lang falsch machst. Ein EPROM 
auszulesen, auch eines mit einer etwas spezielleren Ansteuerung wie dem, 
das Du hier hast, ist eine trivial simple Aufgabe.

Und die bekommst Du sehr offenkundig nicht hin. Also wird irgendwo noch 
ein Problem vorhanden sein, das man weder in Deinen blumigen 
Umschreibungen noch Deinem "unveränderten" Code von Wastl (damit wirst 
Du ja vermutlich das hier meinen 
Beitrag "Re: Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino") erahnen kann.

Denn: Hättest Du alles richtig gemacht, würde es ja funktionieren.

Da es aber nicht funktioniert, hast Du irgendwo irgendwas eben doch 
nicht richtig gemacht.

von Roland F. (rhf)


Lesenswert?

Hallo,
Armin schrieb:
> Warum man wegen ein paar eventuell strittigen Leitungen, deren
> Anschlüsse man besprechen könnte, Bilder posten soll bleibt unklar.

Weil hier viele (eigentlich alle) glauben (oder eher sicher sind) das du 
elementare Verdrahtungsfehler gemacht hast, die genau für die von dir 
beschriebenen Effekte verantwortlich sind.

> ...Nur nicht zum Thema.

Ich habe mittlerweile den Eindruck, das hier so ziemlich alle, mit 
Ausnahme von dir, im Thema sind.

rhf

: Bearbeitet durch User
von Stephan S. (uxdx)


Lesenswert?

Ich habe schon am 20.04 ein Ende des Threads gefordert 
Beitrag "Re: Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino" jetzt wird es 
wirklich Zeit, dass ein Mod den Laden dicht macht.

Bitte - Bitte - Bitte

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Stephan S. schrieb:
> jetzt wird es
> wirklich Zeit, dass ein Mod den Laden dicht macht.

Du brauchst doch einfach nicht mehr mitzulesen. Solange hier nicht 
Godwin's Law erfüllt, ist es doch eher amüsant, gelegentlich solch einen 
völlig lernresistenten Vollhonk zuzuschauen.

von Axel R. (axlr)


Lesenswert?

der EEPROM wird auf einem anderen Breadbord (die Dinger mit den 
viereckigen Löchern, die ungtereinander zu viert verbunden sind) stecken 
und Masse wird nicht mit dem Arduino verbunden sein, oder ein Loch 
daneben stecken, oder Horizontal und Vertikal in den Lochreiehen 
vertauscht worden sein und daher keine Verbindung bestehen. irgendsowas 
triviales wird es am Ende sein. Ist doch immer so: wenn's nur ne IR-LED 
ist, die verkehrtrum angeschlossen ist.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.