- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Fehler suche

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.03.2011
    Beiträge
    51

    Fehler suche

    Anzeige

    Praxistest und DIY Projekte
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <stdint.h>
    #include <util/delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    
    
    // PD0 = Taster für Richtung für alle Motoren
    // PD1 = Taster für Start
    // PD2 = Taster für Interrupt0 
    // PD3 = Taster für Interrupt1 
    // PD4 = Taster für Stop
    // PD5 = Taster für Reset
    
    // PB4 = Richtung für alle Motoren
    //******************************
    // MOTOR 1 Richtung X
    //******************************
    // PB0 = Enable M1
    // PB1 = Clock M1 
    
    //******************************
    // MOTOR 2 Richtung Y
    //******************************
    // PB2 = Enable M2
    // PB3 = Clock M2
    
    
    // PC0 = Trigger
    // PD2 = Interrupt0 
    // PD3 = Interrupt1 
    
    volatile uint16_t zx,zy,D;
    
    
    void pause(D)
    {
        for(uint16_t  i=0;i<D;i++)
         asm volatile ("nop");
    }
    void STOP()
    {
     
        
        PORTB&=~(1<<PB0);//Mx En löschen
        PORTB&=~(1<<PB2);//My En löschen
        
    }
    
    ISR (INT0_vect)    
    {                
    
            PORTB|=(1<<PB0);//Mx En
            PORTB|=(1<<PB2);//My En
            PORTB|=(1<<PB4);// Richtung 
    
            for(unsigned int i=0;i<10;i++)
            {zx=0;
             zy=0;
    
    
                for(unsigned int j=0;j<10;j++)
                {
                    for(unsigned int k=0;k<10;k++)
                         {
                            
                            PORTB|=(1<<PB1);  //
                            pause(1000);   //  Clk Mx
                            PORTB&=~(1<<PB1); //
                            zx++;
                        }
    
                    PORTC|=(1<<PC0);        //
                    pause(2000);            // Triggern 5hz
                    PORTC&=~(1<<PC0);        //
    
                }
                for(unsigned int l=0;l<10;l++)
                {
                    for(unsigned int m=0;m<10;m++)
                        {
                        PORTB|=(1<<PB3);    //
                        pause(1000);        // Clk My
                        PORTB&=~(1<<PB3);    //
                        zy++;
                        }
                    PORTC|=(1<<PC0);    //
                    pause(2000);        // Triggern 5hz
                    PORTC&=~(1<<PC0);    //
                }
                PORTB&=~(1<<PB4);// Richtung ändern
                for(unsigned int n=0;n<10;n++)
                {
                    for(unsigned int p=0;p<10;p++)
                        {
                        PORTB|=(1<<PB2);  //
                        pause(1000);   // Clk Mx
                        PORTB&=~(1<<PB2); //
                        zx--;
                        }
                    
                    PORTB|=(1<<PC0);
                    pause(2000); //Triggern 5hz
                    PORTB&=~(1<<PC0);
                  }
                    
                PORTB|=(1<<PB4);// Richtung 
    
                for(unsigned int r=0;r<10;r++)
                {
                    for(unsigned int s=0;s<10;s++)
                        {
                        PORTB|=(1<<PB3);    //
                        pause(1000);        // Clk My
                        PORTB&=~(1<<PB3);    //
                        zy++;
                        }
                    PORTC|=(1<<PC0);    //
                    pause(200);        // Triggern 5hz
                    PORTC&=~(1<<PC0);    //
                }
    
        
        
            
    }
    
    
    ISR (INT1_vect)                    
        
    {        
            void STOP();
            pause(1000);
            PORTB|=(1<<PB0);//Mx En
            PORTB&=~(1<<PB4);// Richtung 
            if(zy>0)
            {
            for(unsigned int q=0;q<zy;q++)
                {
                PORTB|=(1<<PB3);    //
                pause(1000);        // Clk My
                PORTB&=~(1<<PB3);    //    
                }
            }
            if(zx>0)
            {
            for(unsigned int q=0;q<zx;q++)
                {
                PORTB|=(1<<PB1);    //
                pause(1000);        // Clk Mx
                PORTB&=~(1<<PB1);    //    
                }
            }    
        
    
    
    }
    
    
    
    
    
    
        
        
    
    
    
    
    
    //Hauptprogramm START----------
    
    int main(void)
    
    {
    
    
    
        
        DDRD=0b11100000;                // PIN 0-4 als Eingang definieren
        DDRB=0xb11111111;                // PortB als Ausgang definieren
        DDRC|=(1<<PC0);                    // PC0 als Ausgang
    
    
        sei();                        //Interrupts freigeben
    
    //Interrupt initialisieren
           EIMSK|=(1<<INT0)|(1<<INT1);
           EICRA|=(1<<ISC01)|(1<<ISC11);  
    
    
    
    
    
    
    
        
        while(1)                    //Endlosschleife
        {
    
       
        }
        
        return 0;
    }
    ich bekomme diese Fehlern,
    ../M_XY_vers2.c:133: error: static declaration of '__vector_2' follows non-static declaration
    ../M_XY_vers2.c:133: error: previous declaration of '__vector_2' was here



    weißt bitte jemand wo der Fehler ist?
    danke

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Kann es sein, dass dir in INT0 eine schließende Klammer (die von der äußeren for-Schleife) abhanden gekommen ist? Bei sowas sind die nachfolgenden Fehlermeldungen oft nur bedingt Aussagekräftig

    mfG
    Markus

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Die Angabe welcher Kontroller und welcher Kompiler verwendet wird, erleichtert die Hilfestellung.
    Diese Schreibweise im main führt möglicherweise auch zu einem Fehler: DDRB=0xb11111111; // PortB als Ausgang definieren
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    möglicherweise verwirrt ihn das:

    volatile uint16_t zx,zy,D;

    void pause(D)
    {


    das ist "D" statisch definiert, aber auch als argument f. "pause"
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Das "D" ist als globale Variable definiert, wird auch nicht verwendet und gehört entfernt.

    Da im Programm ein Wert an die Funktion übergeben wird, muss diese Variable in Funktionsaufruf definiert sein.
    Das " void pause(D) " ergibt ein Warning, es soll so aussehen "void pause(unsigned int D)"
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    23.03.2011
    Beiträge
    51
    stimmt, in INT0 fehlt ein Klammer,
    danke

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    23.03.2011
    Beiträge
    51
    Zitat Zitat von Hubert.G Beitrag anzeigen
    Die Angabe welcher Kontroller und welcher Kompiler verwendet wird, erleichtert die Hilfestellung.
    Diese Schreibweise im main führt möglicherweise auch zu einem Fehler: DDRB=0xb11111111; // PortB als Ausgang definieren
    das war einen schreibfehler, eigentlich nur 0b11111111.
    danke

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Statt 0b... kann man auch die Dezimalschreibweise oder Hexadezimalschreibweise nehmen.

    Ich habe es am Anfang so gemacht, dass ich wenn ich einen ganzen Port o.Ä. setze zuerst die Binärschreibweise genommen habe (so wie du). Dann habe ich es in die Hex Schreibweise gewandelt und diese geschrieben. Die Umwandlung habe ich auf einem Zettel, den ich daneben gehabt habe gemacht.

    Wenn du deine Binärschreibweise nimmst. Die einzelnen Schritte:
    Ausgangskonfiguration hinschreiben (eventuell noch darüberschreiben, welcher Port gemeint ist (z.B. PB0-PB7)
    Aufteilen in 2 Nibbles (4bit)
    Zusammenrechnen
    Als Hex Format hinschreiben
    Code:
    0b11111111
    0b 1111  1111
    ergibt
      8+4+2+1    8+4+2+1
         15        15
    0x   f          f
     Ergebnis 0xff
    Du kannst aber auch so schreiben. So kannst du leichter einzelne Pins zuweisen ohne herumrechnen.
    Code:
    DDRB |= (1<<PB0) | (1<<PB1)....(1<<PB7);
    Einen Tipp habe ich noch (man sollte aber das händisch umrechnen können). Der Rechner von Windows kann Standartmäßig Hex- (0-15), Binär- (0,1), Oktal- (0-7) Dezimalzahlen (0-9) umrechnen. Bei älteren Versionen (z.B. 2k, XP,..) muss man Wissenschaftlich wählen. Bei z.B. Win 7 muss man Programmierer wählen. Bei Vista bin ich mir nicht sicher wie es da ist, müsste nachschauen.

    MfG Hannes

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Gelegentlich ist die binäre Schreibweise vorteilhafter. Um trotzdem den Überblick zu behalten verwende ich eine zusätzliche Kommentarzeile:
    Code:
    //     76543210
    DDRB=0b11111111;
    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. avr-gcc fehler
    Von che im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 30.07.2008, 15:01
  2. ADC Fehler?
    Von PICVB im Forum PIC Controller
    Antworten: 4
    Letzter Beitrag: 21.11.2007, 22:48
  3. wo ist der fehler??? please help!
    Von Robotik84 im Forum Asuro
    Antworten: 4
    Letzter Beitrag: 28.11.2006, 16:22
  4. ISP Fehler
    Von Thetis im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 04.10.2006, 16:26

Berechtigungen

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

Labornetzteil AliExpress