mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Udoo Quad // Programmieren einer Dartscheibe


Autor: Martin H. (hnbk_2017)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wir sind 3 angehende Techniker, die ihr Abschlussprojekt vor der Brust 
haben.
Seit ca 3 Wochen kommen wir nicht weiter.
Wir versuchen unsere Tastermatrix (4x16)auszulesen und sinnvoll weiter 
zu verarbeiten.
Doch uns gelingt das Auslesen nicht.

Könnt ihr uns bitte helfen solch eine Tastermatrix auszulesen. Wir 
bräuchten einen Denkanstoß.

Besten Dank im Voraus und freundliche Grüße

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich da Dartscheibe lese - wie lange sind denn die Tasten eurer 
Matrix gedrückt? Wenn das nur ein paar ms sind, dann ist es evtl. 
sinnvoller, über IRQ die Taste zu lesen. Wenn das aber mehrere dutzend 
bis hunderte ms sind, dann ist die traditionelle Tastenauswertung mit 
Timer sinnvoll, die das Tastenfeld auch gleich entprellt.
Die ISR würde z.B. über Pinchange Interrupt reagieren müssen.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Kennt ihr Google?

https://www.google.de/webhp?sourceid=chrome-instan...

Sollen wir Raten, wie die Tastatur nebst Anschlüssen (Schaltplan) 
aussieht, und womit ihr diese Auslesen wollt (Hardware / Software)?

Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht erklärt ihr erst einmal wie weit ihr seid und wo genau das 
Problem dann ist. 4 x 16 ist auch schon eine komische Rasterung für eine 
runde Scheibe...

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O.K. - das mit der Hardware nehme ich zurück (Titel).

Wie seid ihr denn auf dieses Teil gekommen?

Vielleicht können die (mit halbwegs fertigen Lösungen) helfen: 
http://www.udoo.org/forum/

Autor: Martin H. (hnbk_2017)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wir haben uns für ein Quad Udoo entschieden, da es sich hierbei um eine 
Mischung aus Arduino und RaspberryPI handelt, beides ist mit einem Bus 
miteinander verbunden. Mit dem Arduino wollen wir im groben unsere 
Abfragen starten und das eigentliche Programm entwickeln. Mit dem 
RaspberryPI wollen wir mit Hilfe von Phyton die Oberfläche 
visualisieren.

Der Einschlag der Darts ist vermutlich im µs Bereich. Wir wollten die 
Einschläge mit Hilfe von Interrupts verwirklichen.

