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...
Code:
#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...
Lesezeichen