Seitenkonsole bauen

Hallo zusammen,
ich hab folgendes vor..
Ich würde gerne eine Seitenkonsole für Simulatoren bauen.
Soweit hab ich es hinbekommen, dass es soweit funktioniert auf dem Breadboard. Jetzt würde ich aber gerne von euch wissen, ob ich irgendwas noch absichern sollte in form von Kondensatoren widerstände etc..
Ich würde nämlich gerne eine Platine bestellen.
bis jetzt funktioniert der code und die Hardware zusammen.
Ich nutze ein Micro Pro.
hoffe habe soweit alles erklärt, damit es verständlich ist.

verwendet werden 10 k widerstände und 100nf Kondensatoren im Bild

hier der code:

#include <Joystick.h>
#include <SPI.h>

// Pinbelegung für den 74HC165
const int loadPin = 3;    // SH/LD Pin am 74HC165
const int clockPin = 9;   // CLK Pin am 74HC165
const int dataPin = 8;    // Q7 Pin am 74HC165

// SPI Pins für MCP3208
const int mcpCS = 10;     // Chip Select für MCP3208

// Anzahl der Taster und Achsen
const int numButtons = 16; // Erweitert auf 16 Buttons
const int numAxes = 3;     // Für X-, Y- und Z-Achse des Joysticks

// Joystick-Bibliothek initialisieren
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
                   JOYSTICK_TYPE_GAMEPAD, numButtons, numAxes,
                   true, true, true, false, false, false,
                   false, false, false, false, false);

// Letzte Tasterzustände speichern
bool lastButtonStates[numButtons] = {0};

void setup() {
  // Pins für 74HC165 konfigurieren
  pinMode(loadPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, INPUT);

  // Anfangszustand der Steuerpins setzen
  digitalWrite(loadPin, HIGH);
  digitalWrite(clockPin, LOW);

  // SPI initialisieren
  pinMode(mcpCS, OUTPUT);
  digitalWrite(mcpCS, HIGH); // CS deaktiviert
  SPI.begin();

  // Joystick starten
  Joystick.begin();

  // Serielle Kommunikation starten
  Serial.begin(9600);

  Serial.println("Joystick gestartet!");
}

void loop() {
  // *** Taster einlesen ***
  // Daten aus dem Schieberegister laden
  digitalWrite(loadPin, LOW);  // Parallel Load aktivieren
  delayMicroseconds(5);        // Kurze Verzögerung
  digitalWrite(loadPin, HIGH); // Parallel Load deaktivieren

  // Tasterzustände einlesen
  int buttonStates[numButtons];
  for (int i = 0; i < numButtons; i++) {
    buttonStates[i] = digitalRead(dataPin);  // Zustand des aktuellen Pins einlesen
    digitalWrite(clockPin, HIGH);           // Nächsten Wert verschieben
    delayMicroseconds(5);                   // Kurze Verzögerung
    digitalWrite(clockPin, LOW);

    // Für den zweiten 74HC165 weiterzählen
    if (i == 7) { // Wenn der erste 74HC165 durch ist
      delayMicroseconds(5); // Kleine Verzögerung vor Wechsel
    }
  }

  // Joystick-Buttons setzen
  for (int i = 0; i < numButtons; i++) {
    // Tasterzustand überprüfen
    if (buttonStates[i] == LOW && lastButtonStates[i] == HIGH) {
      Joystick.setButton(i, 1);  // Taster wurde gedrückt
    } else if (buttonStates[i] == HIGH && lastButtonStates[i] == LOW) {
      Joystick.setButton(i, 0);  // Taster wurde losgelassen
    }
    // Letzten Zustand speichern
    lastButtonStates[i] = buttonStates[i];
  }

  // *** Achsen einlesen (MCP3208) ***
  int xValue = readMCP3208(0); // Kanal 0 (X-Achse)
  int yValue = readMCP3208(1); // Kanal 1 (Y-Achse)
  int zValue = readMCP3208(2); // Kanal 2 (Z-Achse)

  // Werte normalisieren (0–4095 auf 0–1023)
  xValue = map(xValue, 0, 4095, 0, 1023);
  yValue = map(yValue, 0, 4095, 0, 1023);
  zValue = map(zValue, 0, 4095, 0, 1023);

  // Joystick-Achsen setzen
  Joystick.setXAxis(xValue);
  Joystick.setYAxis(yValue);
  Joystick.setZAxis(zValue);

  // Debugging im seriellen Monitor
  Serial.print("X: ");
  Serial.print(xValue);
  Serial.print(" Y: ");
  Serial.print(yValue);
  Serial.print(" Z: ");
  Serial.println(zValue);

  delay(100);
}

// Funktion zum Auslesen des MCP3208
int readMCP3208(int channel) {
  digitalWrite(mcpCS, LOW); // CS aktivieren

  // SPI-Befehl senden: Start, Modus und Kanal
  byte command = 0b00000110 | ((channel & 0x04) >> 2);
  SPI.transfer(command);
  byte highByte = SPI.transfer((channel & 0x03) << 6);
  byte lowByte = SPI.transfer(0x00);

  digitalWrite(mcpCS, HIGH); // CS deaktivieren

  // 12-Bit-Wert zusammenfügen
  return ((highByte & 0x0F) << 8) | lowByte;
}

