Genau darüber hatten wir vor ein paar Tagen gesprochen. *lol*Code:{cli(); PORTC |= SERVO_OUT; //SDA high sleep(10); PORTC &= ~SERVO_OUT; sleep(200-10); sei();}
hat sich erledigt... hab meinen fehler gefunden... die cli(); und sei(); anweisungen müssen raus... jetzt funktionierts einwandfrei...
Genau darüber hatten wir vor ein paar Tagen gesprochen. *lol*Code:{cli(); PORTC |= SERVO_OUT; //SDA high sleep(10); PORTC &= ~SERVO_OUT; sleep(200-10); sei();}
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
ja stimmt schon.... aber was bedeutet eigentlich cli(); und sei();?
gruß
http://www.mikrocontroller.net/artic...r_.28WinAVR.29was bedeutet eigentlich cli(); und sei();?
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
danke... aber die frage hast du mir immer noch nicht beantwortet....Zitat von proevofreak
gruß
Hallo
Wenn du Dirks Version vom 6.5. meinst (Link):aber die frage hast du mir immer noch nicht beantwortet
Nur wenn das richtige IR-Zeichen eingelesen und erkannt wurde, wird ein einziger Impuls gesendet, ansonsten ist Impulspause. Anders ist es hier:Code:if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) {setLEDs(1); sleep(10); setLEDs(0); sleep(200-10);}
Es wird zwei Sekunden lang das zur gewünschten Position gehörende Impuls/Pause-Signal gesendet. Das Servo hat reichlich Zeit die neue Position zu erreichen. Das war nun hoffentlich die erwartete Anwort:)Code:while(getStopwatch1()<2000) { setLEDs(1); sleep(10); setLEDs(0); sleep(200-10);}
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!
ja das hab ich gemeint. kann man dann den 2. code von dir jetzt so umschreiben, dass man den servo mit ir steuern kann? im 2. code von dir is des ganze bisher ja zeitgesteuert....
gruß
Hi proevofreak,
ich wollte zu
unbedingt was sagen:kann man dann den 2. code von dir jetzt so umschreiben, dass man den servo mit ir steuern kann?
WARUM SOLLTE ES NICHT GEHEN BZW. WARUM NIMMST DU NICHT DEN 2. CODE HER???
das ist doch exakt das gleiche.....
MfG Pr0gm4n
@Pr0gm4n:
hab ich schon ausprobiert den 2. code zu nehmen und auf ir steuerung abzuändern. ergibt dann folgendes programm:
dieses programm bringt aber beim kompilieren folgende fehlermeldung:Code:// RP6 steuert ein Servo an der SL1-LED mit Sleep() #include "RP6RobotBaseLib.h" // Denn vollen Funktionsumfang der Lib bezahlen // wir mit den störenden Interrupts #define RC_PROMO8 #ifdef RC_PROMO8 #define RC5_KEY_SERVO_RIGHT 46 #define RC5_KEY_SERVO_LEFT 60 #endif uint8_t stellzeit, servopos=10; void receiveRC5Data(RC5data_t rc5data) { writeString_P("Toggle Bit:"); writeChar(rc5data.toggle_bit + '0'); writeString_P(" | Device Address:"); writeInteger(rc5data.device, DEC); writeString_P(" | Key Code:"); writeInteger(rc5data.key_code, DEC); writeChar('\n'); } int main(void) { initRobotBase(); setLEDs(0); IRCOMM_setRC5DataReadyHandler(receiveRC5Data); powerON(); while(true) { while(rc5data.key_code == RC5_KEY_SERVO_RIGHT) { setLEDs(1); sleep(10); setLEDs(0); sleep(200-10);} while(getStopwatch1()>2000) {setLEDs(1); sleep(20); setLEDs(0); sleep(200-20); } task_RP6System(); } return(0); }
grußCode:Compiling: ServoLinksRechts.c avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=ServoLinksRechts.lst -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/ServoLinksRechts.o.d ServoLinksRechts.c -o ServoLinksRechts.o ServoLinksRechts.c: In function 'main': ServoLinksRechts.c:34: error: 'rc5data' undeclared (first use in this function) ServoLinksRechts.c:34: error: (Each undeclared identifier is reported only once ServoLinksRechts.c:34: error: for each function it appears in.) ServoLinksRechts.c:50:2: warning: no newline at end of file make: *** [ServoLinksRechts.o] Error 1 > Process Exit Code: 2 > Time Taken: 00:02
Hi,
der 2. Code ist schon auf IR-Steuerung...
du musst nichts abändern, das ist schon fertig gewesen, also mein Vorschlag da...
nimm einfach mal den von mir oben geposteten Code
genau den, den hab ich auch oben schon gepostet, das meinte ich mit 2. CodeCode:// RP6 steuert ein Servo an der SL1-LED mit Sleep() #include "RP6RobotBaseLib.h" // Denn vollen Funktionsumfang der Lib bezahlen #define RC_PROMO8 #ifdef RC_PROMO8 #define RC5_KEY_SERVO_RIGHT 46 #define RC5_KEY_SERVO_LEFT 60 #endif void receiveRC5Data(RC5data_t rc5data) { writeString_P("Toggle Bit:"); writeChar(rc5data.toggle_bit + '0'); writeString_P(" | Device Address:"); writeInteger(rc5data.device, DEC); writeString_P(" | Key Code:"); writeInteger(rc5data.key_code, DEC); writeChar('\n'); servoTaskRight(); servoTaskLeft();} void servoTaskRight(RC5data_t rc5data) { if (rc5data.key_code == RC5_KEY_SERVO_RIGHT) {setLEDs(1); sleep(10); setLEDs(0); sleep(200-10);} } void servoTaskLeft(RC5data_t rc5data) { if (rc5data.key_code == RC5_KEY_SERVO_LEFT) {setLEDs(1); sleep(20); setLEDs(0); sleep(200-20);} } int main(void) { initRobotBase(); IRCOMM_setRC5DataReadyHandler(receiveRC5Data); powerON(); setLEDs(0); while(true) { task_RP6System(); } return 0; }
es fehlt nur noch, dass du den Servos Zeit gibst, um sich neu zu stellen, ist aber ganz einfach mit while-Schleife zu lösen:
dann müsste alles passen...Code:void servoTaskRight(...){ if(...){ while(stellzeit){ stellzeit--; ... } } }
MfG Pr0gm4n
Lesezeichen