Die Rasterung der Scheibe ist in 4x16 verschaltet. (A0-A3 // B0-B15) Vom 
Prinzip her, wie im Anhang nur halt nicht 8x8, sondern 4x16. Sollte 
beispielsweise die "17" getastet werden, haben wir einen Durchgang 
zwischen A0 und B0.

Wir bekommen es einfach nicht hin, die einzelnen "A"s und "B"s für eine 
Mehrfach Belegung abzufragen.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin H. schrieb:
> Der Einschlag der Darts ist vermutlich im µs Bereich.
Das solltet ihr mal etwas genauer messen. Wenns wirklich nur µs sind, 
dann geht sowas mit Raspi und Python nämlich nicht ohne unterstützende 
Hardware, z.B. per Dartpfeil gelatchte Register (sowas ist aber 
prellempfindlich und vom Timing her gar nicht so einfach hinzukriegen) 
oder ein dezidierter Matrix-MC, der nur das macht und nichts anderes.
Der Metrix MC würde dann mit hoher Geschwindigkeit die Matrix 
durchklappern und per Standard Entprellroutine die Tasten rausfischen.
4*16 Matrix ist natürlich nicht so praktisch, sollte aber klappen. 8*8 
wäre natürlich viel Praktischer und benötigt an der Entprellroutine nur 
kleine Änderungen.
https://www.mikrocontroller.net/articles/Entprellu...

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Matrix fragt man am einfachsten ab, indem man jeweils eine Zeile 
aktiviert (Log 1) und alle Spalten (8/16 Bit)einliest. In dieser Zeit 
sind alle anderen Zeilen passiv.

Ist das passiert, so aktiviert man die nächste Zeile und macht das 
gleiche.
Wichtig ist, dass immer nur eine Zeile "aktiv" ist.

Falls Dein Sensor Probleme mit dem Rückwärtsgang (zwei Drückeberger zur 
gleichen Zeit) hat, musst Du die Kandidaten mit Dioden entkoppeln.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Kaj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin H. schrieb:
> beides ist mit einem Bus
> miteinander verbunden.
Naja, es ist eine UART-Verbindung.


Matthias S. schrieb:
> Wenns wirklich nur µs sind,
> dann geht sowas mit Raspi und Python nämlich nicht ohne unterstützende
> Hardware,
Die haben sie doch: Den Atmel SAM3X8E (Arduino-Due, ARM Cortex-M3) der 
da mit drauf sitzt.

Martin H. schrieb:
> Mit dem Arduino wollen wir im groben unsere
> Abfragen starten und das eigentliche Programm entwickeln.

Martin H. schrieb:
> Mit dem
> RaspberryPI wollen wir mit Hilfe von Phyton die Oberfläche
> visualisieren.

Autor: Martin H. (hnbk_2017)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

wir haben uns als Beispiel an einer Arduino-Vorlage von einer Tastatur
gehalten.
Diese haben wir dann auf unsere Dartscheibe übertragen.
Der Quelltext steht unterhalb.
Die Verdrahtung könnt Ihr der Exceltabelle entnehmen.

Wir bekommen leider keine Ausgabe an unserem seriellen Monitor.
Erkennt Ihr ein Fehler?

Danke im Voraus.


#include <Arduino.h>
#include <Keypad.h>



const byte ROWS = 16; // Four rows Zeilen
const byte COLS = 4; // Three columns Spalten

char keymap

// Define the Keymap
char keymap[ROWS][COLS] =
{
  {'0','50','0','25'},  //Row 0
  {'6','45','36','27'},
  {'4','30','24','18'},
  {'2','15','12','9'},
  {'21','12','54','48'},
  {'14','8','36','32'},
  {'7','4','18','16'},
  {'57','39','3','24'},
  {'38','26','2','16'},
  {'19','13','1','8'},
  {'9','18','60','33'},
  {'6','12','40','22'},
  {'3','6','20','11'},
  {'51','30','15','42'},
  {'34','20','10','28'},
  {'17','10','5','14'},
};

// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 53,51,49,47,45,43,41,39,37,35,33,31,29,27,25,23 
};
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 2, 3, 4 ,5 };

// Create the Keypad
//Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//Keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, Rows, 
Cols);

void setup()
  {
  Serial.begin(9600);

  }
void loop()
{
  char keypressed = myKeypad.getKey();
  if (keypressed != NO_KEY) {
    Serial.print("K ");
    Serial.write(keypressed);
    Serial.println("");
    Serial.flush();
  }

}

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin H. schrieb:
> Wir bekommen leider keine Ausgabe an unserem seriellen Monitor.
> Erkennt Ihr ein Fehler?

Das meiste ist hier in ein Lib gepackt, die man ja nicht lesen kann. 
Messt doch mal an den COL und ROW Pins, ob sich da was tut. An einer der 
beiden Gruppen sollte die Keypad Routine jeweils eine Leitung gegen Low 
ziehen, das ganze der Reihe nach mit allen Leitungen dieser Gruppe und 
das immer wiederholen. Verbindet man nun per Draht oder Taster eine 
dieser Leitungen mit einer Leitung aus der anderen Gruppe, sollte 
GetKey() was zurückliefern. Wenn nicht, ist die Library entweder 
überfordert mit der 16*4 Matrix, oder ihr habt was falsch deklariert 
oder sie funktioniert einfach nicht.

: Bearbeitet durch User
Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Martin H. schrieb:
> Wir bekommen leider keine Ausgabe an unserem seriellen Monitor

Ihr wollt Techniker werden?

Dann schaut gefälligst selbst :-)

