Sari la conținut
ELFORUM - Forumul electronistilor

USB Mini shield 2.0 cu Arduino Mega 2560


messu

Postări Recomandate

Incerc sa conectez un shiled de tipul celui mentionat in titlu, la Arduino 2560 insa fara succes.

Acelasi shield, conectat la un Arduino Nano, functioneza perfect.

Conectarea la Arduino Nano respectiv Arduino 2560 am facut-o ca in imaginea alaturata.

Ideea este ca n-am gasit nicaieri ceva clar despre conectarea pinilor INT si RST in cazul Arduino 2560. De-aia i-am marcat cu ?? La Nano i-am pus la D9 si RST si merge totul brici.

Pentru test am folosit, din exemple, fara nico modificare, schita USBHiDBootKbd.

Pe Arduino 2560 imi afiseaza pe monitorul serial: OSC din not start.

A mai intalnit ciineva problema ? 

Unde gresesc ?

 

connecting_2.jpg

Link spre comentariu
  • Răspunsuri 15
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Exact asta am făcut. De asta am și pus imaginea cu corespondenta pinilor. Nu merge , din păcate.

Suspectez o alocare diferită a pinilor , de la un model de Arduino la altul, în librărie, dar trebuie sa mai investighez...

Speram sa mai fi întâlnit cineva problema și să scap mai simplu 😁

Editat de messu
Link spre comentariu

Am incercat cu cu RST la 7 și INT la 9, dar nu s-a schimbat nimic.

Nici CLK pe pinul 20 nu vrea.

 

Am gasit, intr-adevar, in librarie, un fisier de configurare. Se cheama usbcore.h si contine alocarea pinilor SS si INT, pentru fieare tip de placa Arduino suportata de catre USB shield. Problema este ca atat UNO cat si 2560 au aceiasi pini alocati (10 si 9) dar de functionat nu functioneaza decat pe UNO (NANO in cazul meu).

Cred ca fac ceva rau, dar nu-mi dau seama ce, in momentul asta. Tre sa mai studiez...

 

Codul care functioneza perfect pe NANO este cel de mai jos. Este un exemplu inclus in librarie la care eu n-am modificat absolut nimic.

 

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

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

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>    HidKeyboard(&Usb);

KbdRptParser Prs;

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");

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

  delay( 200 );

  HidKeyboard.SetReportParser(0, &Prs);
}

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

 

Link spre comentariu

#include <SPI.h>
Adaugi asta:
#define INT_PIN 2  // Explicitly define D2 (INT0) for Arduino Mega 2560

  ...........................
  
USB     Usb;
//USBHub     Hub(&Usb);
HIDBoot<USB_HID_PROTOCOL_KEYBOARD>    HidKeyboard(&Usb);

KbdRptParser Prs;
Adaugi asta: 
void interruptServiceRoutine() {
  
  Serial.println("Interrupt triggered!");
}

void setup()
{
 ............

  HidKeyboard.SetReportParser(0, &Prs);

Adaugi asta:
  pinMode(INT_PIN, INPUT);  // Set D2 (INT0) as input

si asta:
  attachInterrupt(digitalPinToInterrupt(INT_PIN), interruptServiceRoutine, RISING);
}

Aduaga ce am scris mai sus sa vedem daca merge cu D2 (pinul 2)

Link spre comentariu

Am facut proba cu #define INT_PIN 2 si, din pacate nu este nicio schimbare.

Mai mult, am constatat ca pe Arduino NANO functioneaza inclusiv cu pinul INT in aer, neconectat.

Nu stiu ce sa mai cred.

Stiu ca am un Mega Pro MIni, pe undeva si ma gandesc sa incerc si cu el, poate are ceva placa asta.

Link spre comentariu

Haideti c-am lamurit treaba. Gandul de pe urma, ca de obicei...

Placa Arduino Mega, n-are nicio problema.

Am gresit "un pic" la pini. Alocarea pinului SS este diferita la cele doua placi fata de ce scrie in librarie. 

La NANO, pinul SS este este 10 si alocarea in librarie este tot 10.

La MEGA pinul SS este 53 si eu am mers direct pe el, desi libraria aloca CLAR pinul 10. De aici greseala.

In concluzie, pentru cine se mai loveste de problema, conectarea corecta este cea din imaginea pe care o atasez.

Multumesc tuturor pentru ajutor si implicare !

 

 

connecting_MEGA_2560.jpg

Link spre comentariu
Acum 6 minute, teomishu a spus:

Eu nu cred ca cei care au scris libraria au gresit. Poate nu ai ales corect cipul cand ai compilat.

În IDE-ul de la Arduino nu îți alegi chipul ci modelul plăcii, astfel se alege în mod automat și modelul chipului care din câte știu eu este unul singur pentru Arduino Mega.

Ciudat că au ales pinul respectiv pentru SS/CS, înseamnă că au implementat SPI software.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări