Hi,
ich habe mal ne frage zum RC gesteuertm RP6
kann mir einer mal das fertige programm als hex datei schicken??
wäre total super
Danke
Matze
Druckbare Version
Hi,
ich habe mal ne frage zum RC gesteuertm RP6
kann mir einer mal das fertige programm als hex datei schicken??
wäre total super
Danke
Matze
Hallo
Warum kompilierst du das nicht selbst? Die einfache RC-Steuerung aus dem Dominoday-Thread [Link] sieht so aus:
Die RC-Kanäle kommen an den XBUS-Stecker, links/rechts an Pin10 (SCL), vor/zurück an Pin12 (SDA). RC-Empfänger + und - an VCC und GND des RP6. Die Hex-Datei dazu ist im Anhang.Code:// RC-RP6 erster Versuch 18.11.07 mic
#include "rblib.h"
#include "rblib.c"
uint8_t y, z;
uint8_t rc_input_pwr, rc_input_dir;
uint8_t rc_pwr, rc_dir;
ISR(TIMER0_COMP_vect)
{
//static uint16_t count=0;
static uint16_t rc_temp_pwr=0;
static uint16_t rc_temp_dir=0;
//if(count>x) PORTA &= ~16; else PORTA |= 16; // E_INT1 (Pin8)
//if(count>y) PORTC &= ~1; else PORTC |= 1; // SCL (Pin10)
//if(count>z) PORTC &= ~2; else PORTC |= 2; // SDA (Pin12)
//if(count<1000)count++; else count=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; }
}
void servo_init(void)
{
//DDRA |= 16; // E_INT1 als Ausgang
//DDRC |= 3; // SCL und SDA als Ausgang
TCCR0 = (0 << WGM00) | (1 << WGM01); // CTC-Mode
TCCR0 |= (0 << COM00) | (0 << COM01); // ohne OCR-Pin
TCCR0 |= (0 << CS02) | (1 << CS01) | (0 << CS00); // prescaler /8
TIMSK = (1 << OCIE0); // Interrupt ein
OCR0 = 9; // 100kHz?
}
int main(void)
{
rblib_init();
servo_init();
setLEDs(0b1001);
setMotorDir(FWD,FWD);
setMotorPWM(0,0);
while(1)
{
rc_pwr=0;
rc_dir=0;
if (rc_input_dir<120) { rc_dir=150-rc_input_dir; setMotorDir(BWD,FWD); }
if (rc_input_dir>140) { rc_dir=rc_input_dir-110; setMotorDir(FWD,BWD); }
if (rc_input_pwr<120) { rc_pwr=150-rc_input_pwr; setMotorDir(FWD,FWD); }
if (rc_input_pwr>140) { rc_pwr=rc_input_pwr-110; setMotorDir(BWD,BWD); }
rc_pwr*=3;
if (rc_pwr)
{
if (rc_input_dir<120) setMotorPWM(rc_pwr-rc_dir,rc_pwr+rc_dir);
else if (rc_input_dir>140) setMotorPWM(rc_pwr+rc_dir,rc_pwr-rc_dir);
else setMotorPWM(rc_pwr,rc_pwr);
}
else
{
setMotorPWM(rc_dir*3, rc_dir*3);
}
}
return 0;
}
Gruß
mic
Hi,
Danke erstmal
warum ich nicht selbst kompilimiere?
ich habe mac und habe noch nicht so eine gichtige idee wie ich das machen soll....
softwaretechnisch
Hallo
Vielleicht hilft dir das weiter:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=45198
(Der Beitrag von SylD ist allerdings schon etwas älter)
Und hier ein Thread über avrgcc auf mac:
http://www.mikrocontroller.net/topic/24166
Oder du fragst mal direkt bei arexx nach:
http://www.arexx.com/forum/recent.php
Gruß
mic
ja den beitrag habe ich schon gelesen.
ich arbeite momentan mit einem virtuellen pc wo ich xp drauf habe und da verwene ich winAVR
da bekomme ich immer eine fehlermeldung
Process exit code 2
ich tüftel noch dran
Hallo
Obwohl der Mikrocontrollerthread schon etwas älter ist (sorry, hatte ich überlesen) findet man dadurch doch recht aktuelle Seiten:
http://home.arcor.de/torsten.schoeni...v/avr/avr.html
Von dort kommt man dann nach hier:
http://www.obdev.at/products/crosspack/index.html
Da ich 'nen ollen PC hab' kann ich das weder nachvollziehen noch testen, aber es scheint Möglichkeiten zu geben die AVRs auch ohne Win oder Linux zu programmieren. Zum Flashen nimmst du natürlich den RP6-Loader, oder? (Sonst würde dir das Hex oben ja auch nix nutzen ;)
Gruß
mic
Ich habe mir die seiten mal angesehen und es ist wirklich sehr interessant...
glaube aber ich habe ein anderes problem. wenn ich auf make all kicke dann kommt folgendes
> "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.
Compiling: ../../RP6Lib/RP6base/RP6RobotBaseLib.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../../RP6Lib/RP6base/RP6RobotBaseLib.lst -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6RobotBaseLib.o.d ../../RP6Lib/RP6base/RP6RobotBaseLib.c -o ../../RP6Lib/RP6base/RP6RobotBaseLib.o
In file included from ../../RP6Lib/RP6base/RP6RobotBaseLib.c:69:
../../RP6Lib/RP6base/RP6RobotBaseLib.h:386: error: conflicting types for 'statusLEDs'
../../RP6Lib/RP6base/RP6RobotBaseLib.h:72: error: previous declaration of 'statusLEDs' was here
../../RP6Lib/RP6base/RP6RobotBaseLib.c:1846: error: redefinition of 'setMotorDir'
../../RP6Lib/RP6base/RP6RobotBaseLib.c:947: error: previous definition of 'setMotorDir' was here
../../RP6Lib/RP6base/RP6RobotBaseLib.c:1851: error: redefinition of 'startADC'
../../RP6Lib/RP6base/RP6RobotBaseLib.c:287: error: previous definition of 'startADC' was here
../../RP6Lib/RP6base/RP6RobotBaseLib.c:1856: error: redefinition of 'readADC'
../../RP6Lib/RP6base/RP6RobotBaseLib.c:271: error: previous definition of 'readADC' was here
../../RP6Lib/RP6base/RP6RobotBaseLib.c:1865: error: redefinition of 'updateStatusLEDs'
../../RP6Lib/RP6base/RP6RobotBaseLib.c:128: error: previous definition of 'updateStatusLEDs' was here
../../RP6Lib/RP6base/RP6RobotBaseLib.c:1880: error: redefinition of 'setLEDs'
../../RP6Lib/RP6base/RP6RobotBaseLib.c:153: error: previous definition of 'setLEDs' was here
make.exe: *** [../../RP6Lib/RP6base/RP6RobotBaseLib.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:00
kannst du mir dabei helfen?
Thx
Oje, Makefiles und Kompilieren sind nicht so meine Stärken :-(
Das sieht so aus als wäre die Datei RP6RobotBaseLib.h zweimal eingebunden und deshalb auch die Funktionen doppelt definiert. Das dürfte eigentlich nie passieren, weil die Datei so startet:Zitat:
../../RP6Lib/RP6base/RP6RobotBaseLib.h:386: error: conflicting types for 'statusLEDs'
../../RP6Lib/RP6base/RP6RobotBaseLib.h:72: error: previous declaration of 'statusLEDs' was here
Nur wenn das Label RP6BASELIB_H nicht definiert ist (#ifndef) wird der folgende Code ausgeführt. Und der folgende Code startet mit der Definition dieses Labels...Code:#ifndef RP6BASELIB_H
#define RP6BASELIB_H
Ein eher hilfloser Versuche wäre dies in deinem Programm einzufügen:
Ich glaube aber nicht, dass es hilft. Wir müssen wohl abwarten bis dies ein Profi liest.Code:#include "RP6RobotBaseLib.h"
#define RP6BASELIB_H // zusäzliche Definition
Gruß
mic
mhm schon mal besser die fehlermeldungen werden kürzer...
soweit hat das schonmal geklapptCode:> "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.
Compiling: RP6Base_LEDs.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Base_LEDs.lst -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Base_LEDs.o.d RP6Base_LEDs.c -o RP6Base_LEDs.o
In file included from RP6Base_LEDs.c:6:
../../RP6Lib/RP6base/RP6RobotBaseLib.h:72: error: conflicting types for 'statusLEDs'
../../RP6Lib/rblib.h:35: error: previous declaration of 'statusLEDs' was here
../../RP6Lib/RP6base/RP6RobotBaseLib.h:386: error: conflicting types for 'statusLEDs'
../../RP6Lib/rblib.h:35: error: previous declaration of 'statusLEDs' was here
make.exe: *** [RP6Base_LEDs.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:00
Aha!
Die rblib soll die orginale baselib ersetzen, zusammen funktioniert es nicht!Zitat:
../../RP6Lib/RP6base/RP6RobotBaseLib.h:72: error: conflicting types for 'statusLEDs'
../../RP6Lib/rblib.h:35: error: previous declaration of 'statusLEDs' was here