Arduino Mega 2560 mit USB-HOST-SHIELD

Hallo Leute,

ich bin jetzt im Besitz eines USB-HOST-SHIELD für Arduino.

Unter einem Arduino Uno funktioniert das USB-Keyboard/Mouse - Beispiel sehr gut, aber ich bekomme es nicht unter einem Arduino Mega zu laufen.

In der Doku zur Lib steht das PIN 10 gleich bleibt und PIN 13 wird zu PIN 52, PIN 12 wird zu PIN 50 und PIN 11 wird zu PIN 51.

Das habe ich gemacht. → Resultat:
->Das wird ausgeführt (soll es aber nicht !!!)

if (Usb.Init() == -1)
    Serial.println("OSC did not start.");

Das gleiche Resultat kommt, wenn ich auch noch PIN 10 auf PIN 53 bringe.
Ich habe es so:

…und so:

(Pins nicht abstehend)

…probiert.

In der USBCore.h steht:

/* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.

This software may be distributed and modified under the terms of the GNU
General Public License version 2 (GPL2) as published by the Free Software
Foundation and appearing in the file GPL2.TXT included in the packaging of
this file. Please note that GPL2 Section 2[b] requires that all works based
on this software must also be made publicly available under the terms of
the GPL2 ("Copyleft").

Contact information
-------------------

Circuits At Home, LTD
Web      :  http://www.circuitsathome.com
e-mail   :  support@circuitsathome.com
 */

#if !defined(_usb_h_) || defined(USBCORE_H)
#error "Never include UsbCore.h directly; include Usb.h instead"
#else
#define USBCORE_H

// Not used anymore? If anyone uses this, please let us know so that this may be
// moved to the proper place, settings.h.
//#define USB_METHODS_INLINE

/* shield pins. First parameter - SS pin, second parameter - INT pin */
#ifdef BOARD_BLACK_WIDDOW
typedef MAX3421e<P6, P3> MAX3421E; // Black Widow
#elif defined(CORE_TEENSY) && (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
#if EXT_RAM
typedef MAX3421e<P20, P7> MAX3421E; // Teensy++ 2.0 with XMEM2
#else
typedef MAX3421e<P9, P8> MAX3421E; // Teensy++ 1.0 and 2.0
#endif
#elif defined(BOARD_MEGA_ADK)
typedef MAX3421e<P53, P54> MAX3421E; // Arduino Mega ADK
#elif defined(ARDUINO_AVR_BALANDUINO)
typedef MAX3421e<P20, P19> MAX3421E; // Balanduino
#else
typedef MAX3421e<P10, P9> MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560, Leonardo, Due etc.) or Teensy 2.0 and 3.0
//typedef MAX3421e<P53, P42>
#endif

/* Common setup data constant combinations  */

...und so weiter...

Auch den Reset-PIN habe ich probiert umzulegen.
Wie bekomme ich das Shield mit einem Arduino Mega (kein ADK) zum laufen ?

Was soll man denn bitteschön auf diesen Zwergenbildern sehen?
Da kannste sie besser weg lassen, das nervt dann wenigstens nicht.

In der USBCore.h steht:

Was soll uns das verstümmelte Stück Dings zeigen?
Hier wäre ein Link zur Lib angesagt gewesen…

Aber dein Programm bleibt geheim.
Vermutlich bist du davon überzeugt dass das nicht falsch sein kann.

Ein Irrtum!

Meine Glaskugel sagt:
In setup() fehlt die Zeile:

pinMode(SS,OUTPUT);

Hi

Pin 10-13 sind der SPI-Anschluß am Uno.
Pin 50-53 sind der SPI-Anschluß am Mega.
siehe auch hier, Pinouts Arduino

Welchen Arduino findet der Sketch denn?
Also welche Ports werden eingestellt?
Wenn Er z.B. den Mega ADK zu finden glaubt, und dort Pin54 als INT einstellt - im PinOut ist beim Mega kein Pin, Der auf den Namen 54 hören würde - hätte zumindest Keinen gesehen.

Klär erst Mal ab, welcher µC dort gefunden wird, dann kannst Du immer noch mit der Brechstange andere Beinchen zuweisen.

MfG

Hier das Shield mit der verwiesenen Lib.

USB-HOST-SHIELD (siehe Beschreibung weiter unten)

(Ich habe alles nach der dortigen und bei Google gefunden Beschreibungen probiert.)

combie:
Meine Glaskugel sagt:
In setup() fehlt die Zeile:

pinMode(SS,OUTPUT);

Das bringt nichts.

Hier der getestete Quellcode (Original-Beispiel) (funktioniert auf einem Arduino UNO)

#include <hidboot.h>
#include <usbhub.h>

// Satisfy IDE, which only needs to see the include statment in the ino.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>

class MouseRptParser : public MouseReportParser
{
  protected:
    void OnMouseMove(MOUSEINFO *mi);
    void OnLeftButtonUp(MOUSEINFO *mi);
    void OnLeftButtonDown(MOUSEINFO *mi);
    void OnRightButtonUp(MOUSEINFO *mi);
    void OnRightButtonDown(MOUSEINFO *mi);
    void OnMiddleButtonUp(MOUSEINFO *mi);
    void OnMiddleButtonDown(MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
{
  Serial.print("dx=");
  Serial.print(mi->dX, DEC);
  Serial.print(" dy=");
  Serial.println(mi->dY, DEC);
};
void MouseRptParser::OnLeftButtonUp	(MOUSEINFO *mi)
{
  Serial.println("L Butt Up");
};
void MouseRptParser::OnLeftButtonDown	(MOUSEINFO *mi)
{
  Serial.println("L Butt Dn");
};
void MouseRptParser::OnRightButtonUp	(MOUSEINFO *mi)
{
  Serial.println("R Butt Up");
};
void MouseRptParser::OnRightButtonDown	(MOUSEINFO *mi)
{
  Serial.println("R Butt Dn");
};
void MouseRptParser::OnMiddleButtonUp	(MOUSEINFO *mi)
{
  Serial.println("M Butt Up");
};
void MouseRptParser::OnMiddleButtonDown	(MOUSEINFO *mi)
{
  Serial.println("M Butt Dn");
};

class KbdRptParser : public KeyboardReportParser
{
    void PrintKey(uint8_t mod, uint8_t key);

  protected:
    void OnControlKeysChanged(uint8_t before, uint8_t after);
    void OnKeyDown	(uint8_t mod, uint8_t key);
    void OnKeyUp	(uint8_t mod, uint8_t key);
    void OnKeyPressed(uint8_t key);
};

void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
  MODIFIERKEYS mod;
  *((uint8_t*)&mod) = m;
  Serial.print((mod.bmLeftCtrl   == 1) ? "C" : " ");
  Serial.print((mod.bmLeftShift  == 1) ? "S" : " ");
  Serial.print((mod.bmLeftAlt    == 1) ? "A" : " ");
  Serial.print((mod.bmLeftGUI    == 1) ? "G" : " ");

  Serial.print(" >");
  PrintHex<uint8_t>(key, 0x80);
  Serial.print("< ");

  Serial.print((mod.bmRightCtrl   == 1) ? "C" : " ");
  Serial.print((mod.bmRightShift  == 1) ? "S" : " ");
  Serial.print((mod.bmRightAlt    == 1) ? "A" : " ");
  Serial.println((mod.bmRightGUI    == 1) ? "G" : " ");
};

void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
  Serial.print("DN ");
  PrintKey(mod, key);
  uint8_t c = OemToAscii(mod, key);

  if (c)
    OnKeyPressed(c);
}

void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {

  MODIFIERKEYS beforeMod;
  *((uint8_t*)&beforeMod) = before;

  MODIFIERKEYS afterMod;
  *((uint8_t*)&afterMod) = after;

  if (beforeMod.bmLeftCtrl != afterMod.bmLeftCtrl) {
    Serial.println("LeftCtrl changed");
  }
  if (beforeMod.bmLeftShift != afterMod.bmLeftShift) {
    Serial.println("LeftShift changed");
  }
  if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt) {
    Serial.println("LeftAlt changed");
  }
  if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI) {
    Serial.println("LeftGUI changed");
  }

  if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl) {
    Serial.println("RightCtrl changed");
  }
  if (beforeMod.bmRightShift != afterMod.bmRightShift) {
    Serial.println("RightShift changed");
  }
  if (beforeMod.bmRightAlt != afterMod.bmRightAlt) {
    Serial.println("RightAlt changed");
  }
  if (beforeMod.bmRightGUI != afterMod.bmRightGUI) {
    Serial.println("RightGUI changed");
  }

}

void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
  Serial.print("UP ");
  PrintKey(mod, key);
}

void KbdRptParser::OnKeyPressed(uint8_t key)
{
  Serial.print("ASCII: ");
  Serial.println((char)key);
};

USB     Usb;
USBHub     Hub(&Usb);

HIDBoot < USB_HID_PROTOCOL_KEYBOARD | USB_HID_PROTOCOL_MOUSE > HidComposite(&Usb);
HIDBoot<USB_HID_PROTOCOL_KEYBOARD>    HidKeyboard(&Usb);
HIDBoot<USB_HID_PROTOCOL_MOUSE>    HidMouse(&Usb);

KbdRptParser KbdPrs;
MouseRptParser MousePrs;

void setup()
{
  Serial.begin( 115200 );
#if !defined(__MIPSEL__)
  while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
  Serial.println("Start");
  //pinMode(SS, OUTPUT); 
//After that you need modify the following entry in UsbCore.h:
//
//typedef MAX3421e<P10, P9> MAX3421E;
//
//For instance if you have rerouted SS to pin 7 it should read:
//
//typedef MAX3421e<P7, P9> MAX3421E;
//Bringt nichts!!!
  if (Usb.Init() == -1)
    Serial.println("OSC did not start.");

  delay( 200 );

  HidComposite.SetReportParser(0, &KbdPrs);
  HidComposite.SetReportParser(1, &MousePrs);
  HidKeyboard.SetReportParser(0, &KbdPrs);
  HidMouse.SetReportParser(0, &MousePrs);
}

void loop()
{
  Usb.Task();
}

Das bringt nichts.

Schade!

Ich sehe übrigens auch kein SPI.begin(); im Setup.
Und in der Lib auch nicht.

Aber die ist mir zu kompliziert, um das auf die Schnelle zu durchblicken.

Ok ich bin Doof.

Ich habe den Fehler gefunden.

Schaut euch das Bild 1 noch einmal genau an und lacht.


Wo befindet sich hier die elektrische Verbindung zwischen dem Arduino Mega ?

BluetoothHamster:
Schaut euch das Bild 1 noch einmal genau an und lacht.

Das Problem ist, dass man darauf nichts erkennen kann, selbst mit STR + ‘++++’ konnte ich nur erkennen das die I2C Pins nicht vorhanden sind, aber braucht man die? :confused:
Bitte um aufklärung… :slight_smile:
lg dony

Das Problem ist, dass man darauf nichts erkennen kann,

Habe ich auch schon versucht zu sagen…
Interessiert aber scheinbar nicht!

Hallo Leute,

hier die Lösung: Alles folgende muss beachtet werden, sonst funktioniert es unter einem Arduino Mega 2560 (ohne ADK) nicht.

USH = USB-HOST-SHIELD
->PIN SDA (USH) => PIN 20 (MEGA)
->PIN SCL (USH) => PIN 21 (MEGA)
->PIN 0 (USH) => PIN 7 (MEGA)
->PIN 1 (USH) => PIN 6 (MEGA)
->PIN 10 bleibt unverändert (gleiche Belegung)
->PIN 11 (USH) => PIN 51 (MEGA)
->PIN 12 (USH) => PIN 50 (MEGA)
->PIN 13 (USH) => PIN 53 (MEGA)

Sehr wichtig ist 1. die Belegung von SDA und SCL.

Als nächstes muss folgendes Bibliothek-Beispiel ausgeführt werden.
-> board_qc

-> Dieses Programm liefert bei Erfolg folgende Ausgabe:

Reading REVISION register... Die revision 03
SPI long test. Transfers 1MB of data. Each dot is 64K..
Circuits At Home 2011
USB Host Shield Quality Control Routine
Reading REVISION register... Die revision 03
SPI long test. Transfers 1MB of data. Each dot is 64K................ SPI long test passed
GPIO test. Connect GPIN0 to GPOUT7, GPIN1 to GPOUT6, and so on
Test failed. Value written: 00 Value read: FF 
Press any key to continue...
GPIO test passed.
PLL test. 100 chip resets will be performed
Resetting oscillator

