INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Pins am Drehregler (Rotary Encoder)
02.03.2015, 14:43 (Dieser Beitrag wurde zuletzt bearbeitet: 02.03.2015 14:44 von facebraker.)
Beitrag #9
RE: Pins am Drehregler (Rotary Encoder)
(02.03.2015 13:31)HaWe schrieb:  um dich vollends zu verwirren: ...

Das ist dir gelungen Smile

Okay, ich habe nur eine Frage: Häh?Big Grin

Spaß bei Seite, aber was hat es mit den Teilern auf sich?
Ich habe einen Drehencoder, der 20 "Schaltstufen" hat, wenn er 1/20 in Uhrzeigersinn dreht erhöhe ich einen Wert umgedreht gegen Uhrzeiger sind vermindere ich ihn, was hat es mit den Teilern auf sich?

Kannst du mir deine grundsätzliche Herangehensweise erklären, warum du es so gelöst hast?

Ich stehe gerade auf dem Schlauch ;-)

Danke!

Gruß Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2015, 15:07 (Dieser Beitrag wurde zuletzt bearbeitet: 02.03.2015 15:32 von HaWe.)
Beitrag #10
RE: Pins am Drehregler (Rotary Encoder)
hehe, so habe ich auch zuerst geguckt Smile
den original Link siehst du ja im Code Wink

was passiert ist folgendes:
Grundsätzlich wird ein Timer-Interrupt aufgerufen, und das egal was sonst im Code passiert.
Der Arduino ist mit 16MHz getaktet, und was mit den Teilern passiert ist nichts anderes, als diese 16000000 in kleine Stücke weiter zu teilen. Das machen die AVR-Timer auf etwas kompilzeirte Weise.
Wenn du also die Teiler richtig einstellst aif 1/16000.stel, dann bekommst du jede 1 Millisekunde einen Interrupt für deine Encoder zum Auslesen der Stellung.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2015, 15:15
Beitrag #11
RE: Pins am Drehregler (Rotary Encoder)
(02.03.2015 15:07)HaWe schrieb:  Wenn du also die Teiler richtig einstellst aif 1/16000.stel, dann bekommst du jede 1 Millisekunde einen Interrupt für deine Encoder zum Auslsen der Stellung.
Warum wird das per Timer-Interrupt gemacht und nicht per Pin Change Interrupt? Gibt es da einen Vorteil? Nachteile fallen mir ein paar ein...

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2015, 15:18 (Dieser Beitrag wurde zuletzt bearbeitet: 02.03.2015 15:35 von HaWe.)
Beitrag #12
RE: Pins am Drehregler (Rotary Encoder)
timer IRQs können auch bei landauernden Rechenoperationen oder anderen Widrigkeiten verlässlich ausgelesen werden.
es funktioniert absolut perfekt !


und wenn ich 8x2 QEs habe, kostet es kaum mehr Zeit als bei nur 1x 2, ich mach halt einfach meine "Blitzlichtaufnahmen" der Encoderstellungen und rechne in 1 Rutsch alle Winkelwerte nacheinander aus.

Im Code sieht das dann bei 8 Motoren = 16 Encoderpins so aus wie hier im Code:
http://www.mindstormsforum.de/viewtopic....302#p65015
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2015, 15:36
Beitrag #13
RE: Pins am Drehregler (Rotary Encoder)
Hallo HaWe,

mit deinen Mindstorm - Thread komme ich so langsam rein, aber ich kann leider keine HW Interrupts nutzen, die sind schon belegt.

@Thorsten, genau die gleiche Frage habe ich mir auch gestellt, warum etwas gewaltsam anschieben bzw. abfragen, wenn ich es automatisch wenn es passiert gemeldet bekomme?

Wenn ich Dich richtig verstanden habe HaWe, nutzt du das um Motore abzufragen, ich möchte ja nur einen Drehregler, den man per Hand bedient, ich kann mir schon vorstellen, dass es haarig wird, wenn ich noch ermitteln will wie schnell der gedreht wurde um das wie du es bei den Button gelöst hast, umzusetzen ... Drehencoder weil, wenn sexy dann muss es eine richtige Sexbome sein :-)

Gruß Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2015, 15:45
Beitrag #14
RE: Pins am Drehregler (Rotary Encoder)
(02.03.2015 15:18)HaWe schrieb:  timer IRQs können auch bei landauernden Rechenoperationen oder anderen Widrigkeiten verlässlich ausgelesen werden.
es funktioniert absolut perfekt !
Das ist beim Pin Change Interrupt genauso, nur dass Du keinen Overhead hast, wenn die Räder mal langsam laufen oder stillstehen.

Zitat:und wenn ich 8x2 QEs habe, kostet es kaum mehr Zeit als bei nur 1x 2, ich mach halt einfach meine "Blitzlichtaufnahmen" der Encoderstellungen und rechne in 1 Rutsch alle Winkelwerte nacheinander aus.
Naja, Du rechnest aber auch alles durch, wenn sich bei allen QEs gar nichts ändert. Normalerweise wirst Du ja kaum 1000 Impulse pro Sekunde auf jedem Encoder haben.

Zitat:Im Code sieht das dann bei 8 Motoren = 16 Encoderpins so aus wie hier im Code:
http://www.mindstormsforum.de/viewtopic....302#p65015
Das suche ich mir da jetzt nicht raus...

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2015, 15:49
Beitrag #15
RE: Pins am Drehregler (Rotary Encoder)
(02.03.2015 15:36)facebraker schrieb:  @Thorsten, genau die gleiche Frage habe ich mir auch gestellt, warum etwas gewaltsam anschieben bzw. abfragen, wenn ich es automatisch wenn es passiert gemeldet bekomme?
Das meine ich auch. Polling erzeugt praktisch immer Overhead.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2015, 15:52 (Dieser Beitrag wurde zuletzt bearbeitet: 02.03.2015 16:15 von HaWe.)
Beitrag #16
RE: Pins am Drehregler (Rotary Encoder)
langsam, langsam... !

bei Lego sind Drehregler, genau wie du sie einzeln hast, in den Motoren eingebaut, ist also nichts anderes.

Und du brauchst nur 1 einzigen Timer-Interrupt. Das kann beim Uno der IRQ1 sein oder auch IRQ2 (den man sonst nur für Servoshields braucht). Allerdings funktioniert der 2er etwas anders als der 1er oder 0er.
IRQ 0 wird für millis() oder delay() oder so gebraucht, fällt also weg.
Insgesamt muss ich aber beim Timer nichts überwachen im gegensatz zum Pinchange. Ich lese einfach aus, ob die betr. pins gerade HIGH oder LOW sind, und das im festen Rhytmus. Pinchange braucht mehr Überwachungsvorgänge.
Stell die einfach vor, du musst 16 pinchanges überwachen. Dann kann es sein, dass Nr. 1 gerade ausgelöst wurde, dann berechnest du den neuen Encoderwinkel, und fast unmittelbar danach kommen Nr. 4, dann berechnest du den neuen Encoderwinkel, und 5, dann berechnest du den neuen Encoderwinkel, und 9, dann berechnest du den neuen Encoderwinkel, und 12, dann berechnest du den neuen Encoderwinkel, alle jeweils im 2-10µs-Abstand hinterhergedackelt, und 100 µs später folgen IRQs 2, dann berechnest du den neuen Encoderwinkel, und 7, dann berechnest du den neuen Encoderwinkel, und 11, dann berechnest du den neuen Encoderwinkel,: das sind 8 IRQ-Ereignisse mit jeweils einzelnen Winkel-Berechnungen.

Bei mir wäre es nur 1 IRQ Ereignis für alle zusammen, alle 250µs, denn dazwischen ändert sich nichts (denn ich weiß ja, dass die Motoren sich nur max. 1° = 1 Tick pro 1ms drehen). Diese Zeit habe ich für andere sinnvollere Aufgaben übrig. Und 1x alle 250µs - das merkst du im laufenden Betrieb wirklich nicht. Andererseits drehen sich meine Motoren überwiegend mit ihren Encodern, also auslesen müsste ich sowieso - egal ob jetzt nur 1 läuft oder alle 8.

(Eigentlich würden sogar 500µs IRQ Takt ausreichen, ich habe nur deshalb 250 genommen, falls mal ein Motor dabei ist der passiv mächtig schnell hochgedreht wird)


den Dpin, der dem entspr. IRQ 1 zugeordnet ist, kannst du aber übrigens jederzeit frei weiter verwenden - nur nicht für pwm, denn dafür braucht er seinen IRQ selber (ich habe mir leider nicht notiert, welcher pin beim Uno dem Timer IRQ 1 zugeordnet ist)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Uno gehen zwei digital Pins nicht edlosijagen 15 591 07.07.2016 19:22
Letzter Beitrag: Bitklopfer
  mehr PWM Pins WIMunios 8 1.107 20.03.2016 00:19
Letzter Beitrag: hotsystems
  Welche Pins für Software Serial BennIY 1 493 27.01.2016 23:02
Letzter Beitrag: hotsystems
  Mit Rotary Encoder Tastatur simulieren? noxx 9 1.469 17.11.2015 17:18
Letzter Beitrag: Binatone
  Wie viele PINs werden für LCD 2x16 benötigt? torsten_156 4 1.335 05.02.2015 09:11
Letzter Beitrag: xuino
  Belastbarkeit des +5Volt Pins Kyrill 2 1.254 16.01.2015 06:33
Letzter Beitrag: Kyrill
  I²C Pins "verlegen" Marcel5291 2 1.220 18.11.2014 15:18
Letzter Beitrag: rkuehle
  Frage zu motorshield und PINs torsten_156 9 4.883 27.10.2014 15:53
Letzter Beitrag: torsten_156
  Arduino Due: pins mit 5V ?? pins 22-24, 50-53? HaWe 1 1.888 27.10.2014 13:19
Letzter Beitrag: Bitklopfer
  LCD Shield & 4Kanal Relais Shield gleiche Pins hannes77 3 1.675 04.06.2014 00:25
Letzter Beitrag: ArduTux

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste