PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitte HELFEN Asuro



Memo38
04.04.2006, 11:30
Hallo Leute, ich bin auch ein Anfänger und möchte gerne ein Programm auf die Asuro drauf Flashen. Wenn ich die Test-Programme von Asuro, die mit geliefert waren mit dem Notepad compiliere, geht es einwandfrei. Aber wenn ich das Programm compilieren möchte geht es nicht. Liegt es an dem makefile , oder an was anderes???? Hier das Programm:


/************************************************** *************************
*
* unsigned int data[2]; = Speicher für Liniensensor reservieren
*
* data[0] = linker Sensor, data[1] = rechter Sensor
*

*
************************************************** **************************/
#include "asuro.h"

int main(void)
{
unsigned int data[2];
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
LineData(data);
if(data[0]>data[1])
{
MotorSpeed(50,20);
}
else
{
MotorSpeed(20,50);
}


if(PollSwitch()>=1)
{
StatusLED(RED);
MotorDir(RWD,RWD);

if(PollSwitch()>=7)
{
MotorSpeed(20,50);
Msleep(1000);
MotorDir(OFF,OFF);
}
else
{
MotorSpeed(50,20);
Msleep(1000);
MotorDir(OFF,OFF);
}
}
}
return 0;
}

Arexx-Henk
04.04.2006, 12:12
Wenn mann es kompiliert da erscheint unten im ProgrammersNotepad2 die Meldung


