- LiTime Speicher und Akkus         
Ergebnis 1 bis 10 von 20

Thema: 250µs-Timer für Arduino Due

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast

    250µs-Timer für Arduino Due

    hallo,
    kennt jemand Beispiel-Sketche, wie man Timer auf dem Due programmiert?
    Ich habe nur die alten Codes für die IRQs mit den völlig unleserlichen und uverständlichen AVR-Codes wie

    Code:
    // (in setup() 
      noInterrupts(); 
      TIMSK1 |= (1 << OCIE1A); 
      TCCR1A = 0;            
      TCCR1B = (1 << WGM12) | (1 << CS11); 
      OCR1A = 511; 
      interrupts();
    plus zugehöriger ISR
    Code:
    ISR(TIMER1_COMPA_vect) {  // read encoder values
    
      ISRab [ 0] <<= 2;
      ISRab [ 0] &= B00001100;
      ISRab [ 0] |= (digitalRead(pinenc0A) << 1) | digitalRead(pinenc0B);
      motenc[ 0] += schrittTab[ISRab[0]];           //
    
      ISRab [ 1] <<= 2;
      ISRab [ 1] &= B00001100;
      ISRab [ 1] |= (digitalRead(pinenc1A) << 1) | digitalRead(pinenc1B);
      motenc[ 1] += schrittTab[ISRab[1]];           //
    
      ISRab [ 2] <<= 2;
      ISRab [ 2] &= B00001100;
      ISRab [ 2] |= (digitalRead(pinenc2A) << 1) | digitalRead(pinenc2B);
      motenc[ 2] += schrittTab[ISRab[2]];           //
    
      ISRab [ 3] <<= 2;
      ISRab [ 3] &= B00001100;
      ISRab [ 3] |= (digitalRead(pinenc3A) << 1) | digitalRead(pinenc3B);
      motenc[ 3] += schrittTab[ISRab[3]];           //
    
      ISRab [ 4] <<= 2;
      ISRab [ 4] &= B00001100;
      ISRab [ 4] |= (digitalRead(pinenc4A) << 1) | digitalRead(pinenc4B);
      motenc[ 4] += schrittTab[ISRab[4]];           //
    
      ISRab [ 5] <<= 2;
      ISRab [ 5] &= B00001100;
      ISRab [ 5] |= (digitalRead(pinenc5A) << 1) | digitalRead(pinenc5B);
      motenc[ 5] += schrittTab[ISRab[5]];           //
    
    }

    Alles ziemlich verkorkst, aber funktioniert wenigstens.

    Aber wie geht jetzt Auslesen von Quadratur-Encodern etc. in festen 200-250µs-Zeitabständen auf dem Due ?
    Geändert von HaWe (19.11.2014 um 16:40 Uhr)

  2. #2
    HaWe
    Gast
    weiß evtl jemand, wie es auf dem Beaglebone Black gemacht wird?

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Hallo,

    völlig unleserliche und unverständliche AVR-Codes kannst du für den Due vergessen. Da brauchst du unleserliche und unverständliche SAM3 Codes.

    Die ARM Cortex liefern zwar das Grundgerüst, aber Timer sind bei ARM Controllern dann wieder herstellerspezifisch ausgeführt. Da hilft nur ein Blick in dieses schöne 1800 seitige Datenblatt vom Prozessor ...

    Das ist ein Grund, warum mein Due meist unbenutzt rumliegt. Einfache Timergeschichten gehen mit mbed-fähigen ARM Controllern viel einfacher.
    http://developer.mbed.org/handbook/Ticker
    http://developer.mbed.org/handbook/RTOS#rtos-timer
    Wenn das nicht reicht, wird es aber auch wieder herstellerspezifisch ...

    Der Beaglebone läuft ja normalerweise unter Linux, da werden die Timer des ARM vom Betriebssystem verwendet. Es gibt allerdings auch Timereingänge z.B. zur Frequenzmessung. Für zeitkritische Hardware Sachen hat der Beaglebone die PRUs, das sind zwei eigene Kerne (kein ARM, kein Linux) auf dem Chip.

    Quadraturencoder lesen ist bei solchen Prozessoren wie dem TI Sitara aber auch als Hardware verfügbar:
    http://www.adafruit.com/blog/2014/07...eagleboardorg/

  4. #4
    HaWe
    Gast
    haha, "Da brauchst du unleserliche und unverständliche SAM3 Codes."
    und der ist auch gut: "dieses schöne 1800 seitige Datenblatt vom Prozessor ..."

    na wunderbar :-/

    rtos sieht zwar auf den ersten Blick gar nicht sooo schwierig aus -
    (edit - ok - auf den zweiten allerdings schon... )
    ich hatte mir aber auch schon überlegt, die Scheduler-Lib zu benutzen, wenn das nicht geht.

    z.B per
    void loop1() { // neue Endlosschleife //
    // Encoderstellungen auslesen //
    // dann irgendwie berechnen //
    // dann ein Yield() fürs koop. Multitasking //
    // dann vllt ein paar µs warten //
    }

    Hast du Erfahrung mit der Scheduler-Lib?

    Zeitscheibenverhalten (Echtzeit ist es sicher nicht) ist dann aber nur die eine Sache,
    aber die andere ist dann Encoder auslesen und berechnen - das muss dann ja auch wieder von Grund auf neu programmiert werden

    Fangen wir beim 1. Problem mal an:
    Was hältst du / haltet ihr von der Scheduler-Lib ?

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Na dann antworte ich mal für mich.

    Der Due ist ganz nützlich, wenn ich mal einen Controller mit vielen IOs und vielen UARTs brauche. Ansonsten halte ich vom Due und der zugehörigen Arduino Software nicht viel. Der Due ist nur eine Durchgangsstation, die echten Fans ignorieren ihn. Wer sich darauf einlässt, erkennt schnell, dass es bessere Alternativen gibt.

    Arduino ist primär 8-Bit. Ob der Arduino Zero daran etwas ändern wird, bleibt abzuwarten.

  6. #6
    HaWe
    Gast
    ja, ich brauchte ihn, weil ich
    - mindestens annähernd so viele I/Os brauche wie beim Mega für meine 6-8 Encodermotore mit pwm (5 digit. pins pro Motor)
    - multitaskingfähig
    - 2 unabhängige Hardware-i2c-Ports, beide als Slave benutzbar
    - mehr Speicher für anspruchsvollere Programme (mindestens ~100k RAM, am liebsten noch mehr)
    - und mehr Rechenpower, mindestens 10x so schnell wie die AVRs (Mega), was der Due ja kann.
    - eine einfache IDE wie Sketch war auch Vorraussetzung, Eclipse oder VS sind für mich der Horror.

    nu hab ich ihn als Hardware - und hoffte eigentlich, die Arduino-Entwickler haben auch an den Soft-Teil gedacht, um ihn auch nutzen zu können...

    aber zurück zum 1. Fragenkomplex -

    kennst du die Scheduler-Lib, und falls ja:
    - was hälst du davon
    - und denkst du, man kann extra-loops für Encoder Reading verwenden ?

Ähnliche Themen

  1. G-Code Interpreter Arduino Due, CNC-Fräse
    Von stevie3354 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 9
    Letzter Beitrag: 26.12.2014, 16:36
  2. [ERLEDIGT] I2C Problem mit dem Arduino DUE
    Von jok3r im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 2
    Letzter Beitrag: 22.03.2014, 13:21
  3. Arduino Due + Treiber + Schrittmotor PROBLEM
    Von stevie3354 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 31.01.2014, 00:11
  4. Arduino Due HSMCI - SD/SDIO/MMC
    Von Superhirn im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 0
    Letzter Beitrag: 25.01.2013, 11:57
  5. Arduino Due erschienen
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 24.10.2012, 23:20

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus