- Akku Tests und Balkonkraftwerk Speicher         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 32

Thema: RC-gesteuerter RP6

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2009
    Ort
    Erde
    Alter
    30
    Beiträge
    15
    Anzeige

    E-Bike
    Ja,

    jetzt lässt es sich fast kompilimieren aber jetzt habe ich die fehlermeldung

    Code:
    > "make.exe" all
    
    -------- begin --------
    avr-gcc (WinAVR 20081124rc3) 4.3.2
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    make.exe: *** No rule to make target `program_01.elf', needed by `elf'.  Stop.
    
    > Process Exit Code: 2
    > Time Taken: 00:00
    und wie bekomme ich das problem gelöst?


    grüße
    Matze

  2. #22
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Wie oben schon geschrieben kenne ich mich mit den Kompilereinstellungen und den Makefiles überhaupt nicht aus (das erledigt mein KamAVR für mich).

    Ich würde deshalb einfach mal folgendes versuchen:
    http://tinyurl.com/ybmfk8j

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #23
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Hi,
    Was bewirkt eigentlich das test_program von radbruch?
    Ich habe keinen Empfänger angeschlossen und das Program aus Neugierde ausprobiert.
    Das Resultat:
    Die rechte Kette des RP6´dreht sich stetig vorwärts.
    Warum?
    Danke für jegliche Aufklärung der Frage!
    Nichts existiert durch sich allein!
    Bild hier  

  4. #24
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Auch hier geht es um das RC-Programm aus dem Dominoday-Thread. Ohne angeschlossenen RC-Empfänger macht der RP6 was er will, weil ich die Initialisierung der Inputwerte vergessen habe:

    uint8_t rc_input_pwr, rc_input_dir;

    Da mein Empfänger mit diesem Programm Werte zwischen 110 und 150 liefert, ist die Nullstellung (Mitte) bei ca. 130. Deshalb sollte die Initalisierung besser so aussehen:

    uint8_t rc_input_pwr=130, rc_input_dir=130;

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #25
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Ok,
    Das heißt dann also, dass RP6 die zugehörige Bedingung (um sich nach links drehen zu dürfen) als erfüllst ansieht und sich somit nch links dreht.
    Nun zu einem anderem Problem: Das Kompilieren!!!
    Ich habe zwar deine rblib.c ins Makefile einetragen (unter SRC (sieh Code)).
    Außerdem habe ich den Pfad von der rblib statt der RP6RobotBaseLib verwendet(siehe Code).
    Trotzdem erscheint folgende Fehlermeldung:
    make: *** No rule to make target `RC_RP6.elf', needed by `elf'. Stop.

    > Process Exit Code: 2
    > Time Taken: 00:00
    Warum?
    Ich habe den Ordner wie die Datei benannt und eine Make all und eine Make Clean Datei zusammen mit dem Makefile und deinem ungeänderten C-Code in den Ordner gepackt.
    Code:
    TARGET = RC_RP6
    
    ###############################################################################
    
    
    
    ###############################################################################
    # Specify relative path to RP6 library files here.
    # This is "../../RP6lib" or "../RP6lib" usually.
    
    RP6_LIB_PATH=F:/RP6/RP6lib/rblib
    RP6_LIB_PATH_OTHERS=F:/RP6/RP6lib/RP6base F:/RP6/RP6lib/RP6common
    
    ###############################################################################
    
    
    #------------------------------------------------
    # Main Source file is _automatically_ added here:
    SRC = $(TARGET).c
    # DO NOT EDIT THIS!
    
    
    ###############################################################################
    # If there is more than one source file, append them here separated by spaces.
    # Usually you have to add the Library files here! (ONLY add c files "*.c" here,
    # NO header files "*.h"!)
    # Don't forget to add relative paths!
    
    SRC += $(RP6_LIB_PATH)/RP6base/RP6RobotBaseLib.c
    SRC += $(RP6_LIB_PATH)/RP6common/RP6uart.c
    #SRC += $(RP6_LIB_PATH)/RP6common/RP6I2CslaveTWI.c
    #SRC += $(RP6_LIB_PATH)/RP6common/RP6I2CmasterTWI.c
    SRC += $(RP6_LIB_PATH)/rblib.c
    Wäre wirklich nett, wenn mir jemand weiterhelfen kann. Danke!!
    Nichts existiert durch sich allein!
    Bild hier  

  6. #26
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Da die beiden Variablen nicht initialisert waren, kann man nichts über deren Inhalt sagen. Aber wie du richtig erkannt hast scheint dein RP6 die "gefundenen" Werte als Befehl zum Drehen zu erkennen.

    Mit den Makefiles kenne ich mich (immer noch) nicht aus. Aber es funktioniert sicher nicht, wenn du auch die orginale Lib zusammen mit der rblib einbindest. Deshalb müssen die ersten zwei Zeilen auch auskommentiert werden:

    #SRC += $(RP6_LIB_PATH)/RP6base/RP6RobotBaseLib.c
    #SRC += $(RP6_LIB_PATH)/RP6common/RP6uart.c
    #SRC += $(RP6_LIB_PATH)/RP6common/RP6I2CslaveTWI.c
    #SRC += $(RP6_LIB_PATH)/RP6common/RP6I2CmasterTWI.c
    SRC += $(RP6_LIB_PATH)/rblib.c
    Wenn rblib.c so eingebunden wird, muss man das include im Programm entfernen:

    #include "rblib.h"
    //#include "rblib.c"

    Aber das ändert vermutlich nichts an deiner "No Rules to make..."-Fehlermeldung. Soweit ich weiß bedeutet das, dass der Quellcode des Programms nicht gefunden wird. Ursachen sind z.B. falsche Pfade, Leer- oder Sonderzeichen in den Pfad- oder Dateinamen, falsche Dateinamen, bei Linux vermutlich auch falsche Groß-/kleinschreibung...

    Gruß

    mic

    [Edit]
    Die rblib-Geschichte ist ja eigentlich auch eine "Jugendsünde" von mir. Inzwischen kann ich eine Variante der Servoansteuerung anbieten die sich mit der RP6-Library verträgt:
    https://www.roboternetz.de/phpBB2/vi...=483757#483757

    Allerdings ist dabei die Auflösung der Servoschritte nicht so hoch, deshalb muss man die Umrechnung der gemessenen RC-Signale in Motorparameter anpassen:
    Code:
     // RC-Signale an SCL und SDA messen                                   23.3.2010 mic
    
    // Timersetup der Lib: Mode 10, Phase Correct
    // Mit ICR1 als Top ergibt bei ICR1=210 ca. 8MHz/420=19047,6Hz ;)
    
    // Drehbereich meiner RS-2-Servos ist von ca. 14 bis ca. 38
    
    // Aus: https://www.roboternetz.de/phpBB2/vi...=492812#492812
    
    #include "RP6RobotBaseLib.h"
    
    volatile uint8_t rc_input_pwr=26, rc_input_dir=26;
    
    int main(void)
    {
       initRobotBase();
       TIMSK |= (1 << TOIE1);       	// Die Timer1 Overflow-ISR zur Servoansteuerung
       setLEDs(1);                	// und los!
    
    	writeString_P("\n\nRC-Empfänger an SCL  und SDA auswerten.\n");
    	writeString_P("mic 23.3.2010\n\n");
       while(1)
       {
          writeString_P("SCL (PC0): ");
          writeInteger(rc_input_dir, 10);
          writeString_P("\nSDA (PC1): ");
          writeInteger(rc_input_pwr, 10);
          writeString_P("\n\n");
          mSleep(300);
       }
       return 0;
    }
    ISR (TIMER1_OVF_vect) // RC-Signale an SCL und SDA messen
    {
       static uint16_t rc_temp_pwr=0;
       static uint16_t rc_temp_dir=0;
       if (PINC & 1) rc_temp_dir++; else
          if (rc_temp_dir) { rc_input_dir=rc_temp_dir-1; rc_temp_dir=0; }
       if (PINC & 2) rc_temp_pwr++; else
          if (rc_temp_pwr) { rc_input_pwr=rc_temp_pwr-1; rc_temp_pwr=0; }
    }
    (Nicht getestet, weil mein RC-Empfänger zur Zeit eingemottet ist)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #27
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Danke für deine Antwort!
    Das Problem lässt sich leider nicht aus dem weg schaffen. Könntest du bitte mal den Ordner oder ein Zip File zum Download stellen wo deine ganzen Daten zum kompilieren dieses einzigen Programmes drauf sind? Das wäre echt super, weil ich wirklich keine Ahnung habe wie ich das Problem lösen soll. Alle anderen Programme zu kompilieren klappt ja aber ich vermute, dass ist wegen dieser anderen LIB.
    Vilen Dank!!!!!!
    Nichts existiert durch sich allein!
    Bild hier  

  8. #28
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Hast du vielleicht einen Vorschlag, wie man mit der standart RP6lib ein Programm zum fernsteuern des RP6´schreiben könnte? Es soll nur 2 Kanäle auswerten können und mit jedem Kanal einen Motor ansteuern.
    Braucht man dafür überhaupt eine ISR?
    Nichts existiert durch sich allein!
    Bild hier  

  9. #29
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Nochmals Hallo

    Das geht selbstverständlich auch ohne ISR. Aber dann ist es blockierend und wirft das gesammte Tasksystem des RP6 über den Haufen.

    Oben im Edit habe ich eine Variante mit orginaler RP6-Lib und Timer1-ISR zur Impulsmessung angehängt. Die gemessenen Werte werden ans Terminal gesendet und sollten ungefähr zwischen 14 und 38 liegen. Wenn das so funktioniert (ich habe die Messung mit Brücken an den Pins simuliert) hast du schon eine brauchbare Basis für eine RC-Fernsteuerung. Was noch fehlt ist die Umrechnug der gemessenen Werte in passende Motorbefehle.

    Hier noch eine Variante ohne ISR, ohne RC-Empfänger kann ich aber zu den gemessenen Werten nichts sagen. Möglicherweise tritt ein Überlauf der Variable auf, dann müßte man nach dem Hochzählen noch eine kurze Verzögerung (eine for-Schleife) einfügen:

    Code:
    // Blockierende Impulsmessung an SCL (PC0)                           23.3.2010 mic
    
    #include "RP6RobotBaseLib.h"
    
    uint16_t temp;
    
    int main(void)
    {
       initRobotBase();
       setLEDs(1);                	// und los!
    
       while(1)
       {
          temp=0;
    		while(PINC & 1); 				// Warten bis kein Impuls ansteht
    		while(!(PINC & 1)); 			// Warten auf Start des zu messenden Impulses
    		while(PINC & 1) temp++;    // solange der Impuls ansteht Zähler hochzählen
    		
    		
          writeInteger(temp, 10);
          writeString_P("\n");
          mSleep(300);
       }
       return 0;
    }
    Gruß

    mic

    [Edit]
    Wertebereich der blockierenden Messung ist ca. 500 bis 3000:
    Code:
     // RP6 misst blockierend seine eigenen Servoimpulse an SCL ;)        23.3.2010 mic
    
    #include "RP6RobotBaseLib.h"
    
    volatile uint8_t servo;    // Servopositionen und Impulszähler
    uint16_t temp;
    
    int main(void)
    {
       initRobotBase();
       servo=26;   					// Servomitte?
       TIMSK |= (1 << TOIE1);     // Die Timer1 Overflow-ISR zur Servoansteuerung
       DDRA |= (E_INT1);          // Servopins auf Ausgang setzen
       DDRC |= (SCL | SDA);
       setLEDs(1);                // und los!
       startStopwatch1();
       startStopwatch2();
       while(1)
       {
    		if(getStopwatch1()>300)       // alle 0,3 Sekunden Impuls messen
          {
             setStopwatch1(0);
    		   temp=0;
          	while(PINC & 1);           // Warten bis kein Impuls ansteht
          	while(!(PINC & 1));        // Warten auf Start des zu messenden Impulses
          	while(PINC & 1) temp++;    // solange der Impuls ansteht Zähler hochzählen
          	writeInteger(temp, 10);
          	writeString_P("\n");
    		}
    
    		if(getStopwatch2()>1500)      // alle 1,5 Sekunden eine neue Servoosition
          {
             setStopwatch2(0);
             switch(servo)
             {
                case 26: servo=45; break;
                case 45: servo=25; break;
                case 25: servo=10; break;
                case 10: servo=26; break;
             }
    		}
       }
       return 0;
    }
    ISR (TIMER1_OVF_vect)
    {
       static uint16_t servocount=1;
       if(servocount > servo) PORTC &= ~SCL; else PORTC |= SCL; // PC0 XBUS 10
       if(servocount < 400) servocount++; else servocount=1;
    }
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #30
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.03.2010
    Beiträge
    205
    Hi,
    Ich habe drei Fragen:
    1.
    Warum schreibst du in den WriteInteger Befehl noch eine "10" nach dem Komma? (Ich beziehe mich auf folgendes Programm)
    Code:
    // RC-Signale an SCL und SDA messen                                   23.3.2010 mic 
    
    // Timersetup der Lib: Mode 10, Phase Correct 
    // Mit ICR1 als Top ergibt bei ICR1=210 ca. 8MHz/420=19047,6Hz ;) 
    
    // Drehbereich meiner RS-2-Servos ist von ca. 14 bis ca. 38 
    
    // Aus: https://www.roboternetz.de/phpBB2/ze...=492812#492812 
    
    #include "RP6RobotBaseLib.h" 
    
    volatile uint8_t rc_input_pwr=26, rc_input_dir=26; 
    
    int main(void) 
    { 
       initRobotBase(); 
       TIMSK |= (1 << TOIE1);          // Die Timer1 Overflow-ISR zur Servoansteuerung 
       setLEDs(1);                   // und los! 
    
       writeString_P("\n\nRC-Empfänger an SCL  und SDA auswerten.\n"); 
       writeString_P("mic 23.3.2010\n\n"); 
       while(1) 
       { 
          writeString_P("SCL (PC0): "); 
          writeInteger(rc_input_dir, 10); 
          writeString_P("\nSDA (PC1): "); 
          writeInteger(rc_input_pwr, 10); 
          writeString_P("\n\n"); 
          mSleep(300); 
       } 
       return 0; 
    } 
    ISR (TIMER1_OVF_vect) // RC-Signale an SCL und SDA messen 
    { 
       static uint16_t rc_temp_pwr=0; 
       static uint16_t rc_temp_dir=0; 
       if (PINC & 1) rc_temp_dir++; else 
          if (rc_temp_dir) { rc_input_dir=rc_temp_dir-1; rc_temp_dir=0; } 
       if (PINC & 2) rc_temp_pwr++; else 
          if (rc_temp_pwr) { rc_input_pwr=rc_temp_pwr-1; rc_temp_pwr=0; } 
    }
    Und 2.
    Würde dieser Code vom Prinzip her funktionieren oder fehlt noch was, außer den Werten die ich noch nicht kenne?
    Code:
    #include "RP6RobotBaseLib.h" 
    
    volatile uint8_t rc_input_pwrr=26, rc_input_pwrl=26; 
    
    int main(void) 
    { 
       initRobotBase(); 
       TIMSK |= (1 << TOIE1);          // Die Timer1 Overflow-ISR zur Servoansteuerung 
       
       while(1) 
       { 
        // if (rc_input_pwrl<x && rc_input_pwrl>y) {changeDirection(BWD); moveAtSpeed(60,0)}
    	// if (rc_input_pwrl<x && rc_input_pwrl>y) {changeDirection(FWD); moveAtSpeed(60,0)}
    	// if (rc_input_pwrr<x && rc_input_pwrr>y) {changeDirection(BWD); moveAtSpeed(0,60)}
    	// if (rc_input_pwrr<x && rc_input_pwrr>y) {changeDirection(FWD); moveAtSpeed(0,60)}
        // task_motionControl();
       } 
       return 0; 
    } 
    ISR (TIMER1_OVF_vect) // RC-Signale an SCL und SDA messen 
    { 
       static uint16_t rc_temp_pwrl=0; 
       static uint16_t rc_temp_pwrr=0; 
       if (PINC & 1) rc_temp_pwrl++; else 
          if (rc_temp_pwrl) { rc_input_pwrl=rc_temp_pwrl-1; rc_temp_pwrl=0; } 
       if (PINC & 2) rc_temp_pwrr++; else 
          if (rc_temp_pwrr) { rc_input_pwrr=rc_temp_pwrr-1; rc_temp_pwrr=0; } 
    }
    und 3.
    Hat jetzt zwar nicht sehr viel mit dem Thema zu tun aber ist ja schnell beantwortet. Kann man das RP6 C-Control PRO M128
    Erweiterungsmodul so wie man es bei Conrad bekommt direkt benutzen ohne diesen extra Baustein (C-CONTROL PRO UNIT MEGA 12?? Mit benutzen meine ich Programmieren und in Verbindung mit dem RP6 laufen lassen.???
    )
    Danke!
    Nichts existiert durch sich allein!
    Bild hier  

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

12V Akku bauen