Forum: Mikrocontroller und Digitale Elektronik Steuereinheit eines Dartautomaten


von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Hallo, ich würde gerne herausfinden mit welcher Logic die Steuereinheit 
eines Dartautomaten die Matrix abscannt. Kann mir dabei jemand 
behilflich sein?

von STK500-Besitzer (Gast)


Lesenswert?

Martin H. schrieb:
> Hallo, ich würde gerne herausfinden mit welcher Logic die Steuereinheit
> eines Dartautomaten die Matrix abscannt. Kann mir dabei jemand
> behilflich sein?

Jedes Feld hat einen eigen Tastkontakt.
Die fragt man der Reihe nach, umlaufend ab.
Wie jede andere (Matrix-)Tastatur auch.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Martin H. schrieb:
> mit welcher Logic die Steuereinheit eines Dartautomaten die Matrix
> abscannt.

hatten wird doch erst vor Kurzem ..

Beitrag "Dart Matrix auslesen"


> Kann mir dabei jemand behilflich sein?

danke, gerne

PS: Warum einen separaten Thread?

: Bearbeitet durch User
von Martin H. (Firma: 1993) (hubii)


Lesenswert?

STK500-Besitzer schrieb:
> Martin H. schrieb:
>> Hallo, ich würde gerne herausfinden mit welcher Logic die Steuereinheit
>> eines Dartautomaten die Matrix abscannt. Kann mir dabei jemand
>> behilflich sein?
>
> Jedes Feld hat einen eigen Tastkontakt.
> Die fragt man der Reihe nach, umlaufend ab.
> Wie jede andere (Matrix-)Tastatur auch.

Wie meinst du der Reihe nach. Es sind 16x4 Felder. Kann ich das 
irgendwie überprüfen?

Könntest du mir ein Bespiel dafür geben?

Wegstaben V. schrieb:
> Martin H. schrieb:
>> mit welcher Logic die Steuereinheit eines Dartautomaten die Matrix
>> abscannt.
>
> hatten wird doch erst vor Kurzem ..
>
> Beitrag "Dart Matrix auslesen"
>
>> Kann mir dabei jemand behilflich sein?
>
> danke, gerne
>
> PS: Warum einen separaten Thread?

So ähnliches ist es.

von STK500-Besitzer (Gast)


Lesenswert?

Martin H. schrieb:
> Wie meinst du der Reihe nach. Es sind 16x4 Felder. Kann ich das
> irgendwie überprüfen?
>
> Könntest du mir ein Bespiel dafür geben?

Ich habe das mal für dich gegoogelt:
Beitrag "Matrix-Tastatur"

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Kann ich irgendwie den Scanrhytmus überprüfen?

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Martin H. schrieb:
> Kann ich irgendwie den Scanrhytmus überprüfen?

versuche mal genauer zu beschreiben, was dein Problem ist (also was du 
genau NICHT weisst)

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Konkret habe ich Arduino und möchte gleichzeitig das Signal der 
Dartmatrix an das Steuergerätes des Dartautomaten und den Arduino 
hängen.

Dafür müsste ich den Arduino mit dem Scanrhytmus des Steuergerätes 
synchronisieren.

Ich habe dafür auch einen Logic Analysator zur Verfügung.

Leider sind all meine Versuche bisher ohne 100%igen Erfolg gewesen.

Deshalb muss ich herausfinden wann und wie oft das Steuergerät die Pins 
abfragt und mich daran synchronisieren.

von Cyblord -. (cyblord)


Lesenswert?

Martin H. schrieb:
> Deshalb muss ich herausfinden wann und wie oft das Steuergerät die Pins
> abfragt und mich daran synchronisieren.

Normalerweise werden bei einer Matrix Zeilen und Spalten gebildet. Man 
kann zwar von außen sehen, welche Spalte gerade aktiv geschaltet ist, 
wann aber welcher Taster (Zeile) eingelesen wird sieht man nicht.

Hast du denn den Schaltplan von dem Ding? Wenigstens von der Matrix? 
Vorher geht sowieso nichts.

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

https://www.darts1.de/dartautomat/Royal-Dart-Profi-1988-03.pdf hier 
hätte ich eine Doku zur Verfügung.

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