Es liegt m.E. nach nicht am Programm ... möglicherweise aber an den 
Ports (Arduino-Kompatibel ???) oder an der "Dart-Matrix" bzw. deren 
Abfrage.

Logik-Analysator ist euch bekannt? Ich frage nur, weil Google scheinbar 
nicht bekannt ist ...

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Das meiste ist hier in ein Lib gepackt, die man ja nicht lesen kann.

Warum nicht?

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Dieter F. schrieb:
> Warum nicht?

Weil ich sie mir z.b. runterladen müsste, was ich aber nicht tue. Und 
gepostet haben die Jungs sie ja nicht.

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Weil ich sie mir z.b. runterladen müsste, was ich aber nicht tue

Blah ...

Autor: Cyborg (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Dieter F. schrieb:
> Ihr wollt Techniker werden?

Daran hab ich ernste Zweifel. Eher wollen sich da welche mit
fremden Federn schmücken um hier ein hohes Antwortniveau zu erhalten.
In anderen Threads werden Trivialfrager immer schnell kalt gestellt,
wenn da nicht ein gewisses Grundwissen vorhanden ist. Dieser Thread
scheint genauso zu sein.

Daher sollte der TO erst mal das hier lesen:
http://www.mikrocontroller.net/articles/Netiquette...

Martin H. schrieb:
> Der Einschlag der Darts ist vermutlich im µs Bereich.

Zum einen ist das nur eine Vermutung und zum anderen ohne Bedeutung
für das Spiel. Zwischen den Würfen können sich die Werfer beliebig
Zeit lassen. Da ist nichts dynamisch, außer wenn ein Pfeil die
Scheibe trifft.

Matthias S. schrieb:
> Wenn ich da Dartscheibe lese - wie lange sind denn die Tasten eurer
> Matrix gedrückt? Wenn das nur ein paar ms sind, dann ist es evtl.
> sinnvoller, über IRQ die Taste zu lesen.

Schon mal Dart gespielt? Gewöhnlich bleibt ein Pfeil (von vier)
nach dem Wurf in der Scheibe stecken und genauso lang bleibt
ein Tastkontakt auch geschlossen.
Entprellt werden muss da auch nichts, weil ein einmal gesetztes Bit
einer Matrix, oder Arrays, erst mit dem entfernen des Pfeils wieder
zurück gesetzt wird. Was den Ansteuer-/Abfragezyklus angeht, kann
man den im µs oder ms und zu Testzwecken auch in Sek. ansteuern.
Die Wertung der geworfenen Pfeile ist sowieso rein statisch.

Die Schleife muss nachher vom Timing nur mit der Datenübertragung
übereinstimmen, ab besten synchron.


Kaj schrieb:
> Naja, es ist eine UART-Verbindung.

Und wie ist der verschaltet? Einfach nur mal so an die Matrix anklemmen
funktioniert nicht.  Ein Schaltplan gehört auf den Tisch.
Wenn ihr das nicht könnt, dann habt ihr den Begriff "Techniker"
nur für eure Zwecke gekapert und missbraucht.

Martin H. schrieb:
> Der Quelltext steht unterhalb.

Ich vermisse den Einsprungpunkt "main".
Gewöhnlich gehört der in eine C - Listing, oder sollte das ein anderer
Compiler sein?

Martin H. schrieb:
> Wir bekommen leider keine Ausgabe an unserem seriellen Monitor.

Die serielle Kommunikation gründet sich nicht nur auf die Baud-rate,
sondern auch identische Parameter wie odd/even Party und die Anzahl
der Stopbits beim Sender und Empfänger. Außerdem wird der Monitor nur 
Ascii oder einen veralteten Tastaturcode darstellen. Einige Codes
sind überhaupt nicht darstellbar, weil es Steuercodes sind
(z.B. CR oder LF).

Martin H. schrieb:
> #include <Arduino.h>
> #include <Keypad.h>

Das deutet auf C hin.

Also, da ganze hat sicher nichts mit der Abschlussarbeit zum Techniker
zu tun, denn angehende Techniker wissen das.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.