Author Topic: Adafruit Motor Shield v2 blockt Interrupts  (Read 13988 times)

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Adafruit Motor Shield v2 blockt Interrupts
« on: February 22, 2016, 12:14:27 AM »
Salut,

bei der Ansteuerung des Fischertechnik Roboters verwende ich die Interrupts auf Pins 18-21 des Mega für die Encoder. Mit dem neuen Adafruit MotorShield wird I2C verwendet. Dieses liegt auf den Pins 20 und 21 (siehe Eagle Files), so dass die Schaltung nicht mehr funktioniert. Auch scheint I2C generell mit Interrupts Problem zu machen, da es die Interrupts abschaltet. Hat jemand Erfahrung damit?

Ciao, Mathias

pylon

  • freakyfriday
  • Full Member
  • *
  • Posts: 158
  • Karma: +16/-0
Re: Adafruit Motor Shield v2 blockt Interrupts
« Reply #1 on: February 22, 2016, 09:32:18 AM »
Hallo Matthias,

I2C (TWI) schaltet die Interrupts nicht ab, im Gegenteil es verwendet selbst Interrupts, um die Buffer zu füllen bzw. zu leeren. Kannst Du mit den Interrupts von Pin 20/21 nicht auf Pin 2/3 ausweichen?
Welches Shield verwendest Du genau (Link)?

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Adafruit Motor Shield v2 blockt Interrupts
« Reply #2 on: February 22, 2016, 03:39:07 PM »
Salut,

es geht um das Adafruit Shield: http://shop.boxtec.ch/adafruit-motorstepperservo-shield-for-arduino-kit-p-42089.html
Ich habe gelesen, dass I2C sehr wohl Interrupts benutzt, sie aber im Falle eines I2C-Ereignisses abschaltet.

Ich habe das Problem "geerbt", da ein Leser der Make meine Anleitung des Fischertechnikroboters nachbaut und das neue Shield verwendet. Ich habe vorgeschlagen, auf Pin2/3 auszuweichen oder ein altes Shield zu verwenden. Da letztere aus China angeschwemmt werden, hat er sich für den Austausch entschieden.
In den Forenbeiträgen habe ich an einer Stelle den Hinweis gesehen, dass I2C in die Interrupts eingreifen muss (siehe twi_readFrom und twi_WriteTo)

Kann natürlich auch gut daneben liegen, wenn I2C aber mit Interrupts Probleme macht, wäre das gut zu wissen und könnte mach üble Fehlersuche erübrigen.

Ciao, Mathias

pylon

  • freakyfriday
  • Full Member
  • *
  • Posts: 158
  • Karma: +16/-0
Re: Adafruit Motor Shield v2 blockt Interrupts
« Reply #3 on: February 23, 2016, 09:20:54 AM »
Interrupts werden nicht explizit abgeschaltet, aber ein Teil der TWI-Verarbeitung geschieht in einem Interrupt-Handler, während dessen keine andere Interrupt-Services aufgerufen werden. Deswegen geht aber ein eintreffender Hardware-Interrupt nicht verloren, er wird einfach später ausgeführt. Ein Problem entsteht erst dann, wenn die Interrupts so schnell eintreffen, dass während der Abarbeitung eines TWI-Events zwei Flanken auftreten, dann geht eine davon verloren. Wenn das Timing der Anwendung allerdings so knapp ist, dann sollte man sowieso auf einen schnelleren Prozessor wechseln, denn dann dürfte auch der Timer-Interrupt grosse Probleme bereiten.

Grundsätzliche Probleme der I2C-Hard- oder Software auf der Arduino-Plattform wären mir nicht bekannt. Der Tiny ist etwas heikler, aber dort ist auch keine dedizierte I2C-Hardware vorhanden.

Wie äusserten sich denn die Probleme in Deinem konkreten Fall?

MathiasW

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 614
  • Karma: +13/-0
    • my Arduino page
Re: Adafruit Motor Shield v2 blockt Interrupts
« Reply #4 on: February 23, 2016, 10:38:45 AM »
Salut,

im konkreten Fall werden die Encoderpulse des Schrittmotoren nicht gesehen. Da diese mit maximal 75 Pulse/Umdrehung bestenfalls im kHz Bereich liegen, sollte es keine Probleme wegen der Geschwindigkeit des Prozessors geben.

Ich werde mir mal das neue Shield besorgen (leider derzeit 0 Stock bei Christoph) und driekt testen. Melde mich dann, wenn es Probleme gibt

Ciao, Mathias