https://www.darts1.de/dartautomat/Royal-Dart-Profi-1988-03.pdf hier 
hätte ich
eine Doku zur Verfügung.

Cyblord -. schrieb:
> Man kann zwar von außen sehen, welche Spalte gerade aktiv geschaltet ist,
> wann aber welcher Taster (Zeile) eingelesen wird sieht man nicht.

Das ist der springende Punkt. Wie finde ich das heraus ?

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Martin H. schrieb:
> Das ist der springende Punkt. Wie finde ich das heraus ?

Gar nicht. Musst du aber auch nicht. Sobald die Spalte aktiv geschaltet 
wurde, kannst du selbst alle Taster einlesen. Wann der Automat das tut 
kann dir egal sein.

Wenn es sich überhaupt um eine Matrix handelt.

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Könntest du mir erläutern wie das funktioniert? Ohne ein Output Befehl 
zu nutzen.

: Bearbeitet durch User
von Martin H. (Firma: 1993) (hubii)


Lesenswert?

ich hätte folgendes Beispiel parat:
1
for (int x=0; x<4; x++) {
2
    digitalWrite(PO_[0], HIGH);
3
    digitalWrite(PO_[1], HIGH);
4
    digitalWrite(PO_[2], HIGH);
5
    digitalWrite(PO_[3], HIGH);
6
    digitalWrite(PO_[x], LOW);
7
8
    for (int y=0; y<16; y++) {
9
      bI[x][y]  = digitalRead(PI_[y]);
10
      // Wenn getroffen dann
11
      if (bI[x][y] == 0) {
12
        WurfSchicken(x, y);
13
      }
14
    }
15
  }

somit würde ich immer alles empfangen, jedoch ist es random welcher 
dieser 4 Pins gerade auf LOW ist.

von Cyblord -. (cyblord)


Lesenswert?

Martin H. schrieb:
> Könntest du mir erläutern wie das funktioniert? Ohne ein Output Befehl
> zu nutzen.

Ich glaube das wird bei dir nichts....

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Ist es möglich ohne ein Output befehl zu nutzen ?
Denn: Wenn ich Output Befehl nutze, störe ich das Steuergerät der 
Dartscheibe. Auf diesem Weg, wie oben im Beispiel habe ich das Problem 
bereits beschrieben.
Etwas hilfe wäre nett :)

: Bearbeitet durch User
von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Wäre es den nur über Output möglich? Ich habe dir eine Nachricht 
gesendet und hoffe sehr das du sie beantworten könntest :)

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

1
int masterLines = 8; //Change here to the number of lines of your Master Layer
2
int slaveLines = 8; //Change here to the number of lines of your Slave Layer
3
int matrixMaster[] = {13, 12, 11, 10, 9, 8, 7, 6}; //Put here the pins you connected the lines of your Master Layer 
4
int matrixSlave[] = {5, 4, 3, 2, A5, A4, A3, A2}; //Put here the pins you connected the lines of your Slave Layer
5
void setup() {     
6
    Serial.begin(9600);     
7
    Serial.println("OpenDarts"); //This line is not necessary, is just here for debug purposes
8
    for(int i = 0; i < slaveLines; i++){         
9
        pinMode(matrixSlave[i], INPUT_PULLUP);     
10
    }
11
   for(int i = 0; i < masterLines; i++){         
12
       pinMode(matrixMaster[i], OUTPUT);         
13
       digitalWrite(matrixMaster[i], HIGH);     
14
   } 
15
}
16
void loop() {     
17
    for(int i = 0; i < masterLines; i++){         
18
        digitalWrite(matrixMaster[i], LOW);         
19
        for(int j = 0; j < slaveLines; j++){             
20
            if(digitalRead(matrixSlave[j]) == LOW){                 
21
                Serial.print(j);                 
22
                Serial.print(",");                 
23
                Serial.println(i);                 
24
                delay(500);                 
25
                break;             
26
            }         
27
        }         
28
        digitalWrite(matrixMaster[i], HIGH);     
29
    } 
30
}

Das wäre eine Möglichkeit mit Output. Wenn ich diese nutze, funktioniert 
aber leider das Steuergerät des Automaten nicht mehr. Kennst du eine 
andere Lösung?

von Kilian (Gast)


Lesenswert?

Hallo,

du müsstest statt eines Output im loop die Werte einlesen statt 
ausgeben und damit feststellen, welche masterLine vom Steuergerät 
gerade auf high gezogen wird. Dann kannst du entweder direkt mit der 
nächsten masterLine weitermachen(continue), wenn diese masterLine nicht 
auf HIGH ist, oder die innere Schleife ablaufen lassen, wenn sie gerade 
auf HIGH ist.
Hast du mit dem Logicanalyzer sehen können, nach welchem Muster das 
Steuergerät die masterLines selektiert? Einfach nacheinander? Sonst 
funktioniert es nicht ganz so einfach.

Gruß
Kilian

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Martin H. schrieb:
> Das wäre eine Möglichkeit mit Output. Wenn ich diese nutze, funktioniert
> aber leider das Steuergerät des Automaten nicht mehr. Kennst du eine
> andere Lösung?

du musst mit einem Beobachtungs-Controller (fast) genau das nachbilden 
was das herkömmliche Steuergerät bzw der Haupt-Controller macht.

Überlege, wie eine herkömmliche Matrix-Anordnung arbeitet: Sie besteht 
aus Zeilen und Spalten, und an dessen Kreuzungspunkt(en) kann ein 
Kontakt betätigt werden.

"Typischerweise" werden nun z.B. in der Schaltung die Zeilen und Spalten 
mit einem Pullup-Widerstand permanent auf HIGH angehoben. Durch den 
auslesenden Haupt-Controller wird dann jeweils für eine kurze Zeit eine 
nach der anderen Zeile auf LOW runter gezogen. Dann werden die Spalten 
eingelesen. Sollte nun an einem (oder mehreren) Kreuzungspunkten "die 
Taste gedrückt sein"  (oder durch deinen Dart-Pfeil ein Kontakt 
realisiert sein), dann kann man das feststellen: der oder die 
entsprechenden Spalten sind dann nämlich auch LOW.

Mit "ein bichen Zauberei" werden nun noch ein paar Dinge softwaremäßig 
abgefangen:
a) Tasten oder entsprechende Kontakte können Prellen. --> Man muss also 
eine Entprell-Routine haben
b) Es können quasi Zeitgleich auch mehrere Tasten gedrückt sein (oder 
eine Taste ist gedrückt, dann wird noch eine weitere gedrückt) -> Diese 
Situation muss entsprechend "irgendwie" berücksichtigt werden. 
Stichwort: "n-key-rollover".

WAS nun genau ein Kreuzungspunkt von Zeile oder Spalte "bedeutet", das 
muss der Haupt-Controller natürlich selber definieren (und entsprechende 
Aktionen einleiten): z.B. wurde die durch Betätigung von Zeile 3, Spalte 
7 die Taste mit dem Buchstaben "A" gedrückt, oder das "Bulls Eye" Feld 
wurde getroffen.

Nun sollte dir der Schritt "ohne Ausgabe" mit etwas nachdenken "klar 
sein":

1. Klemme an deinen Zeilen und Spalten der Dartscheiben-Matrix einfach 
parallel deinen "Beobachtungs-Controller" an.
2. lese und werte Zeilen und Spalten-Werte "geeignet" aus, z.B. so:

a. lese regelmäßig die Zeilen-Werte ein. Wenn ein Wert ungleich "alle 
Zeilen-Bits sind HIGH" vorkommt, dann wird wohl der Haupt-Controller 
grade anfangen wollen, die Matrix abzuscannen
b. warte ein Weilchen, und lese dann die Spaltenwerte ein.