achja.. wenn das alles soweit funktioniert, würde ich gerne eine Platine mit Micro Pro und 2 x MCP3208 verwenden. auf einer zweiten Platine würde ich gerne 4 x 74hc165n verbauen.
der plan ist dann ganz viele taster zu verbauen, zwei joysticks und schiebepotis... damit das ganze dann so ähnlich wie diese teile aussehen.
Seitenkonsole

dankeschön für die Hilfe

Hallo,
um festzulegen, ob da noch irgendwo Kondensatoren oder Widerstände oder andere Bauteile fehlen, brauchen wir ein komplettes Schaltbild und kein Fritzing (sorry) gefrickel. Ohne das Schaltbild ist da eine richtige Aussage nicht möglich oder selbst fehlerhaft.
Da du ja eine Platine fertigen lassen möchtest, müsste dieses Schaltbild schon vorhanden sein.

Naja wahrscheinlich nur in der Fritzing-Software.
Ich erinnere mich nur dunkel. Ich meine in Fritzing gäbe es auch eine Schaltplandarstellung.
Automatisch erzeugt und dementsprechend seltsam angeordnet.

@mybroker

Es ist sehr unwahrscheinlich, dass sich jemand die Mühe macht die ganzen Datenblätter deiner Komponenten zu wälzen um die ganzen Chip-Pin-nummern und ihre jeweilige Funktion herauszufinden und dann mühsam deine Verdrahtung zu analysiseren von welchem Pin geht da welche Leitung an welchen Pin ?

Das ist der große Murks von Fritzing.

In einem vernünftigen professionellen Schaltplan stehen die ganzen Pin-nummern samt Funktionsbezeichnung schon drin.

Er darf es auch gern mit Papier und Bleistift zeichnen. Nur muss es eben übersichtlich sein und alles richtig enthalten.

In der Datenleitung zum 74HC165 ein 10k Widerstand?

Der Linke Taster ist nicht angeschlossen, ohne Funktion.

Ja..den ersten Taster hatte ich wieder entfernt, da ich die Widerstände nicht gesehen hatte. Hatte dann vergessen das Kabel wiedrr einzufügen

Ich werde dann einen Schaltplan anfertigen.
Hoffe das ich es halbwegs richtig anordne.

Danke schonmal

"+" oben, - (GND) unten, Eingänge links, Ausgänge rechts

1 Like

mal ne frage... trage ich die ganzen ic ´s mit ein die ich komplett brauche oder nur die, die auch im fritzzing sind ? trage ich auch die ganzen taster ein oder soll ich nur einen als beispiel angeben ? also bis zu den widerständen.

danke für die Hilfe

Ja bitte, sonst können wir ja nicht beurteilen, was fehlt oder falsch ist.
Auch die Taster.

Für einen wirklich professionellen Schaltplan trägt man wirklich alles ein.
Wenn die Taster und Widerstände wirklich alle gleich sind und die Nummerierung absolut eindeutig überall parallel läuft, dann könntest du auch abkürzen.

Absolut parallel meint
Taste1 Widerstand 1 Eingang 1
Taste2 Widerstand 2 Eingang 2
...
Taste16 Widerstand 16 Eingang 16
Wenn da Abweichungen sind dann tust du dir selber für spätere evtl. Fehlersuche einen gefallen wenn alles genau benannt ist.

ja.. es wird wirklich überall gleich.. sogar die potis sind identisch.
aber ich verstehe was ihr/meint. ich versuche es mal so gut wie möglich darzustellen.

soooo.. wie gesagt.. ich habe jetzt jeweils an einem MCP3208 nur einen Poti angeschlossen. und am 74hc165n auch nur einen taster.
ich hoffe der Schaltplan passt soweit und ich habe nichts vergessen.
Mein Plan ist wie gesagt, dass ich eine Platine mit dem Pro Micro und den beiden MCPs , dann zwei Paltinen jeweils mit 4x 74HC165n s wie im Schaltplan.

Danke schonmal dafür..

Wieso hier ein 10K in die Versorgung?
image

Dann trenne auch die Schaltpläne. So dass man dann auch die Verbindungen zwischen den Leiterplatten sieht. Also 3 Pläne machen.

Du hast z.B. die ganzen Pinheader vergessen für die Anschlüsse. Und die Entstörkondensatoren an den MCPs

okay, dann werde ich heute abend das dann nochmal trennen. sorry dafuer.

okay, was bedeutet das genau ? sorry. bin dadrin nur eigentlich anwender..
danke dafuer ebenfalls

Das in den Schaltplänen Bauteile fehlen. Die brauchst du um später Leiterplatten daraus zu machen. Ich google jetzt nicht für dich, was Pinheader und Entstörkondensatoren sind.

Mit der Einstellung

Wird es nix mit eigenen Leiterplatten. Da muss man sich reinkniehen.

okay, ich versuche heute Abend mal meinen Schaltplan zu erweitern bzw. abzuaendern.
ich zeichne dann an jedem IC einen pinheader mit ein ?
mir war nicht klar, dass ich im schaltplan einen pinheader mit einzeichnen muss.
auf dem pcb war mir das schon klar.

wie gesagt, ich versuche einfach nur fuer meinen Sohn eine Seitenkonsole zu bauen.

Du brauchst die Pinheader an den Stellen, an denen du später Drähte anlöten willst. Also für die Verbindungen zum µC, Spannungsversorgung, Taster, Potis, LEDs, Querverbindungen zwischen den Boards

Warum kaufst du nicht einfach so was? Dann kannst du morgen fertig sein. SN74HC165 Breakout-Modul | eBay

Nur das muss nicht unbedingt im Schema drinnen sein.