Reset number 0 Time to stabilize - 375 cycles

Reset number 1 Time to stabilize - 375 cycles

Reset number 2 Time to stabilize - 375 cycles

Reset number 3 Time to stabilize - 375 cycles

Reset number 4 Time to stabilize - 375 cycles

Reset number 5 Time to stabilize - 375 cycles

Reset number 6 Time to stabilize - 376 cycles

Reset number 7 Time to stabilize - 375 cycles

Reset number 8 Time to stabilize - 375 cycles

Reset number 9 Time to stabilize - 375 cycles

Reset number 10 Time to stabilize - 376 cycles

Reset number 11 Time to stabilize - 375 cycles

Reset number 12 Time to stabilize - 375 cycles

Reset number 13 Time to stabilize - 374 cycles

Reset number 14 Time to stabilize - 374 cycles

Reset number 15 Time to stabilize - 375 cycles

Reset number 16 Time to stabilize - 374 cycles

Reset number 17 Time to stabilize - 374 cycles

Reset number 18 Time to stabilize - 374 cycles

Reset number 19 Time to stabilize - 374 cycles

Reset number 20 Time to stabilize - 374 cycles

Reset number 21 Time to stabilize - 374 cycles

Reset number 22 Time to stabilize - 374 cycles

Reset number 23 Time to stabilize - 375 cycles

Reset number 24 Time to stabilize - 375 cycles

Reset number 25 Time to stabilize - 375 cycles

Reset number 26 Time to stabilize - 375 cycles

Reset number 27 Time to stabilize - 375 cycles

Reset number 28 Time to stabilize - 374 cycles

Reset number 29 Time to stabilize - 374 cycles

Reset number 30 Time to stabilize - 374 cycles

Reset number 31 Time to stabilize - 374 cycles

Reset number 32 Time to stabilize - 374 cycles

Reset number 33 Time to stabilize - 374 cycles

Reset number 34 Time to stabilize - 375 cycles

Reset number 35 Time to stabilize - 374 cycles

Reset number 36 Time to stabilize - 374 cycles

Reset number 37 Time to stabilize - 375 cycles

Reset number 38 Time to stabilize - 375 cycles

Reset number 39 Time to stabilize - 375 cycles

Reset number 40 Time to stabilize - 375 cycles

Reset number 41 Time to stabilize - 375 cycles

Reset number 42 Time to stabilize - 374 cycles

Reset number 43 Time to stabilize - 374 cycles

Reset number 44 Time to stabilize - 374 cycles

Reset number 45 Time to stabilize - 374 cycles

Reset number 46 Time to stabilize - 375 cycles

Reset number 47 Time to stabilize - 375 cycles

Reset number 48 Time to stabilize - 374 cycles

Reset number 49 Time to stabilize - 374 cycles

Reset number 50 Time to stabilize - 374 cycles

Reset number 51 Time to stabilize - 374 cycles

Reset number 52 Time to stabilize - 376 cycles

Reset number 53 Time to stabilize - 375 cycles

Reset number 54 Time to stabilize - 375 cycles

Reset number 55 Time to stabilize - 375 cycles

Reset number 56 Time to stabilize - 375 cycles

Reset number 57 Time to stabilize - 375 cycles

Reset number 58 Time to stabilize - 374 cycles

Reset number 59 Time to stabilize - 374 cycles

Reset number 60 Time to stabilize - 374 cycles

Reset number 61 Time to stabilize - 374 cycles

Reset number 62 Time to stabilize - 374 cycles

Reset number 63 Time to stabilize - 374 cycles

Reset number 64 Time to stabilize - 374 cycles

Reset number 65 Time to stabilize - 374 cycles

Reset number 66 Time to stabilize - 374 cycles

Reset number 67 Time to stabilize - 375 cycles

Reset number 68 Time to stabilize - 375 cycles

Reset number 69 Time to stabilize - 375 cycles

Reset number 70 Time to stabilize - 375 cycles

Reset number 71 Time to stabilize - 375 cycles

Reset number 72 Time to stabilize - 374 cycles

Reset number 73 Time to stabilize - 375 cycles

Reset number 74 Time to stabilize - 374 cycles

Reset number 75 Time to stabilize - 375 cycles

Reset number 76 Time to stabilize - 374 cycles

Reset number 77 Time to stabilize - 374 cycles

Reset number 78 Time to stabilize - 375 cycles

Reset number 79 Time to stabilize - 374 cycles

Reset number 80 Time to stabilize - 374 cycles

Reset number 81 Time to stabilize - 374 cycles

Reset number 82 Time to stabilize - 375 cycles

Reset number 83 Time to stabilize - 375 cycles

Reset number 84 Time to stabilize - 375 cycles

Reset number 85 Time to stabilize - 375 cycles

Reset number 86 Time to stabilize - 376 cycles

Reset number 87 Time to stabilize - 374 cycles

Reset number 88 Time to stabilize - 374 cycles

Reset number 89 Time to stabilize - 374 cycles

Reset number 90 Time to stabilize - 374 cycles

Reset number 91 Time to stabilize - 375 cycles

Reset number 92 Time to stabilize - 375 cycles

Reset number 93 Time to stabilize - 374 cycles

Reset number 94 Time to stabilize - 375 cycles

Reset number 95 Time to stabilize - 374 cycles

Reset number 96 Time to stabilize - 374 cycles

Reset number 97 Time to stabilize - 375 cycles

Reset number 98 Time to stabilize - 375 cycles

Reset number 99 Time to stabilize - 375 cycles

Checking USB device communication.

Reset complete. Waiting for the first SOF...
Getting device descriptor
Descriptor Length:	12
Descriptor type:	01
USB version:		0200
Device class:		00
Device Subclass:	00
Device Protocol:	00
Max.packet size:	08
Vendor  ID:		046D
Product ID:		C52B
Revision ID:		1201
Mfg.string index:	01
Prod.string index:	02
Serial number index:	00
Number of conf.:	01

All tests passed. Press RESET to restart test

Danach kann das Keyboard/Mouse-Beispiel erfolgreich auf den Arduino Mega geladen werden.
-> Es funktioniert !!!

...ABER NUR WENN ALL DAS BESCHRIEBENE EINGEHALTEN WIRD.

Toll! :wink:
Die zB: USB HOST SHIELD Library 2.0 sollte auch mit dem Shield funktionieren, wenn es einen MAX3421E verwendet, was es ja tut.

lg dony

dony:
Toll! :wink:
Die zB: USB HOST SHIELD Library 2.0 sollte auch mit dem Shield funktionieren, wenn es einen MAX3421E verwendet, was es ja tut.

lg dony

Genau um diese Bibliothek geht es doch !!!

Hast du dir meinen Link (zu exp-tech) eigentlich mal angeschaut.

Und mit meinen Bild hatte ich doch recht, oder ?

(Mein Arduino Mega ist ein Model: "MEGA 2560 R2" und da ist nach dem AREF-PIN ende im Gelände.)

BluetoothHamster:
Genau um diese Bibliothek geht es doch !!!

Hast du dir meinen Link (zu exp-tech) eigentlich mal angeschaut.

Und mit meinen Bild hatte ich doch recht, oder ?

(Mein Arduino Mega ist ein Model: "MEGA 2560 R2" und da ist nach dem AREF-PIN ende im Gelände.)

dony:
konnte ich nur erkennen das die I2C Pins nicht vorhanden sind, aber braucht man die?

Das war ja meine Frage.

Ja ich hab mir den link angeschaut und ich kannte die Seite bereits aber du hast natürlich recht, ist die selbe Bibliothek. :wink:

OT: Damit kannst du jetzt eine Funk Tastaur verwenden um das 'Arduino' zu steuern. :wink:

lg dony

I connect USB shield but when i upload code of USBHIDBootkbd then i got results like this
start
OSC did not start.

I connected
52->13
50->12
51->11
53->10
and RESET to pin 7.
please help. How can i connect Arduino USB shield to Arduino mega?
Please find attachment of USB HOST Shield.