Danach geht es eigentlich weiter wie die Routine im Hauptcontroller. 
Mach dir Gedanken darüber, wie du die "mehrfach-Kontaktbetätigung" 
behandeln möchtest. Und mache dir Gedanken über die Deutung der 
eingelesenen Werte des Beobachtungs-Controllers (z.B. durch Betätigung 
von Zeile 3, Spalte 7 wurde die Taste mit dem Buchstaben "A" gedrückt, 
oder das "Bulls Eye" Feld wurde getroffen.

WAS du mit dieser Erkenntniss machst in deinem Beobachtungs-Controller, 
ist dann die nächste Frage (z.B. über eine serielle Schnittstelle 
irgendwohin übertragen, oder einen Zähler hochsetzen etc.)

Martin H. schrieb:
> Kann ich irgendwie den Scanrhytmus überprüfen?

Möglicherweise meinst du damit das Verfahren "überprüfen", wie eine 
Matrix eingescannt wird. Das hab ich grade beschrieben.

Die Information darüber, das dieses Einscannen im Rythmus von 300 
Millisekunden statt findet, ist hingegen eher wertlos.

: Bearbeitet durch User
von Mausen (Gast)


Lesenswert?

Martin H. schrieb:
> Konkret habe ich Arduino und möchte gleichzeitig das Signal der
> Dartmatrix an das Steuergerätes des Dartautomaten und den Arduino
> hängen.

Zwei Katzen sehen dieselbe Maus aber wie soll man mit den Augen einer 
Katze das Gehirn der anderen synchronisieren?

Gar nicht - inkompatibel.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Mausen schrieb:
> Zwei Katzen sehen dieselbe Maus aber wie soll man mit den Augen einer
> Katze das Gehirn der anderen synchronisieren?

ein nettes "Bild" (mit Katzen, Mäusen und Augen) welches du da 
aufspannst. Es stimmt jedoch nicht, dass die technische Aufgabenstellung 
"inkompatibel" ist, sofern du dieses "übertragen" mitteilen wolltest. 
Vielleicht kannst du dich eher mit Tieren als mit Technik aus, und 
gelangst daher zu deiner Einschätzung.

Hier geht es darum, dass 2 Mikro-Controller "gemeinsam" eine 
Matrixanordnung auswerten. Dieses geht ohne weiteres in der Weise wie 
ich es beschrieben habe.

Der zweite Controller "rennt" dabei in seiner 
Programmausführung/Matrixauswertung los, sobald der erste aktiv wird. 
Damit ist automatisch eine "Synchronisierung" gegeben.

Beide Controller sollten zum selben Ergebnis gelangen, welcher 
Kreuzungspunkt der Matrix verbunden ist.

: Bearbeitet durch User
von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Danke. Ich dachte eigentlich nicht das mir jemand antwortet. Folgendes 
Problem: Ich hänge mich direkt an die Pins, die die Matrix abfragen 
sollen, sprich den "Hauptcontroller". Nur Leider sind die 16 Pins 
dauerhaft HIGH und die 4 Pins der Matrix dauerhaft LOW. Was hat das zu 
bedeuten? Ich kann nicht feststellen, wie der Hauptcontroller die Pins 
abscannt.

Beitrag #6295122 wurde vom Autor gelöscht.
von Mario M. (thelonging)


Lesenswert?

Martin H. schrieb:
> Ich hänge mich direkt an die Pins

Womit?

Martin H. schrieb:
> die 16 Pins
> dauerhaft HIGH und die 4 Pins der Matrix dauerhaft LOW

Manche Matrixauswertung legt statische Pegel an und wartet auf 
mindestens 1 Kontakt, bevor der Scan losläuft. Also mal einen Pfeil 
stecken.

von kenny (Gast)


Lesenswert?

Martin H. schrieb:
> Danke. Ich dachte eigentlich nicht das mir jemand antwortet.
> Folgendes
> Problem: Ich hänge mich direkt an die Pins, die die Matrix abfragen
> sollen, sprich den "Hauptcontroller". Nur Leider sind die 16 Pins
> dauerhaft HIGH und die 4 Pins der Matrix dauerhaft LOW. Was hat das zu
> bedeuten? Ich kann nicht feststellen, wie der Hauptcontroller die Pins
> abscannt.

Funktioniert denn der Automat ohne den angeschlossenen Arduino?
Falls nicht hast du evtl mit deinen Experimenten die Logik des Automaten 
zerstört.

von Hubii (Gast)


Lesenswert?

Mario M. schrieb:
>> Ich hänge mich direkt an die Pins
>
> Womit?

Mit dem Arduino. Ich hätte auch einen LA parat, der gibt mir aber auch 
die selben Ergebnisse zurück.

Mario M. schrieb:
> Manche Matrixauswertung legt statische Pegel an und wartet auf
> mindestens 1 Kontakt, bevor der Scan losläuft. Also mal einen Pfeil
> stecken.

Das hört sich interessant an, ich glaube das ist genau mein Problem.
Hättest du eine Idee wie ich das "Messen" kann?

kenny schrieb:
> Funktioniert denn der Automat ohne den angeschlossenen Arduino?
> Falls nicht hast du evtl mit deinen Experimenten die Logik des Automaten
> zerstört.

Natürlich funktioniert er (zum glück) noch :) Mario M. ist glaube ich 
auf der richtigen Spur. Aber wie kann ich mich daran synchronisieren?

