PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : töne hören



asuro11
22.05.2009, 18:10
hallo, bin gerade bei einem projekt um mit dem asuro "töne zu hören" und auszuwerten. und zwar soll eine zusatzplatine den ton aufnehmen und über 6 bandpassfilter verwerten. Über LEDs soll angezeigt werden welcher bandpassfilter aktiv ist. Dann soll über eine IR Diode ein befehl gesendet werden. und zwar fall 1, fall 2, fall 3, fall 4.
fall 1 soll sein wenn bandpass 2 aktiv ist...und fall 4 soll sein wenn bandpass 5 aktiv ist. leider habe ich hier sehr viele errors und weiß nicht warum. vielleicht kann mir jemand helfen.komm nämlich gar nicht weiter.


#include "myasuro.h"
#include "asuro.h"
#include "inttypes.h"

/* Teil 1. Bandpassfilter*/

void bpfilter(int_8 *input,int8_t *output, uint16_t *length, int32_t koeff)

int32_t a2; /* a2 als Integervariable festlegen*/
int32_t a3; /* a3 als Integervariable festlegen*/
int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/
int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/
int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/
uint16_t n; /* n Integervariable festlegen*/
uint16_t i; /* i als Integervariable festlegen*/

x1=0; /* Wert für x1 festlegen*/
x2=0; /* Wert für x2 festlegen*/
y0=0; /* Wert für y0 festlegen*/
y1=0; /* Wert für y1 festlegen*/
y2=0; /* Wert für y2 festlegen*/
x0=1; /* Wert für x0 festlegen*/
length=100; /* Wert für length festlegen*/

for i=1;i<7;i++; /* Schleife zählt bis 6 hoch, um die Werte mit jedem Bandpass zu filtern*/
{
if i=1; /* Schleife 1 mit den Werten für Bandpass 1*/
{
a2=2
a3=3
GAIN_FRAC=4
}
if i=2; /* Schleife 2 mit den Werten fü Bandpass 2*/
{
a2=1
a3=2
GAIN_FRAC=3
}
if i=3; /* Schleife 3 mit den Werten für Bandpass 3*/
{
a2=3
a3=2
GAIN_FRAC=1
}
if i=4; /* Schleife 4 mit den Werten für Bandpass 4*/
{
a2=4
a3=2
GAIN_FRAC=3
}
if i=5; /* Schleife 5 mit den Werten für Bandpass 5*/
{
a2=1
a3=1
GAIN_FRAC=1
}
if i=6; /* Schleife 6 mit den Werten für Bandpass 6*/
{
a2=2
a3=4
GAIN_FRAC=3
}

for n=0;n<length;n++; /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/
}

printf(output[n]); /* Ergebnis soll am Bildschirm angeszeigt werden*/
}


/* Teil 2. LEDs ANSTEUERN und Befehl erstellen*/

/* Teil 3. Versenden des Befehls über IR-DIODE*/


habe aber ganze 17 errors drinne:

../ZUSATZ155.c:3:1: warning: "/*" within comment
../ZUSATZ155.c:4:1: warning: "/*" within comment
../ZUSATZ155.c:5:1: warning: "/*" within comment
../ZUSATZ155.c:6:1: warning: "/*" within comment
../ZUSATZ155.c:14: error: expected ')' before '*' token
../ZUSATZ155.c:20: warning: built-in function 'y0' declared as non-function
../ZUSATZ155.c:20: warning: built-in function 'y1' declared as non-function
../ZUSATZ155.c:24: warning: data definition has no type or storage class
../ZUSATZ155.c:24: warning: type defaults to 'int' in declaration of 'x1'
../ZUSATZ155.c:24: error: conflicting types for 'x1'
../ZUSATZ155.c:19: error: previous declaration of 'x1' was here
../ZUSATZ155.c:25: warning: data definition has no type or storage class
../ZUSATZ155.c:25: warning: type defaults to 'int' in declaration of 'x2'
../ZUSATZ155.c:25: error: conflicting types for 'x2'
../ZUSATZ155.c:19: error: previous declaration of 'x2' was here
../ZUSATZ155.c:26: warning: data definition has no type or storage class
../ZUSATZ155.c:26: warning: type defaults to 'int' in declaration of 'y0'
../ZUSATZ155.c:26: error: conflicting types for 'y0'
../ZUSATZ155.c:20: error: previous declaration of 'y0' was here
../ZUSATZ155.c:27: warning: data definition has no type or storage class
../ZUSATZ155.c:27: warning: type defaults to 'int' in declaration of 'y1'
../ZUSATZ155.c:27: error: conflicting types for 'y1'
../ZUSATZ155.c:20: error: previous declaration of 'y1' was here
../ZUSATZ155.c:28: warning: data definition has no type or storage class
../ZUSATZ155.c:28: warning: type defaults to 'int' in declaration of 'y2'
../ZUSATZ155.c:28: error: conflicting types for 'y2'
../ZUSATZ155.c:20: error: previous declaration of 'y2' was here
../ZUSATZ155.c:29: warning: data definition has no type or storage class
../ZUSATZ155.c:29: warning: type defaults to 'int' in declaration of 'x0'
../ZUSATZ155.c:29: error: conflicting types for 'x0'
../ZUSATZ155.c:19: error: previous declaration of 'x0' was here
../ZUSATZ155.c:30: warning: data definition has no type or storage class
../ZUSATZ155.c:30: warning: type defaults to 'int' in declaration of 'length'
../ZUSATZ155.c:32: error: expected identifier or '(' before 'for'
../ZUSATZ155.c:32: error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
../ZUSATZ155.c:32: error: expected '=', ',', ';', 'asm' or '__attribute__' before '++' token
../ZUSATZ155.c:33: error: expected identifier or '(' before '{' token



das 2. programm soll dann das auf dem asuro sein. um jedem fall seine aufgabe zuzuteilen.könnte das so klappen??


#include <inttypes.h>
#include "asuro.h"

#define aus MotorDir(BREAK,BREAK)
uint8_t chgetchar()

void main()
{

while(1)
{

command = chgetchar();

switch(command)
{
fall '1':
{
MotorDir(FWD,FWD);
MotorSpeed(50,50);
Msleep(70);

}
break;
fall '2':
{
MotorDir(RWD,RWD);
MotorSpeed(50,50);
Msleep(70);

}
break;
fall '3':
{
MotorDir(FWD,FWD);
MotorSpeed(50,0);
Msleep(70);

}
break;
fall '4':
{
MotorDir(FWD,FWD);
MotorSpeed(0,50);
Msleep(70);

}
break;
default:
{
}break;
}
}

}



und um überhaupt meine zusatzplatine zu prüfen möchte ich ein programm schreiben, dass die 8 LEDS leuchten wenn irgendein signal kommt. aber hier weiß ich nicht ganz wie ich es machen soll... auch mit einem bandpass??

[/code]

uwegw
22.05.2009, 18:36
Erstmal solltest du noch Klammern um den Rumpf der Funktion setzen, das halbiert schon mal die Anzahl der Fehler...

Dann solltest du dich noch mal über die korrekte Syntax von for-Schleifen und if-Abfragen und den Unterschied zwischen = und == schlaumachen.

Die ersten vier Warnungen scheinen aus einer der Header-Dateien zu stammen.

asuro11
24.05.2009, 15:37
so habe jetzt mal was geändert.



#include "myasuro.h"
#include "asuro.h"
#include "inttypes.h"

/* Teil 1. Bandpassfilter*/


{
void bpfilter(int_8 *input,int8_t *output, uint16_t *length, int32_t koeff)

int32_t a2; /* a2 als Integervariable festlegen*/
int32_t a3; /* a3 als Integervariable festlegen*/
int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/
int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/
int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/
uint16_t n; /* n Integervariable festlegen*/
uint16_t i; /* i als Integervariable festlegen*/
uint16_t length; /* length als Integervariable festlegen*/

x1=0; /* Wert für x1 festlegen*/
x2=0; /* Wert für x2 festlegen*/
y0=0; /* Wert für y0 festlegen*/
y1=0; /* Wert für y1 festlegen*/
y2=0; /* Wert für y2 festlegen*/
x0=1; /* Wert für x0 festlegen*/
length=100; /* Wert für length festlegen*/

for (i=1;i<7;i++) /* Schleife zählt bis 6 hoch, um die Werte mit jedem Bandpass zu filtern*/
{
if (i=1) /* Schleife 1 mit den Werten für Bandpass 1*/
{
a2=2;
a3=3;
GAIN_FRAC=4;
}
if (i=2) /* Schleife 2 mit den Werten fü Bandpass 2*/
{
a2=1;
a3=2;
GAIN_FRAC=3;
}
if (i=3) /* Schleife 3 mit den Werten für Bandpass 3*/
{
a2=3;
a3=2;
GAIN_FRAC=1;
}
if (i=4) /* Schleife 4 mit den Werten für Bandpass 4*/
{
a2=4;
a3=2;
GAIN_FRAC=3;
}
if (i=5) /* Schleife 5 mit den Werten für Bandpass 5*/
{
a2=1;
a3=1;
GAIN_FRAC=1;
}
if (i=6) /* Schleife 6 mit den Werten für Bandpass 6*/
{
a2=2;
a3=4´;
GAIN_FRAC=3;
}

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/
}

printf(output[n]); /* Ergebnis soll am Bildschirm angeszeigt werden*/
}


/* Teil 2. LEDs ANSTEUERN und Befehl erstellen*/

/* Teil 3. Versenden des Befehls über IR-DIODE*/
}


habe leider noch 2 errors:


../ZUSATZ155.c:3:1: warning: "/*" within comment
../ZUSATZ155.c:4:1: warning: "/*" within comment
../ZUSATZ155.c:5:1: warning: "/*" within comment
../ZUSATZ155.c:6:1: warning: "/*" within comment
../ZUSATZ155.c:15: error: expected identifier or '(' before '{' token
../ZUSATZ155.c:70: error: stray '\264' in program
C:\..\asuro_libv271\lib\inc/asuro.h:449: warning: inline function 'MotorSpeed' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:441: warning: inline function 'MotorDir' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:424: warning: inline function 'FrontLED' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:418: warning: inline function 'StatusLED' declared but never defined
make: *** [ZUSATZ155.o] Error 1
Build failed with 2 errors and 8 warnings...


was sagst du zu den 2 anderen programmen? und hast du ein typ für teil 2 und 3 vom ersten programm??[/code]

uwegw
24.05.2009, 16:00
Die geschweifte Klammer gehört HINTER dem Kopf der Funktion.

Statt #include "inttypes.h" muss es #include <inttypes.h> heißen, weil diese Datei im include-Verzeichnis des Compilers und nicht im lokalen Verzeichnis liegt.

Dann gibt es neue Fehler:

t.c:20: error: 'length' redeclared as different kind of symbol
t.c:10: error: previous definition of 'length' was here
>> Es gibt diese Variable zweimal: einmal als Pointer-Parameter, und einmal lokal.

t.c:65: error: stray '\264' in program
>>Schau genau hin, dann findest du das störende Zeichen.

t.c:71: warning: assignment makes integer from pointer without a cast
t.c:81: warning: incompatible implicit declaration of built-in function 'printf'
t.c:81: warning: passing argument 1 of 'printf' makes pointer from integer without a cast
>>Kommt von der doppelten Deklaration von lenght


Und den Unterschied zwischen = und == kennst du immer noch nicht!

asuro11
24.05.2009, 16:55
so also




#include <inttypes.h>

/* Teil 1. Bandpassfilter*/



void bpfilter(int_8 *input,int8_t *output, uint16_t *length, int32_t koeff)
{

int32_t a2; /* a2 als Integervariable festlegen*/
int32_t a3; /* a3 als Integervariable festlegen*/
int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/
int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/
int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/
uint16_t n; /* n Integervariable festlegen*/
uint16_t i; /* i als Integervariable festlegen*/


x1=0; /* Wert für x1 festlegen*/
x2=0; /* Wert für x2 festlegen*/
y0=0; /* Wert für y0 festlegen*/
y1=0; /* Wert für y1 festlegen*/
y2=0; /* Wert für y2 festlegen*/
x0=1; /* Wert für x0 festlegen*/
length=100; /* Wert für length festlegen*/

for (i==1;i<7;i++) /* Schleife zählt bis 6 hoch, um die Werte mit jedem Bandpass zu filtern*/
{
if (i==1) /* Schleife 1 mit den Werten für Bandpass 1*/
{
a2=2;
a3=3;
GAIN_FRAC=4;
}
if (i==2) /* Schleife 2 mit den Werten fü Bandpass 2*/
{
a2=1;
a3=2;
GAIN_FRAC=3;
}
if (i==3) /* Schleife 3 mit den Werten für Bandpass 3*/
{
a2=3;
a3=2;
GAIN_FRAC=1;
}
if (i==4) /* Schleife 4 mit den Werten für Bandpass 4*/
{
a2=4;
a3=2;
GAIN_FRAC=3;
}
if (i==5) /* Schleife 5 mit den Werten für Bandpass 5*/
{
a2=1;
a3=1;
GAIN_FRAC=1;
}
if (i==6) /* Schleife 6 mit den Werten für Bandpass 6*/
{
a2=2;
a3=4;
GAIN_FRAC=3;
}

for (n==0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/
}

printf(output[n]); /* Ergebnis soll am Bildschirm angeszeigt werden*/
}


/* Teil 2. LEDs ANSTEUERN und Befehl erstellen*/

/* Teil 3. Versenden des Befehls über IR-DIODE*/
}





hab jetzt keine warnings und "nur"noch 1 error drin.

../ZUSATZ155.c:16: error: expected ')' before '*' token
make: *** [ZUSATZ155.o] Error 1
Build failed with 1 errors and 0 warnings...

aber den verstehe ich nicht???

ich hab kurz eine verständnis frage. durch die gleichung wird ja der ausgangswert berechnet. und das mit allen verschiedenen koeffizienten. aber muss denn nicht y0 wieder auf 0 gesetzt werden nach der berechnung mit i=1? das man mit i=2 wieder von vorne anfangen kann?
und dann zu teil 2. es sollen ja LEDs angesteuert werden. LED1 soll leuchten wenn Bandpass 1 (also i=1) aktiv ist, also wenn die eingehende frequenz dem des bandpasses gleich ist. wie würdest du denn dann das im 2. teil machen? irgendwie so vielleicht:
if x0=y0 von i=1 dann LED 1 leuchtet
if x0=y0 von i=2 dann LED 2 leuchtet
??

beim 3. teil. ich möchte dass bandpass 2 aktiv fall 1 ist, bandpass 3 aktiv fall 2, bandpass 4 aktiv fall 3, bandpass 5 aktiv fall 4.
über die IR Diode soll dann z.b. "fall 1" gesendet werden. wie kann man das machen?

im programm des ASUROs wird das dann erkannt und einer bewegung zugeordnet:



#include <inttypes.h>
#include "asuro.h"

#define aus MotorDir(BREAK,BREAK)
uint8_t chgetchar()

void main()
{

while(1)
{

command = chgetchar();

switch(command)
{
fall '1':
{
MotorDir(FWD,FWD);
MotorSpeed(50,50);
Msleep(70);

}
break;
fall '2':
{
MotorDir(RWD,RWD);
MotorSpeed(50,50);
Msleep(70);

}
break;
fall '3':
{
MotorDir(FWD,FWD);
MotorSpeed(50,0);
Msleep(70);

}
break;
fall '4':
{
MotorDir(FWD,FWD);
MotorSpeed(0,50);
Msleep(70);

}
break;
default:
{
}break;
}
}

}


ich hoffe habe das mit == und = jetzt richtig gemacht, habs nämlich nachgeschlagen...

uwegw
24.05.2009, 17:22
Ersetz mal den int_8 durch int8_t. Dann bist du alle Syntaxfehler los. Die logischen Fehler schlagen sich nun in den Warnungen nieder. Alle siehst du nur, wenn du mit -Wall kompilierst.

t.c:26: warning: assignment makes pointer from integer without a cast
>>lenght ist nen pointer und kein int!
t.c:28: warning: statement with no effect
t.c:67: warning: statement with no effect
>>Hier war das = schon richtig! Du solltest dein Nachschlagewerk wechseln. Eigentlich ist das ganz einfach: = ist für ne Wertzuweisung, == für einen Vergleich.
t.c:67: warning: comparison between pointer and integer
>>lenght ist nen pointer und kein int!
t.c:69: warning: assignment makes integer from pointer without a cast
>>lenght ist nen pointer und kein int!
t.c:79: warning: implicit declaration of function 'printf'
t.c:79: warning: incompatible implicit declaration of built-in function 'printf'
t.c:79: warning: passing argument 1 of 'printf' makes pointer from integer without a cast
>>printf wird anders aufgerufen!

asuro11
26.05.2009, 15:48
#include <inttypes.h>

/* Teil 1. Bandpassfilter*/



void bpfilter(int8_t *input,int8_t *output, uint16_t *length, int32_t koeff)
{

int32_t a2; /* a2 als Integervariable festlegen*/
int32_t a3; /* a3 als Integervariable festlegen*/
int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/
int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/
int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/
uint16_t n; /* n Integervariable festlegen*/
uint16_t i; /* i als Integervariable festlegen*/


x1=0; /* Wert für x1 festlegen*/
x2=0; /* Wert für x2 festlegen*/
y0=0; /* Wert für y0 festlegen*/
y1=0; /* Wert für y1 festlegen*/
y2=0; /* Wert für y2 festlegen*/
x0=1; /* Wert für x0 festlegen*/
length=100; /* Wert für length festlegen*/

for (i=1;i<7;i++) /* Schleife zählt bis 6 hoch, um die Werte mit jedem Bandpass zu filtern*/
{
if (i==1) /* Schleife 1 mit den Werten für Bandpass 1*/
{
a2=2;
a3=3;
GAIN_FRAC=4;
}
if (i==2) /* Schleife 2 mit den Werten für Bandpass 2*/
{
a2=1;
a3=2;
GAIN_FRAC=3;
}
if (i==3) /* Schleife 3 mit den Werten für Bandpass 3*/
{
a2=3;
a3=2;
GAIN_FRAC=1;
}
if (i==4) /* Schleife 4 mit den Werten für Bandpass 4*/
{
a2=4;
a3=2;
GAIN_FRAC=3;
}
if (i==5) /* Schleife 5 mit den Werten für Bandpass 5*/
{
a2=1;
a3=1;
GAIN_FRAC=1;
}
if (i==6) /* Schleife 6 mit den Werten für Bandpass 6*/
{
a2=2;
a3=4;
GAIN_FRAC=3;
}

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/
}


}


/* Teil 2. LEDs ANSTEUERN und Befehl erstellen*/

/* Teil 3. Versenden des Befehls über IR-DIODE*/
}


ok habe jetzt nur noch die fehler und errors:

../ZUSATZ155.c: In function 'bpfilter':
../ZUSATZ155.c:34: warning: assignment makes pointer from integer without a cast
../ZUSATZ155.c:75: warning: comparison between pointer and integer
../ZUSATZ155.c:77: warning: assignment makes integer from pointer without a cast
../ZUSATZ155.c:21: warning: 'GAIN_FRAC' may be used uninitialized in this function
../ZUSATZ155.c:20: warning: 'a3' may be used uninitialized in this function
../ZUSATZ155.c:19: warning: 'a2' may be used uninitialized in this function
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr4/crtm8.o:(.init9+0x0): undefined reference to `main'
make: *** [ZUSATZ155.elf] Error 1
Build failed with 1 errors and 6 warnings...


das mit dem error und das mit length kapier ich nicht ganz??

asuro11
26.05.2009, 15:53
#include <inttypes.h>
#include "asuro.h"

#define aus MotorDir(BREAK,BREAK)
uint8_t chgetchar()

void main()
{

while(1)
{

command = chgetchar();

switch(command)
{
fall '1':
{
MotorDir(FWD,FWD);
MotorSpeed(50,50);
Msleep(70);

}
break;
fall '2':
{
MotorDir(RWD,RWD);
MotorSpeed(50,50);
Msleep(70);

}
break;
fall '3':
{
MotorDir(FWD,FWD);
MotorSpeed(50,0);
Msleep(70);

}
break;
fall '4':
{
MotorDir(FWD,FWD);
MotorSpeed(0,50);
Msleep(70);

}
break;
default:
{
}break;
}
}

}


habe gerade noch am 2. programm mich versucht, aber bekomme auch hier warnings und errors.

../ASUROPlatine.c: In function 'chgetchar':
../ASUROPlatine.c:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
../ASUROPlatine.c:55: error: expected '{' at end of input
../ASUROPlatine.c:55: warning: no return statement in function returning non-void
Build failed with 2 errors and 5 warnings...

kannst du mir auch hier vielleicht helfen?? (ich bin leider noch anfänger beim programmieren)

asuro11
26.05.2009, 15:58
nochmal zum 1. programm. kannst du mir da kurz einen tipp für den 2. teil geben, wie ich das machen könnte? und beim 3. teil stehe ich auch voll auf dem schlauch weil ich was mit ir diode noch nie programmier habe und somit auch keinen befehl dafür kenne ](*,)

uwegw
26.05.2009, 16:06
Du übergibst der Funktion den Pointer "length", der auf einen uint16_t zeigt. In der Funktion greifst du aber so auf length zu, als wäre es ein uint16_t und kein Zeiger darauf.
Wenn du die Variable ansprechen willst, auf die der Zeiger p zeigt, musst du *p schreiben.
Also bei dir z.B. *length=100; um den Wert der Variable, auf die lenght zeigt, auf 100 zu setzen. Ist dir wirklich klar, was ein Zeiger ist?

asuro11
26.05.2009, 16:25
ok. ich habe gedacht length ist einfach die anzahl der werte die er abtasten soll???also er soll wie in dem fall 100 werte aufnehmen und dann berechnen. und dann soll er die nächsten 100 werte aufnehmen und berechnen usw...

könnest du mir kurz in meinem code das markieren wo es hackt und zeigen wie es richtig sein muss??

aber an sich müsste das programm aber schon passen oder?

und wie sieht es mit den anderen teilen aus?
bei teil 2. habe ich mir es eben so vorgestellt, dass eine bestimmte LED leuchtet wenn ein bestimmter Bandpass aktiv ist. und dass habe ich mir so gedacht dass ein bandpass aktiv ist wenn der eingangswert gleich dem berechneten ausgangswert ist oder? dann müsste doch if x0=y0 mit i=1 LED 1 ON (nur als bsp) oder???
und im 3. teil ist mir einfach nicht bekannt wie man im programm festlegen kann das die DIODE etwas bestimmtes senden soll.

im 2. Programm bin ich mir auch nicht sicher ob das klappen kann (wie oben geschrieben sind ja auch 2 errors drin)

asuro11
27.05.2009, 12:09
stimmt denn das überhaupt mit x0=y0?? dann könnte ich doch eigentlich in jede if schleife zum schluss schreiben if x0=y0 then led leuchtet and IR Diode sendet was. und dann halt else i++ (das er in die nächste schleife geht) oder??? wäre gut wenn du sagen könntest ob das richtig wäre, und vielleicht wie ich es genau machen könnte. wäre nett, dankeschön.

und allgemein halt, wie ich was mit ir-diode versenden kann..

wie sieht es denn mit dem 2. programm aus?

asuro11
27.05.2009, 12:50
habe jetzt mal das 1. programm geschrieben, sowie ich denke dass es sinn macht. ist jetzt so aufgebaut dass er i hochzählen lässt. bei jedem i wird x0 berechnet. es leuchtet die kontrollled dass er auch rechnet. dann wird mit if abgefragt ob x0=y0. wenn es der fall ist, dann leuchtet die LED des Bandpasses. Und gegebenenfalls wird mit SerWrite ein Fallx gesendet.Außerdem wird am Ende der if schleife alle Variablen wieder auf 0 gesetzt, dass x0 immer neu berechnet werden kann.

habe leider viele errors drin. es wird wohl gesagt dass die Pins nicht deklariert sind oder so...



#include <inttypes.h>

void bpfilter(int8_t *input,int8_t *output, uint16_t *length, int32_t koeff)
{

int32_t a2; /* a2 als Integervariable festlegen*/
int32_t a3; /* a3 als Integervariable festlegen*/
int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/
int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/
int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/
uint16_t n; /* n Integervariable festlegen*/
uint16_t i; /* i als Integervariable festlegen*/


x1=0; /* Wert für x1 festlegen*/
x2=0; /* Wert für x2 festlegen*/
y0=0; /* Wert für y0 festlegen*/
y1=0; /* Wert für y1 festlegen*/
y2=0; /* Wert für y2 festlegen*/
x0=1; /* Wert für x0 festlegen*/
length=100; /* Wert für length festlegen*/



for (i=1;i<7;i++) /* Schleife zählt bis 6 hoch, um die Werte mit jedem Bandpass zu filtern*/
{
if (i==1) /* Schleife 1 mit den Werten für Bandpass 1*/
{
a2=2;
a3=3;
GAIN_FRAC=4;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/


if (y0==x0)
{
DDRC|=(1<<PC1); /*Setze PC_1 auf output*/
PORTC|=(1<<PC1); /*Setze PC_1 auf 1 --> LED 1 leuchtet*/
Sleep(100);
PORTC&=~(1<<PC1); /*Setze PC_1 auf 0 --> LED 1 geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/
}
}
}

if (i==2) /* Schleife 2 mit den Werten für Bandpass 2*/
{
a2=1;
a3=2;
GAIN_FRAC=3;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

if (y0==x0)
{
DDRC|=(1<<PC4); /*Setze PC_4 auf output*/
PORTC|=(1<<PC4); /*Setze PC_4 auf 1 --> LED 2 leuchtet*/
Sleep(100);
PORTC&=~(1<<PC4); /*Setze PC_4 auf 0 --> LED 2 geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

SerWrite("fall 1"); /*Über IR-Diode Fall1 senden*/
Msleep(100);
}
}

}

if (i==3) /* Schleife 3 mit den Werten für Bandpass 3*/
{
a2=3;
a3=2;
GAIN_FRAC=1;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

if (y0==x0)
{
DDRC|=(1<<PC3); /*Setze PC_3 auf output*/
PORTC|=(1<<PC3); /*Setze PC_3 auf 1 --> LED 3 leuchtet*/
Sleep(100);
PORTC&=~(1<<PC3); /*Setze PC_3 auf 0 --> LED 3 geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

SerWrite("fall 2"); /*Über IR-Diode Fall2 senden*/
Msleep(100);
}
}
}

if (i==4) /* Schleife 4 mit den Werten für Bandpass 4*/
{
a2=4;
a3=2;
GAIN_FRAC=3;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

if (y0==x0)
{
DDRB|=(1<<PB5); /*Setze PB_5 auf output*/
PORTB|=(1<<PB5); /*Setze PB_5 auf 1 --> LED 4 leuchtet*/
Sleep(100);
PORTB&=~(1<<PB5); /*Setze PB_5 auf 0 --> LED 4 geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

SerWrite("fall 3"); /*Über IR-Diode Fall3 senden*/
Msleep(100);
}
}
}

if (i==5) /* Schleife 5 mit den Werten für Bandpass 5*/
{
a2=1;
a3=1;
GAIN_FRAC=1;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

if (y0==x0)
{
DDRB|=(1<<PB4); /*Setze PB_4 auf output*/
PORTB|=(1<<PB4); /*Setze PB_4 auf 1 --> LED 5 leuchtet*/
Sleep(100);
PORTB&=~(1<<PB4); /*Setze PB_4 auf 0 --> LED 5 geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

SerWrite("fall 4"); /*Über IR-Diode Fall4 senden*/
Msleep(100);
}
}
}

if (i==6) /* Schleife 6 mit den Werten für Bandpass 6*/
{
a2=2;
a3=4;
GAIN_FRAC=3;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

if (y0==x0)
{
DDRB|=(1<<PB0); /*Setze PB_0 auf output*/
PORTB|=(1<<PB0); /*Setze PB_0 auf 1 --> LED 6 leuchtet*/
Sleep(100);
PORTB&=~(1<<PB0); /*Setze PB_0 auf 0 --> LED 6 geht aus*/
x0=x1=x2=0; /*Alle Variablen auf 0 setzen*/
y0=y1=y2=0; /*Alle Variablen auf 0 setzten*/

}
}
}

}

}


habe jetzt diese errors:
../ZUSATZ1552.c: In function 'bpfilter':
../ZUSATZ1552.c:30: warning: assignment makes pointer from integer without a cast
../ZUSATZ1552.c:42: warning: comparison between pointer and integer
../ZUSATZ1552.c:44: warning: assignment makes integer from pointer without a cast
../ZUSATZ1552.c:53: error: 'DDRB' undeclared (first use in this function)
../ZUSATZ1552.c:53: error: (Each undeclared identifier is reported only once
../ZUSATZ1552.c:53: error: for each function it appears in.)
../ZUSATZ1552.c:53: error: 'PB1' undeclared (first use in this function)
../ZUSATZ1552.c:54: error: 'PORTB' undeclared (first use in this function)
../ZUSATZ1552.c:55: warning: implicit declaration of function 'Sleep'
../ZUSATZ1552.c:63: error: 'DDRC' undeclared (first use in this function)
../ZUSATZ1552.c:63: error: 'PC1' undeclared (first use in this function)
../ZUSATZ1552.c:64: error: 'PORTC' undeclared (first use in this function)
../ZUSATZ1552.c:79: warning: comparison between pointer and integer
../ZUSATZ1552.c:81: warning: assignment makes integer from pointer without a cast
../ZUSATZ1552.c:99: error: 'PC4' undeclared (first use in this function)
../ZUSATZ1552.c:106: warning: implicit declaration of function 'SerWrite'
../ZUSATZ1552.c:107: warning: implicit declaration of function 'Msleep'
../ZUSATZ1552.c:119: warning: comparison between pointer and integer
../ZUSATZ1552.c:121: warning: assignment makes integer from pointer without a cast
../ZUSATZ1552.c:139: error: 'PC3' undeclared (first use in this function)
../ZUSATZ1552.c:158: warning: comparison between pointer and integer
../ZUSATZ1552.c:160: warning: assignment makes integer from pointer without a cast
../ZUSATZ1552.c:178: error: 'PB5' undeclared (first use in this function)
../ZUSATZ1552.c:197: warning: comparison between pointer and integer
../ZUSATZ1552.c:199: warning: assignment makes integer from pointer without a cast
../ZUSATZ1552.c:217: error: 'PB4' undeclared (first use in this function)
../ZUSATZ1552.c:236: warning: comparison between pointer and integer
../ZUSATZ1552.c:238: warning: assignment makes integer from pointer without a cast
../ZUSATZ1552.c:256: error: 'PB0' undeclared (first use in this function)
Build failed with 13 errors and 16 warnings...

asuro11
27.05.2009, 13:05
habe jetzt auch noch das 2. programm fertig gemacht. bin mir aber nicht sicher was nach SerRead in die Klammer muss. Daten ist klar, aber dann? muss da vielleicht fall1, fall2, fall3, fall4 rein??hab nur noch paar warnings drin. errors ist nichts. blos das wichtige ist, kann das so überhaupt funktionieren??




#include <inttypes.h>
#include "asuro.h"

#define aus MotorDir(BREAK,BREAK)

void main()
{
char daten;
Init();
while(1)
{
SerRead(&daten,1,0); /*Daten einlesen*/

if (daten == 'fall1') /*Falls 1. Fall*/
{
MotorDir(FWD,FWD); /*Gerade aus fahren*/
MotorSpeed(50,50);
Msleep(100);
}
break;

if (daten == 'fall2') /*Falls 2. Fall*/
{
MotorDir(RWD,RWD); /*Rückwärtsfahren*/
MotorSpeed(50,50);
Msleep(100);
}
break;

if (daten == 'fall3') /*Falls 3. Fall*/
{
MotorDir(FWD,FWD); /*Links fahren*/
MotorSpeed(50,0);
Msleep(100);
}
break;

if (daten == 'fall4') /*Falls 4. Fall*/
{
MotorDir(FWD,FWD); /*Rechts fahren*/
MotorSpeed(0,50);
Msleep(70);
}
break;

}

}




../ASUROPlatine.c:15: warning: return type of 'main' is not 'int'
../ASUROPlatine.c: In function 'main':
../ASUROPlatine.c:21: warning: pointer targets in passing argument 1 of 'SerRead' differ in signedness
../ASUROPlatine.c:23:25: warning: character constant too long for its type
../ASUROPlatine.c:31:25: warning: character constant too long for its type
../ASUROPlatine.c:39:25: warning: character constant too long for its type
../ASUROPlatine.c:47:25: warning: character constant too long for its type
../ASUROPlatine.c: At top level:
C:\asuro_libv271\lib\inc/asuro.h:449: warning: inline function 'MotorSpeed' declared but never defined
C:asuro_libv271\lib\inc/asuro.h:441: warning: inline function 'MotorDir' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:424: warning: inline function 'FrontLED' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:418: warning: inline function 'StatusLED' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:449: warning: inline function 'MotorSpeed' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:441: warning: inline function 'MotorDir' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:424: warning: inline function 'FrontLED' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:418: warning: inline function 'StatusLED' declared but never defined
avr-gcc.exe -I"
C:\asuro_libv271\lib\inc" -mmcu=atmega8 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enu
ms -MD -MP -MT asuro.o -MF dep/asuro.o.d -c ../../asuro.c

C:\asuro_libv271\lib\inc/asuro.h:449: warning: inline function 'MotorSpeed' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:441: warning: inline function 'MotorDir' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:424: warning: inline function 'FrontLED' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:418: warning: inline function 'StatusLED' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:449: warning: inline function 'MotorSpeed' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:441: warning: inline function 'MotorDir' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:424: warning: inline function 'FrontLED' declared but never defined
C:\asuro_libv271\lib\inc/asuro.h:418: warning: inline function 'StatusLED' declared but never defined

asuro11
27.05.2009, 15:43
also beim 1. programm habe ich jetzt noch #include asuro.h jetzt habe ich nur noch folgende fehler:

../ZUSATZ1552.c:225: error: too few arguments to function 'SerWrite'

und der 4 mal...

ich weiß gar nicht ob ich das so machen kann mit serwrite bzw. serread...

asuro11
28.05.2009, 16:43
müsste nur noch die errors beheben und dann rausfinden ob x0=y0 sinn macht, ob das bedeutet dass der bandpass aktiv ist...

wie sieht es denn mit serread und serwrite aus??

asuro11
29.05.2009, 13:49
also habe das programm jetzt mal umgeschrieben:




#include <inttypes.h>
#include "asuro.h"

void bpfilter(int8_t *input,int8_t *output, uint16_t *length, int32_t koeff)
{

int32_t a2; /* a2 als Integervariable festlegen*/
int32_t a3; /* a3 als Integervariable festlegen*/
int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/
int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/
int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/
uint16_t n; /* n Integervariable festlegen*/
uint16_t i; /* i als Integervariable festlegen*/
int z; /* z als Variable einführen*/

z=0.8; /* Wert für z festlegen*/
x1=0; /* Wert für x1 festlegen*/
x2=0; /* Wert für x2 festlegen*/
y0=0; /* Wert für y0 festlegen*/
y1=0; /* Wert für y1 festlegen*/
y2=0; /* Wert für y2 festlegen*/
x0=1; /* Wert für x0 festlegen*/
length=100; /* Wert für length festlegen = Wert der Signallänge*/



for (i=1;i<7;i++) /* Schleife zählt bis 6 hoch, um die Werte mit jedem Bandpass zu filtern*/
{
if (i==1) /* Schleife 1 mit den Werten für Bandpass 1*/
{
a2=2;
a3=3;
GAIN_FRAC=4;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/


if (output[n]==x0)
{
DDRC|=(1<<PC1); /*Setze PC_1 auf output*/
PORTC|=(1<<PC1); /*Setze PC_1 auf 1 --> LED 1 leuchtet*/
Sleep(100);
PORTC&=~(1<<PC1); /*Setze PC_1 auf 0 --> LED 1 geht aus*/
}
}
x1=x2=0; /*Alle Variablen auf alten Stand setzen*/
y0=y1=y2=0;
x0=1;

}

if (i==2) /* Schleife 2 mit den Werten für Bandpass 2*/
{
a2=1;
a3=2;
GAIN_FRAC=3;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/

if (output[n]>(x0*z))
{
DDRC|=(1<<PC4); /*Setze PC_4 auf output*/
PORTC|=(1<<PC4); /*Setze PC_4 auf 1 --> LED 2 leuchtet*/
Sleep(100);
PORTC&=~(1<<PC4); /*Setze PC_4 auf 0 --> LED 2 geht aus*/

SerWrite("fall 1"); /*Über IR-Diode Fall1 senden*/
Msleep(100);
}
}
x1=x2=0; /*Alle Variablen auf alten Stand setzen*/
y0=y1=y2=0;
x0=1;

}

if (i==3) /* Schleife 3 mit den Werten für Bandpass 3*/
{
a2=3;
a3=2;
GAIN_FRAC=1;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/


if (output[n]>(x0*z))
{
DDRC|=(1<<PC3); /*Setze PC_3 auf output*/
PORTC|=(1<<PC3); /*Setze PC_3 auf 1 --> LED 3 leuchtet*/
Sleep(100);
PORTC&=~(1<<PC3); /*Setze PC_3 auf 0 --> LED 3 geht aus*/

SerWrite("fall 2"); /*Über IR-Diode Fall2 senden*/
Msleep(100);
}
}
x1=x2=0; /*Alle Variablen auf alten Stand setzen*/
y0=y1=y2=0;
x0=1;

}


if (i==4) /* Schleife 4 mit den Werten für Bandpass 4*/
{
a2=4;
a3=2;
GAIN_FRAC=3;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/

if (output[n]>(x0*z))
{
DDRB|=(1<<PB5); /*Setze PB_5 auf output*/
PORTB|=(1<<PB5); /*Setze PB_5 auf 1 --> LED 4 leuchtet*/
Sleep(100);
PORTB&=~(1<<PB5); /*Setze PB_5 auf 0 --> LED 4 geht aus*/

SerWrite("fall 3"); /*Über IR-Diode Fall3 senden*/
Msleep(100);
}
}
x1=x2=0; /*Alle Variablen auf alten Stand setzen*/
y0=y1=y2=0;
x0=1;

}

if (i==5) /* Schleife 5 mit den Werten für Bandpass 5*/
{
a2=1;
a3=1;
GAIN_FRAC=1;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/

if (output[n]>(x0*z))
{
DDRB|=(1<<PB4); /*Setze PB_4 auf output*/
PORTB|=(1<<PB4); /*Setze PB_4 auf 1 --> LED 5 leuchtet*/
Sleep(100);
PORTB&=~(1<<PB4); /*Setze PB_4 auf 0 --> LED 5 geht aus*/

SerWrite("fall 4"); /*Über IR-Diode Fall4 senden*/
Msleep(100);
}
}
x1=x2=0; /*Alle Variablen auf alten Stand setzen*/
y0=y1=y2=0;
x0=1;

}

if (i==6) /* Schleife 6 mit den Werten für Bandpass 6*/
{
a2=2;
a3=4;
GAIN_FRAC=3;

for (n=0;n<length;n++) /* Schleife bis n alle Eingangswerte verarbeitet hat (length legt die Anzahl der Eingangswerte fest)*/
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1); /*Setze PB_1 auf 0 --> KontrollLED geht aus*/

if (output[n]>(x0*z))
{
DDRB|=(1<<PB0); /*Setze PB_0 auf output*/
PORTB|=(1<<PB0); /*Setze PB_0 auf 1 --> LED 6 leuchtet*/
Sleep(100);
PORTB&=~(1<<PB0); /*Setze PB_0 auf 0 --> LED 6 geht aus*/

}
}
x1=x2=0; /*Alle Variablen auf alten Stand setzen*/
y0=y1=y2=0;
x0=1;

}

}

}


und habe die errors:

../ZUSATZ1552.c:223: error: too few arguments to function 'SerWrite'

und das 4 mal. kann kurz mir jemand das erklären was da alles rein muss?

und mein 2. programm:





#include <inttypes.h>
#include "asuro.h"

#define aus MotorDir(BREAK,BREAK)

void main()
{
char daten;
Init();
while(1)
{
SerRead(&daten,1,0); /*Daten einlesen*/

if (daten == 'fall1') /*Falls 1. Fall*/
{
MotorDir(FWD,FWD); /*Gerade aus fahren*/
MotorSpeed(50,50);
Msleep(100);
}
break;

if (daten == 'fall2') /*Falls 2. Fall*/
{
MotorDir(RWD,RWD); /*Rückwärtsfahren*/
MotorSpeed(50,50);
Msleep(100);
}
break;

if (daten == 'fall3') /*Falls 3. Fall*/
{
MotorDir(FWD,FWD); /*Links fahren*/
MotorSpeed(50,0);
Msleep(100);
}
break;

if (daten == 'fall4') /*Falls 4. Fall*/
{
MotorDir(FWD,FWD); /*Rechts fahren*/
MotorSpeed(0,50);
Msleep(70);
}
break;

}

}


hier habe ich keinen fehler mehr :)

und dann habe ich noch ein ersatzprogramm, falls das 1. nicht mehr läuft.
und zwar gehts hier nur drum, zu analysieren ob überhaupt ein signal eingeht:



#include <inttypes.h>
#include "asuro.h"

void bpfilter(int8_t *input,int8_t *output, uint16_t *length, int32_t koeff)
{

int32_t a2; /* a2 als Integervariable festlegen*/
int32_t a3; /* a3 als Integervariable festlegen*/
int32_t GAIN_FRAC; /* GAIN_FRAC als Integervariable festlegen*/
int32_t x0,x1,x2; /* x0,x1,x2 als Integervariable festlegen*/
int32_t y0,y1,y2; /* y0,y1,y2 Integervariable festlegen*/
uint16_t n; /* n Integervariable festlegen*/


x1=0; /* Wert für x1 festlegen*/
x2=0; /* Wert für x2 festlegen*/
y0=0; /* Wert für y0 festlegen*/
y1=0; /* Wert für y1 festlegen*/
y2=0; /* Wert für y2 festlegen*/
x0=1; /* Wert für x0 festlegen*/
length=100; /* Wert für length festlegen = Wert der Signallänge*/
a2=3;
a3=2;
GAIN_FRAC=1;

for (n=0;n<length;n++)
{
x0=input; /* x0 als Eingang festlegen*/
y0=x0-x2-((a2*y1)>>16)-((a3*y2)>>16); /* Gleichung um y0 zu berechnen*/
x2=x1;
x1=x0;
y2=y1;
y1=y0;

output[n]=((y0*GAIN_FRAC)>>16); /* Gleichung um Ausgang zu berechnen*/

if (output[n]>0) /* wenn ein Signal erkannt wird, ist output[n] immer größer 0*/
{
DDRB|=(1<<PB1); /*Setze PB_1 auf output*/
PORTB|=(1<<PB1); /*Setze PB_1 auf 1 --> KontrollLED leuchtet*/
Sleep(100);
PORTB&=~(1<<PB1);
}
}
}


hier habe ich leider noch einen error:

c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr4/crtm8.o:(.init9+0x0): undefined reference to `main'



könnt ihr mir noch helfen, wie ich das verbessern kann???

ach ja die koeffizienten a2, a3 usw. sind einfach irgendwelche werte und nicht die berechneten...

asuro11
29.05.2009, 14:43
habe jetzt alle programme fertig geschrien und immer 1 error:

c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr4/crtm8.oSad.init9+0x0): undefined reference to `main'

Besserwessi
29.05.2009, 16:57
Der Fehler mit der fehlenden Definition von main sieht danach aus das etwas mit dem Makefile nicht stimmt. Wenn man AVRstudio benutzt wäre das das eintragen der Files die zum Code gehören und die Markierung es "Startfiles".

KR-500
29.05.2009, 20:50
HI

Das Problem:
c:/winavr-20080610/bin/../lib/gcc/avr/4.3.0/../../../../avr/lib/avr4/crtm8.oSad.init9+0x0): undefined reference to `main'
geht wohl darauf zurück, dass du in deinem Programm kein main in deinem Programm gibt.
Du musst noch so etwas wie "void main() { } " einfügen und dann darin die Funktion aufrufen.

KR-500

asuro11
05.07.2009, 15:33
hallo habe noch kurz fragen zum projekt:

1. bei der resurce relation ausm internet sind ja die koeff verdreht mit anderen vorzeichen. wenn man jetzt aber die koeff für seine filtergleichung haben will muss man doch daher die vorzeichen der koeffs wechseln und ebenso die reihenfolge oder? weil das mikrocontroller heft hat bei dem einem koeff (ich glaub a2) nicht das vorzeichen gedreht. es ist ja in der resurce relation einmal + und - , aber beide sind dann in "wirklichkeit" positv in der iir filtergleichung??? wo ist denn hier der fehler???

2. im programm. was bedeutet denn genau void bpfilter(......) was ist dass denn???

3. die signallänge. ist da die voraussetzung im mikrocontrollerheft das 10kHz 100 Mikrosek Abtastzeit beudeuten. woher kommt diese voraussetzung??? und dann ist klar das bei 1kHz die Zietdauer für 10 Schwingungen 10 ms dauern. aber warum teilt man dann 10ms/10mikrosek??? dass dann 100 werte rauskommen? das hab ich net ganz gerafft...

4. was genau ist ein phasengang??