test.c:28: warning: implicit declaration of function `Msleep'


Wenn mann da drauf Mauseklickt werd die linie

Msleep(1000);

highlighted.

'Msleep' ist keine gultige Funktion im 'asuro.c' es sollte 'Sleep' sein.

Oder nutzt Du irgeneine Bibliotheek met 'Msleep' Funktion?

Fur 'Sleep' sind nur Werte von 0 bis 255 gultig so 1000 ware etwas zu viel.


Gruss

Henk

Memo38
05.04.2006, 08:11
Also ich habe es verbessert und kompiliert, dann bekomme ich diesen Fehler:

von test.c:13:
C:/WinAVR/avr/include/avr/signal.h:36:2: Warnung: #warning "This header file is obsolete. Use <avr/interrupt.h>."

make: *** [test.o] Error 1

> Process Exit Code: 2

Arexx-Henk
05.04.2006, 08:40
von test.c:13:

Der Fehler befindet sich im Datei 'test.c' Zeile 13.

Steht dort vielleicht "include asuro.h"?

In 'asuro.h' sollte irgendwo

#include <avr/interrupt.h>

stehen

Wenn Du dein Program mal hier postet, konnte ich's testen.

Gruss

Henk

Memo38
05.04.2006, 11:12
Also das Programm ist oben, aber ich gebe mal meine asuro.h ein:

#ifndef ASURO_H
#define ASURO_H

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>

#define FALSE 0
#define TRUE 1

#define OFF 0
#define ON 1

#define GREEN 1
#define RED 2
#define YELLOW 3

/* neue Funktionen und Variablen*/
#define LEFT 0
#define RIGHT 1

/* --- Globale Variablen -----------------------------------*/
/*!
* Tastsensor Wert bei Interrupt Betrieb. 0=keine Taste, 1= Taste gedrueckt
*/
int switched;
/*!
* Odometriesensor Werte bei Interrupt Betrieb. encoder[0] links, encoder[1] = rechts. (Wertebereich 0..1023)
*/
int encoder[2];
void Go(int distance, int speed);
void Turn(int degree, int speed);
unsigned long Gettime(void);
void Msleep(int dauer);
void Encoder_Init(void);
void Encoder_Set(int setl,int setr);
void Encoder_Stop(void);
void Encoder_Start(void);
void PrintInt(int wert);
int Batterie(void);
void Init(void);
inline void StatusLED(unsigned char color);
inline void FrontLED(unsigned char status);
void BackLED(unsigned char left, unsigned char right);
inline void MotorDir(unsigned char left_dir, unsigned char right_dir);
inline void MotorSpeed(unsigned char left_speed, unsigned char right_speed);
void SerWrite(unsigned char *data,unsigned char length);
void SerRead(unsigned char *data, unsigned char length, unsigned int timeout);
void LineData(unsigned int *data);
void OdometrieData(unsigned int *data);
unsigned char PollSwitch (void);
void StartSwitch(void);
void StopSwitch(void);
void Sleep(unsigned char time36kHz);
/* ----------- END ------------ */


/* --------------- INTERNAL ------------- */
#define GREEN_LED_ON PORTB |= GREEN_LED /*!< Gruene Status LED an */
#define GREEN_LED_OFF PORTB &= ~GREEN_LED /*!< Gruene Status LED aus */
#define RED_LED_ON PORTD |= RED_LED /*!< Rote Status LED an */
#define RED_LED_OFF PORTD &= ~RED_LED /*!< Rote Status LED aus */

#define FWD (1 << PB5) /*!< Motor vorwaerts */
#define RWD (1 << PB4) /*!< Motor rueckwaerts */
#define BREAK 0x00 /*!< Motor bremsen */
#define FREE (1 << PB4) | (1 << PB5) /*!< Motor freilaufend */

#define IRTX (1 << PB3) /*!< PB3 Port fuer Infrarot Transmitter LED */
#define GREEN_LED (1 << PB0) /*!< PB0 Port fuer Gruene Status LED */
#define RED_LED (1 << PD2) /*!< PD2 Port fuer Rote Status LED */

#define PWM (1 << PB1) | (1 << PB2) /*!< PB1, PB2 Ports fuer Pulsweitenmodulation der Motor Geschwindigkeit */
#define RIGHT_DIR (1 << PB4) | (1 << PB5) /*!< PB4, PB5 Ports fuer Drehrichtung rechter Motor */
#define LEFT_DIR (1 << PD4) | (1 << PD5) /*!< PD4, PD5 Ports fuer Drehrichtung linker Motor */

#define SWITCHES (1 << PD3) /* PD3 Port fuer Tastsensor */
#define SWITCH_ON PORTD |= SWITCHES /* Tastsensor an */
#define SWITCH_OFF PORTD &= ~SWITCHES /* Tastsensor aus */

#define BATTERIE (1 << MUX0) | (1 << MUX2) /*!< ADC5 A/D Wandler Port fuer Batterie Abfrage */
#define SWITCH (1 << MUX2) /*!< ADC4 A/D Wandler Port fuer Tastsensor */
#define IR_LEFT (1 << MUX0) | (1 << MUX1) /*!< ADC3 A/D Wandler Port fuer Linienfolger Fototransistor links */
#define IR_RIGHT (1 << MUX1) /*!< ADC2 A/D Wandler Port fuer Linienfolger Fototransistor rechts */
#define FRONT_LED (1 << PD6) /*!< PD6 Port fuer Front LED */

#define ODOMETRIE_LED (1 << PD7) /*!< PD7 Port fuer Odometrie LED */
#define ODOMETRIE_LED_ON PORTD |= ODOMETRIE_LED /*!< Odometrie LED an */
#define ODOMETRIE_LED_OFF PORTD &= ~ODOMETRIE_LED /*!< Odometrie LED aus */

#define WHEEL_LEFT (1 << MUX0) /*!< ADC1 A/D Wandler Port fuer Odometrie Sensor links*/
#define WHEEL_RIGHT 0 /*!< ADC0 A/D Wandler Port fuer Odometrie Sensor rechts */

#endif /* ASURO_H */

Andun
05.04.2006, 13:47
Also, damit man das besser lesen kann: Stell Quelltext bitte immer in die [ code ] [/ code ] Tags. Danke.

Also die Msleep funktion die gibts erst in der erweiterten Version der Asuro Lib. Benutz mal die Suchfunktion hier, oder geh auf Sourceforge und such da nach Asuro, dann findest du die Lib da.

Andun

Arexx-Henk
05.04.2006, 18:41
C:/WinAVR/avr/include/avr/signal.h:36:2: Warnung: #warning "This header file is obsolete. Use <avr/interrupt.h>."


In meine Datei 'C:/WinAVR/avr/include/avr/signal.h' befindet sich nicht so eine Warnung.

Guck mal in deine Datei.

Vielleicht hast Du die neuesten WinAvr installiert? (Die Asuro komt mit eine altere version)

Gruss

Henk

Memo38
09.04.2006, 11:29
Hmm okay, dann werde ich mal das AVR nehmen, das bei Asuro dabei war auf der CD. Bloß, hat es bei dir funktioniert??? Geht es oder nicht ???

Arexx-Henk
09.04.2006, 12:28
Bei mir compiliert deine asuro.h ohne fehler.

Gruss

Henk

Memo38
09.04.2006, 14:15
Und das Programm läuft auch ohne probleme???

Arexx-Henk
09.04.2006, 20:20
In Prinzip sollte es laufen.

- die Asuro fahrt erst ab MotorSpeed von zirca 70.
Besser wahre es wenn nicht von MotorSpeed() sondern von MotorPower() die Rede war. Denn mit MotorSpeed definiert mann die Energie die den Motoren zugefugt wird. Es hangt stark vom Motor, Getriebe und Rad reibung ab wie schnell gefahren wird.
- Mit dem Differenzwert zwischen beide Motoren muss ein bischen experiementiert werden denn die hangt ab vom Geschwindigkeit
- Am besten nutzt mann eine Linie von 1 cm Breite.
- Speed 140 / 80 sollte ganz net funktionieren.

Gruss

Henk