von Hubii (Gast)


Lesenswert?

Gibt es evtl. zu diesem statischen Pegel irgendwelche Tutorials oder 
Beispiele?

von Mario M. (thelonging)


Lesenswert?

https://www-user.tu-chemnitz.de/~heha/Mikrocontroller/Tastenmatrix.htm

Die Spaltentreiber werden alle auf Low gesetzt und der Controller in den 
Sleep-Mode geschickt. Die Zeilen werden über Pull-ups auf High gezogen. 
Wird jetzt irgendeine Taste gedrückt, geht eine der Zeilen auf Low, ein 
Interrupt wird ausgelöst und der Controller erwacht. Dann werden die 
Spaltentreiber auf High gesetzt und der Reihe nach immer eine Spalte auf 
Low gelegt und die Zeilen gelesen, bis die gesamte Matrix gescannt ist.

von mIstA (Gast)


Lesenswert?

Martin H. schrieb:
> Nur Leider sind die 16 Pins
> dauerhaft HIGH und die 4 Pins der Matrix dauerhaft LOW. Was hat das zu
> bedeuten?

Also nach dem was ich aus der Beschreibung des Automaten, insbesondere 
aus der Fehlersuchtafel, so rauslese, dann würde ich vermuten, daß die 
Scheibenmatrix überhaupt nur dann abgescannt wird, wenn im korrekten 
Spielverlauf auch tatsächlich ein Pfeil geworfen (da sind nämlich auch 
noch Mikrofone und ein Ultraschallsensor mit im Spiel) wurde; außerdem 
gibts nach einen ein Selbsttest für die Scheibe, da dürfte die Matrix 
unabhängig von Wurfgeräuschen usw. gescannt werden.

Also würde ich mal den Scheiben-Selbsttest aktivieren, dann sollte der 
Controller im Automaten eintlich die Scheibe abscannen und auf den 4 
Pins die bisher dauernd LW waren müßte sich mal was tun. Wenn Du dann 
versuchst einzelne Segmente zu aktivieren dann sollte auch auf den 
anderen 16 Leitungen eine Aktivität erkennbar sein.

von ThomasW (Gast)


Lesenswert?

kann das tatsächlich eine einfache N mal N Matrix sein? Es kann ja mehr 
als ein Pfeil in einem Feld stecken und alle müssen erkannt werden.

von Hubii (Gast)


Lesenswert?

Mario M. schrieb:
> Die Spaltentreiber werden alle auf Low gesetzt und der Controller in den
> Sleep-Mode geschickt. Die Zeilen werden über Pull-ups auf High gezogen.
> Wird jetzt irgendeine Taste gedrückt, geht eine der Zeilen auf Low, ein
> Interrupt wird ausgelöst und der Controller erwacht. Dann werden die
> Spaltentreiber auf High gesetzt und der Reihe nach immer eine Spalte auf
> Low gelegt und die Zeilen gelesen, bis die gesamte Matrix gescannt ist.

Die Spaltentreiber sind in meinem Falle die 4 Pins richtig? Sprich: Wird 
eine der 16 Pins auf LOW gezogen, fängt die Steuereinheit an, die 4 
restlichen Pins zu scannen richtig? Hättest du eine Idee wie ich mich 
daran synchronisieren kann? Ich hätte ein LA parat und könnte die alle 
möglichen Messungen durchführen.

mIstA schrieb:
> Also nach dem was ich aus der Beschreibung des Automaten, insbesondere
> aus der Fehlersuchtafel, so rauslese, dann würde ich vermuten, daß die
> Scheibenmatrix überhaupt nur dann abgescannt wird, wenn im korrekten
> Spielverlauf auch tatsächlich ein Pfeil geworfen (da sind nämlich auch
> noch Mikrofone und ein Ultraschallsensor mit im Spiel) wurde; außerdem
> gibts nach einen ein Selbsttest für die Scheibe, da dürfte die Matrix
> unabhängig von Wurfgeräuschen usw. gescannt werden.
>
> Also würde ich mal den Scheiben-Selbsttest aktivieren, dann sollte der
> Controller im Automaten eintlich die Scheibe abscannen und auf den 4
> Pins die bisher dauernd LW waren müßte sich mal was tun. Wenn Du dann
> versuchst einzelne Segmente zu aktivieren dann sollte auch auf den
> anderen 16 Leitungen eine Aktivität erkennbar sein.

Die Frage ob es sich um so eine Matrix handelt wie Mario M. beschrieben 
hat ist schon geklärt, er hat recht. Deshalb müsste ich im richtigen 
Betrieb herausfinden wie der Scanrhytmus stattfindet.

ThomasW schrieb:
> kann das tatsächlich eine einfache N mal N Matrix sein? Es kann ja mehr
> als ein Pfeil in einem Feld stecken und alle müssen erkannt werden.

Das ist unmöglich, du kannst 2 Pfeile gleichzeigt werfen, er wird dir 
nur eine Zahl zählen. Nach jedem erkannten Wurf hat die Steuereinheit 
ein delay von Ca. 100-200 ms, damit so etwas nicht vorkommt. Bleibt ein 
Feld stecken verlangt der Automat dieses zu entprellen bevor es weiter 
geht.

von ThomasW (Gast)


Lesenswert?

Hubii schrieb:
> Das ist unmöglich, du kannst 2 Pfeile gleichzeigt werfen, er wird dir
> nur eine Zahl zählen. Nach jedem erkannten Wurf hat die Steuereinheit
> ein delay von Ca. 100-200 ms, damit so etwas nicht vorkommt. Bleibt ein
> Feld stecken verlangt der Automat dieses zu entprellen bevor es weiter
> geht.

hab mich wohl blöd ausgedrückt: der erste Pfeil bleibt ja in der 
Scheibe, dieses Feld also belegt. Der wird vor dem zweiten Wurf auch 
nicht entfernt. Wie aber wird ein weiterer Pfeil in einer bereits 
belegten Koordinate/Kreuzung erkannt?

von Björn S. (bjrn_s869)


Lesenswert?

ThomasW schrieb:
> Hubii schrieb:
>> Das ist unmöglich, du kannst 2 Pfeile gleichzeigt werfen, er wird dir
>> nur eine Zahl zählen. Nach jedem erkannten Wurf hat die Steuereinheit
>> ein delay von Ca. 100-200 ms, damit so etwas nicht vorkommt. Bleibt ein
>> Feld stecken verlangt der Automat dieses zu entprellen bevor es weiter
>> geht.
>
> hab mich wohl blöd ausgedrückt: der erste Pfeil bleibt ja in der
> Scheibe, dieses Feld also belegt. Der wird vor dem zweiten Wurf auch
> nicht entfernt. Wie aber wird ein weiterer Pfeil in einer bereits
> belegten Koordinate/Kreuzung erkannt?

Der Kontakt der Spalten und Zeilen erfolgt nur solange die 
Bewegungsenergie den Pfeil in die Kunststoff Segmente drückt.
Hängt ein geworfener Pfeil im Segment wird kein Kontakt ausgelöst.
Wird ein Segment später von einem zweiten Pfeil getroffen, wird wieder 
der Kontakt zwischen Spalte und Zeile ausgelöst.
Um dies zu ermöglichen ist eine Gummimatte zwischen den Segmenten und 
der Matrix angebracht.

Ps: @hubi meld dich mal per pn bei mir

von Stefan F. (Gast)


Lesenswert?

Martin H. schrieb:
> Nur Leider sind die 16  dauerhaft HIGH und die 4 Pins der
> Matrix dauerhaft LOW.

Wenn davon nur 4 Pins zur Matrix gehören, wozu dienen dann die anderen 
12 Pins? Und wo sind die restlichen Pins der Matrix (es müssen 
logischerweise mehr als 4 sein).

> Was hat das zu bedeuten?

Das du dir noch gar nicht über die Schaltung im Klaren bist und wie die 
Matrix arbeitet. Und dass du mit deiner Software schon 5 Schritte zu 
weit bist. Baust du beim Haus zuerst das Dach, und zum Schluss das 
Fundament?

von Hubii (Gast)


Lesenswert?

ThomasW schrieb:
> hab mich wohl blöd ausgedrückt: der erste Pfeil bleibt ja in der
> Scheibe, dieses Feld also belegt. Der wird vor dem zweiten Wurf auch
> nicht entfernt. Wie aber wird ein weiterer Pfeil in einer bereits
> belegten Koordinate/Kreuzung erkannt?

Weißt du eigentlich wie das Prinzip einer Dartscheibe ist? Es werden ja 
nicht nicht die Pfeile auf die Matrix gedrückt, sondern ein Feld. Die 
Pfeile drücken also ein Feld in die Matrix. Somit können 100 Pfeile in 
einem Feld stecken, das macht kein unterschied, da es immer entprellt 
wird.

von Mario M. (thelonging)


Angehängte Dateien:

Lesenswert?

Die Matrix hat 4 Eingänge, die auf Low liegen. Alle 16 Ausgänge der 
Matrix liegen über Pullups auf High. Einige Ausgänge gehen auf ein NAND, 
dessen Ausgang auf die INT-Leitung des Prozessors geht. Darüber wird der 
Prozessor über einen Treffer informiert. Dann scannt er die Matrix und 
liest die Daten über die LS244 ein.

von Stefan F. (Gast)


Lesenswert?

4 Reihen (aktiv getrieben)
16 Spalten (mit Pull-Up, also Low bei Betätigung)

Also hast du 16 Leitungen, die du beobachten musst. Geht eine davon auf 
Low, schaust du nach, welche der vier Reihen gerade aktiv (Low) ist. 
Dann hast du beide nötigen Infos: Reihe und Spalte.

Die Idee mit den Nand Gattern und dem Interrupt kannst du 1:1 
übernehmen.

Vorausgesetzt natürlich, dass diese Schaltung die Mario gezeigt hat mit 
Martins Gerät überein stimmt.

von Mario M. (thelonging)


Lesenswert?

Die Schaltung ist aus oben verlinktem Handbuch. Bei genauerer 
Betrachtung scheint der zweite Teil mit dem NAND-Gatter nicht zur 
Matrixauswertung zu gehören, also fällt die Erklärung mit dem Interrupt 
weg.

@hubii: Klemm doch mal den Logikanalysator an P1.0 bis P1.3 und drücke 
auf die Matrix.

: Bearbeitet durch User
von Martin H. (Firma: 1993) (hubii)



Lesenswert?

Hier hast du mal ein paar Bilder die mit einem LA aufgezeichnet wurden. 
Darauf sieht mal welche Pins ich angeschlossen habe und was bei einem 
Impact passiert.

von Einer (Gast)


Lesenswert?

Ich habe so etwas vor langer zeit mehrfach mit 74LS574 gelöst.
Tastatur abetrennt.
Selbst ausgelesen.

574er gefüllt.
Mit den 574er Matrix simuliert.

Mit dem Spaltenimpuls an der Matrix auf /OC die jeweils passenden Daten 
auf den Zeilenbus gegeben.
Also quasi ein dual port RAM nachgebildet.
Hatte damals 8 Stück verbaut da 8x8 Matrix.
Bei 4x16 kann man wohl Analog vorgehen.

Bei deiner Sleep und Interruptgesteuerten Variante müssen die Ausgänge 
der 574er wohl noch per Dioden entkoppelt werden.(hatte ich auch 
einmal).

von Martin H. (Firma: 1993) (hubii)


Lesenswert?

Einer schrieb:
> Ich habe so etwas vor langer zeit mehrfach mit 74LS574 gelöst.
> Tastatur abetrennt.
> Selbst ausgelesen.

Das ist das, was ich vermeiden möchte. Ich möchte nichts abtrennen 
sondern eigentlich nur die Logik des Automaten kopieren, sodass das 
Arduino einfach nur zuhören kann, falls das überhaupt möglich ist mit 
dieser Logik, denn bisher habe ich schon einiges gehört, aber eine 
Lösung wusste keiner.

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.