-
        

Ergebnis 1 bis 2 von 2

Thema: RC-Signal einlesen verändern und wieder ausgeben.

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647

    RC-Signal einlesen verändern und wieder ausgeben.

    Anzeige

    Hi,

    ich habe einen Nano V3.0 (bzw. er ist noch unterwegs). Also mache ich mir schonmal gedanken, wie meine Software aussehen könnte.

    Ich möchte 2 RC-Empfänger Kanäle einlesen. Das habe ich mit Int0 und Int1 gelöst. Ich denke das klappt auch soweit. (Code ist ungetestet)
    Code:
    int pin = 13;
    
    long starttime_1;
    long starttime_2;
    long duration_1;
    long duration_2;
    
    long interval = 1000;
    long previousMicros = 0;
    
    void setup()
    {
      pinMode(pin, OUTPUT);
    
      //Interrupts für steigende Flanke konfigurieren
      attachInterrupt(0, ch1_r, RISING);
      attachInterrupt(1, ch2_r, RISING);
    
      //Serial starten
      Serial.begin(9600);
    
    }
    
    void loop()
    {
      unsigned long currentMicros = micros();
    
      if(currentMicros - previousMicros > interval) {
        previousMicros = currentMicros; 
    
        //Zeit und Kanal auf RS232 ausgeben
        Serial.print('CH1: ' + duration_1 + '\n');
        Serial.print('CH2: ' + duration_2 + '\n');
      }
    }
    
    void ch1_r()
    {
      detachInterrupt(0);
    
      starttime_1 = micros();
    
      attachInterrupt(0, ch1_f, FALLING);
    
    }
    
    void ch1_f()
    {
      detachInterrupt(0); 
    
      duration_1 = micros() - starttime_1;
    
      attachInterrupt(0, ch1_r, RISING);
    }
    
    void ch2_r()
    {
      detachInterrupt(1); 
    
      starttime_2 = micros();
    
      attachInterrupt(1, ch2_f, FALLING);
    }
    
    void ch2_f()
    {
      detachInterrupt(1); 
    
      duration_2 = micros() - starttime_2;
    
      attachInterrupt(1, ch2_r, RISING);
    }
    Jetzt möchte ich noch einen Sensorwert vom AD-Port einlesen etwas dran rumrechnen und dann ggf. Das RC-Signal verändern und wieder ausgeben. Später kommt wahrscheinlich noch ein I2C Sensor dazu. Wie man ein Servo prinzipiell steuert ist mir klar.

    Meine Frage ist, wie gebe ich das Servosignal möglichst sinnvoll im Bezug auf Rechenleistung aus?
    Wie macht die Mitgelieferte Servo Lib das? Blockiert die solang den Prozessor, bis sie fertig ist? So wie bspw. Delay().

    Ich würde das eigentlich mit einem Timer lösen. Aber wie macht man das beim Arduino? Ich habe schon Timer libs gefunden, aber die sagen mir nicht so recht zu. Ich möchte das lieber selbst in der Hand haben.

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647
    So ich bin jetzt deutlich schlauer als gestern. Die Servofunktion aus der Lib ist nicht das was ich will.

    Ich werde also eine eigene Funktion mit Timer1 schreiben. Das ist auch soweit alles klar, mit den Registern etc. Wenns funktioniert poste ich das natürlich noch. Aber meinen untested Code dazu will ich erstmal nicht veröffentlichen.

    Meine Frage ist jetzt eigentlich ehr eine Atmelfrage als eine Arduinofrage.
    Wenn ich INT0 UND INT1 für externe interrupts verwende, schliesst das die Nutzung von Timer1 aus? Oder haben die externen Interrupts erstmal nichts mit den Timern zutun?

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

Ähnliche Themen

  1. Externes PWM-Signal einlesen und Auswerten
    Von Caligula im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 21.08.2008, 20:27
  2. Signal-Länge erfassen und gleichzeitig verlängert ausgeben?
    Von m_herr im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 13.04.2008, 21:30
  3. Atmel128 Spannungen einlesen und Ausgeben (Display3000)
    Von Gantenbein im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 31.08.2007, 22:41
  4. Midi Signal Einlesen
    Von duese im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 24.04.2007, 01:20
  5. Servoimpulse einlesen und ausgeben
    Von moelski im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 21.08.2006, 08:24

Berechtigungen

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