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:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme!!
16.05.2015, 12:30
Beitrag #9
RE: Probleme!!
Hi,
das könnte so gehen, aber schön ist es nicht. Ich würde es mit Interrupts machen. Warum ist es ein Problem, wenn Du schon Interrupts für Motoren verwendest?
Gruß,
Thorsten

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
16.05.2015, 12:40 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 12:47 von HaWe.)
Beitrag #10
RE: Probleme!!
das Problem sind die pwm-Pins, die sich mit den IRQs stören -
aber mal anders herum gefragt, wie sähe denn dein Vorschlag mit Interrupts aus?



Code:
// motor 0
#define pinenc0A   22  // enc0A yellow
#define pinenc0B   23  // enc0B blue
#define pinmot0d1  24  // dir0-1   <<
#define pinmot0d2  25  // dir0-2
#define pinmot0pwm 10  // pwm enable0  <<  %timer 2

// motor 1
#define pinenc1A   26  // enc1A yellow
#define pinenc1B   27  // enc1B blue
#define pinmot1d1  28  // dir1-1   <<
#define pinmot1d2  29  // dir1-2
#define pinmot1pwm  9  // pwm enable1  <<  %timer 2


// motor 2
#define pinenc2A   30  // enc2A yellow
#define pinenc2B   31  // enc2B blue
#define pinmot2d1  32  // dir2-1   <<
#define pinmot2d2  33  // dir2-2
#define pinmot2pwm  8  // pwm enable2  <<  %timer 4

// motor 3
#define pinenc3A   34  // enc3A yellow
#define pinenc3B   35  // enc3B blue
#define pinmot3d1  36  // dir3-1   <<
#define pinmot3d2  37  // dir3-2
#define pinmot3pwm  7  // pwm enable3  <<  %timer 4

// motor 4
#define pinenc4A   38  // enc4A yellow
#define pinenc4B   39  // enc4B blue
#define pinmot4d1  40  // dir4-1   <<
#define pinmot4d2  41  // dir4-2
#define pinmot4pwm  6  // pwm enable4  <<  %timer 4

// motor 5
#define pinenc5A   42  // enc5A yellow
#define pinenc5B   43  // enc5B blue
#define pinmot5d1  47  // dir5-1   <<
#define pinmot5d2  48  // dir5-2
#define pinmot5pwm  5  // pwm enable5  <<  %timer 3


//


inline void Timer1_AVR_Interrupt() {
  //------------------------------------------------------------------------------------
  // timer interrupt for encoder readings
  noInterrupts(); // Jetzt keine Interrupts / disable

  TIMSK1 |= (1 << OCIE1A); // Timer 1 PIDOutput Compare A Match Interrupt Enable
  TCCR1A = 0;             // "Normaler" Modus
  // WGM12: CTC-Modus einschalten (Clear Timer on Compare match)
  //        Stimmen OCR1A und Timer überein, wird der Interrupt ausgelöst
  // Bit CS12 und CS10 setzen

  // => Prescaler=8:
  TCCR1B = (1 << WGM12) | (1 << CS11); // Frequenz = 16000000 / 1024 / 15 = rd. 1042Hz = 1kHz

  // Prescaler OCR1A  einstellen:
  // Frequenz = 16,000,000 / 8 / 512 = rd. 4 kHz (512-1=511)
  OCR1A = 511; // also 4kHz = alle 250µs

  interrupts(); // Interrupts wieder erlauben / enable
  //------------------------------------------------------------------------------------

}

ps, edit:
timer 5 (pins 44-46) wäre noch frei, wollte ich allerdings VIELLEICHT noch als pwm nutzen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 13:05
Beitrag #11
RE: Probleme!!
Hi,
nur die Timer und die PWM-Pins hängen zusammen. Die Interrupts, die durch Änderungen an irgendwelchen INPUT-Pins ausgelöst werden haben damit nichts zu tun.
Die Idee ist die, dass man eine Interrupt-Handler-Funktion baut, die einfach die Zeit seit dem Trigger misst. Dafür kannst Du einfach micros() verwenden. Das Ergebnis schreibt man in eine (volatile) Variable und setzt dann noch ein Flag, dass der Ping zurück kam.
Gruß,
Thorsten

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
16.05.2015, 13:11 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 13:21 von HaWe.)
Beitrag #12
RE: Probleme!!
(16.05.2015 13:05)Thorsten Pferdekämper schrieb:  nur die Timer und die PWM-Pins hängen zusammen. Die Interrupts, die durch Änderungen an irgendwelchen INPUT-Pins ausgelöst werden haben damit nichts zu tun.

ja, das ist klar, aber du siehst ja, dass ich 6 pwm-Pins nutze, die auch für die timer 2,3,4 genutzt werden (fallen also dadurch für IRQs weg), und timer1 ist der 250µs-IRQ für die Encoder (fällt also auch weg)

Zitat:Die Idee ist die, dass man eine Interrupt-Handler-Funktion baut, die einfach die Zeit seit dem Trigger misst. Dafür kannst Du einfach micros() verwenden. Das Ergebnis schreibt man in eine (volatile) Variable und setzt dann noch ein Flag, dass der Ping zurück kam.

ja, dafür wäre gerade noch timer 5 frei, oder sehe ich das falsch?
wie würdest du es jetzt mit timer5 für die SR04s lösen ? Ich habe da komplett überhaupt keinen Plan Undecided

(ich habe vor, 5-6 SR04s zu benutzen, jeweils in 2er- bis 3er-Gruppen gleichzeitig ge-pingt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 13:26 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 13:27 von Thorsten Pferdekämper.)
Beitrag #13
RE: Probleme!!
Ich kapiere nicht, was Du willst. Was hat denn Timer 5 mit den Interrupts der Pins zu tun???? ...und was willst Du mit dem Timer für den Ultraschall-Sensor? micros() geht doch noch, oder?

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
16.05.2015, 13:48 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 13:51 von HaWe.)
Beitrag #14
RE: Probleme!!
jetzt verstehe ich nicht, was du nicht verstehst.

Dein Vorschlag war doch, an Stelle der micros-Methode in der while-Schleife (s. meinen obigen Code) für die SR04s stattdessen einen Timer-Interrupt zu verwenden.

An möglichen Interrupts hat der Mega die Interrupts 1-5 zur Verfügung, einen davon werde ich doch wohl brauchen, oder nicht ?

Aber:
Timer 1 ist schon für die Motor-QEs als 250µs-IRQ genutzt,
Timer 2 geht nicht wegen genutzter pwm pins 9+10
Timer 3 geht nicht wegen genutztem pwm pin 5
Timer 4 geht nicht wegen genutzter pwm pins 6-8

also bleibt doch nur noch Timer 5 für den von dir vorgeschlagenen IRQ für die SR04s übrig, oder nicht?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 13:50
Beitrag #15
RE: Probleme!!
(16.05.2015 13:48)HaWe schrieb:  Dein Vorschlag war doch, an Stelle der micros-Methode für die SR04s stattdessen einen Timer-Interrupt zu verwenden.
Nein, ganz und gar nicht. Keinen Timer-Interrupt, sondern einen von denen Interrupts, die eine Änderung an einem Input-Pin anzeigen. Innerhalb der Interrupt-Routine dann einfach den Kram mit micros() erledigen.

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
16.05.2015, 13:52 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2015 14:05 von HaWe.)
Beitrag #16
RE: Probleme!!
das verstehe ich jetzt nicht...

edit....
ps, ich bezog mich auf diesen Teil:
Zitat:Außerdem wäre es dann geschickt, mit Interrupts zu arbeiten. Also entweder per Interrupt 0 und 1

du meinst jetzt sicher die Pinchange-Interrupts
Zitat:...oder aber PinChangeInterrupt. Dafür gibt's auch eine ganz nette Library.
- damit kenne ich mich allerdings überhaupt nicht aus, und alles was ich bisher darüber gelesen habe ist mir auch komplett unklar.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ArduinoDroid Probleme Brother Tak 1 199 10.09.2016 22:12
Letzter Beitrag: Brother Tak
  Roboter-Bau Probleme blebbens 8 374 12.07.2016 07:35
Letzter Beitrag: Binatone
  Probleme mit sprintf() und dtostrf() GMBU 11 797 22.06.2016 10:52
Letzter Beitrag: GMBU
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 6 946 06.05.2016 18:34
Letzter Beitrag: arduinopeter
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.167 17.04.2016 21:12
Letzter Beitrag: hotsystems
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 571 06.03.2016 14:44
Letzter Beitrag: hotsystems
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 328 29.02.2016 00:00
Letzter Beitrag: hotsystems
  Probleme beim auswählen des Ports Levi 11 816 21.02.2016 18:00
Letzter Beitrag: hotsystems
  IRemote probleme mit abfrage schnutzkurt 18 1.140 20.02.2016 01:30
Letzter Beitrag: SkobyMobil
  Probleme mit SPI - Ethernet und nRF24L01 itsy 35 2.966 21.11.2015 19:59
Letzter Beitrag: ardu_arne

Gehe zu:


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