- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: töne hören

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    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)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    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?

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    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...

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    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??

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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    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...

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    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??

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    also habe das programm jetzt mal umgeschrieben:

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

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

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

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    31.03.2009
    Beiträge
    76
    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'

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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".

  10. #10
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    29
    Beiträge
    91
    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

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress