-         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 40 von 40

Thema: Wiso funktioniert meine Software für den ATmega88 nicht ??

  1. #31
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    49
    Beiträge
    2.236
    Anzeige

    LiFePo4 Akku selber bauen
    was heisst das eigentlich

    ../Robo_Schalter.c:2:1: warning: "__AVR_ATmega88__" redefined

    und wiso ist das hier nicht richtig

    #define __AVR_ATmega88__
    Sachen, wo zwei #Unterstriche vor sind, sind für den Programmierer eigentlich tabu, das brauchst Du garnicht eintragen.
    Der µC, den man nutzt wird im Makefile eingetragen, sonst nirgendwo

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  2. #32
    Benutzer Stammmitglied
    Registriert seit
    25.07.2008
    Beiträge
    80
    Zitat Zitat von izaseba
    was heisst das eigentlich

    ../Robo_Schalter.c:2:1: warning: "__AVR_ATmega88__" redefined

    und wiso ist das hier nicht richtig

    #define __AVR_ATmega88__
    Sachen, wo zwei #Unterstriche vor sind, sind für den Programmierer eigentlich tabu, das brauchst Du garnicht eintragen.
    Der µC, den man nutzt wird im Makefile eingetragen, sonst nirgendwo

    Gruß Sebastian
    kann ich das #define __AVR_ATmega88__ einfach löschen ?

  3. #33
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    49
    Beiträge
    2.236
    Du Programmierst doch in AVRStudio, da ist bei Projekteinstellungen der Prozessortyp einzutragen, sonst niergendwo.
    im code gehört nur #include<avr/io.h> hin sonst nichts.

    Ja Du kannst(sollst) die Zeile löschen, wie gesagt zwei Unterstriche sind für die Kompilerbauer bestimmt und da sollte man Finger von lassen, es sei den man weiß genau was man tut.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #34
    Benutzer Stammmitglied
    Registriert seit
    25.07.2008
    Beiträge
    80
    dann hab ich noch eine Frage zum Thema verzögerung sprich (delay)

    ich habe hier einen code den ich nicht verstehe

    void delay(long delay){
    int i, dummy;
    for(i=0; i<delay; i++)
    {
    dummy++;
    }
    }

    wenn ich also einen Befehl schreibe zum beispiel

    while(1){

    if(switch1 == 0){
    driveForward();
    STATSLED1_OFF;
    }

    else if (switch1 == 1){
    driveBackward();
    delay(10000)
    turnRIGHTforward();
    STATSLED1_OFF;
    }


    }
    }

    muss ich jetzt das so schreiben ?

    turnRIGHTforward();
    delay(10000)


    oder einfach so lassen turnRIGHTforward();

    wenn das richtig ist wiso funktioniert das dann hier nicht ?



    #include <avr/io.h>
    //#include <iom88.h>


    #define STATSLED0_ON (PORTC |= 1<<PC0)
    #define STATSLED0_OFF (PORTC &= ~(1<<PC0))
    #define STATSLED1_ON (PORTC |= 1<<PC1)
    #define STATSLED1_OFF (PORTC &= ~(1<<PC1))

    #define GET_IRSEN_RIGHT (PIND & 1<<PD4)
    #define GET_IRSEN_LEFT (PIND & 1<<PD3)

    void driveForward(){

    // Motor 1 Forward
    PORTD |= 1<<PD6;
    PORTD &= ~(1<<PD7);
    // Motor 2 Forward
    PORTB |= 1<<PB2;
    PORTB &= ~(1<<PB1);

    }

    void turnLEFTforward(){

    // Motor 1 stop
    PORTD |= 1<<PD6;
    PORTD |= 1<<PD7;
    // Motor 2 Forward
    PORTB |= 1<<PB2;
    PORTB &= ~(1<<PB1);

    }

    void turnRIGHTforward(){

    // Motor 1 Forward
    PORTD |= 1<<PD6;
    PORTD &= ~(1<<PD7);
    // Motor 2 stop
    PORTB |= 1<<PB2;
    PORTB |= 1<<PB1;

    }

    void stop(){

    // Motor 1 stop
    PORTD |= 1<<PD6;
    PORTD |= 1<<PD7;
    // Motor 2 stop
    PORTB |= 1<<PB2;
    PORTB |= 1<<PB1;

    }

    void driveBackward(){

    // Motor 1 backward
    PORTD &= ~(1<<PD6);
    PORTD |= 1<<PD7;
    // Motor 2 backward
    PORTB &= ~(1<<PD2);
    PORTB |= 1<<PD1;
    }

    void turnLEFTbackward(){
    // Motor 1 backward
    PORTD &= ~(1<<PD6);
    PORTD |= 1<<PD7;
    // Motor 2 stop
    PORTB |= 1<<PD2;
    PORTB |= 1<<PD1;
    }

    void turnRIGHTbackward(){
    // Motor 1 stop
    PORTD |= 1<<PD6;
    PORTD |= 1<<PD7;
    // Motor 2 backward
    PORTB &= ~(1<<PD2);
    PORTB |= 1<<PD1;
    }

    void delay(long delay){
    int i, dummy;
    for(i=0; i<delay; i++)
    {
    dummy++;
    }
    }

    int main(void){

    DDRD = 1<<PD6 | 1<<PD7; // PD6 PD7 Output Motor1;
    DDRB = 1<<PB1 | 1<<PB2; // PB1 PB2 Output Motor2;


    DDRD &= ~(1<<PD3 | 1<<PD4); // PD3 PD4 Input IR Sensors;

    DDRC = 1<<PC0 | 1<<PC1; // PC0 PC1 Output StatusLED0 & 1;



    //PORTD &= ~(1<<PD6);
    //PORTD &= ~(1<<PD7);


    while(1){

    if( GET_IRSEN_RIGHT ) STATSLED0_ON;
    else STATSLED0_OFF;

    if( GET_IRSEN_LEFT ) STATSLED1_ON;
    else STATSLED1_OFF;


    if(! GET_IRSEN_RIGHT && ! GET_IRSEN_LEFT){
    driveForward();
    STATSLED0_OFF;
    STATSLED1_OFF;
    }

    else if(GET_IRSEN_RIGHT && GET_IRSEN_LEFT){
    driveBackward();
    delay(10000);
    turnRIGHTbackward();
    delay(10000);
    STATSLED0_ON;
    STATSLED1_ON;
    }


    //PORTC = 1<<PC5;

    //PORTC = 0<<PC5;


    }
    }

  5. #35
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    49
    Beiträge
    2.236
    was ist das jetzt für eine delay Funktion ?
    Warum nimmst Du nicht util/delay.h

    und die Funktionen, die dort angeboten werden
    _delay_us und _delay_ms ?
    Beachtre nur, daß Du die Optimierung > O0 einschalten solltest.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  6. #36
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.209
    Ich bin der selben Meinung wie "radbruch"
    Wie schon vorher geschrieben, ohne Schaltplan ist alles nur Spekulation und hilft dir nicht weiter.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #37
    Benutzer Stammmitglied
    Registriert seit
    25.07.2008
    Beiträge
    80
    also sollte ich jetzt dieses

    void delay(long delay){
    int i, dummy;
    for(i=0; i<delay; i++)
    {
    dummy++;
    }
    }

    einfach schweissen und dieses

    util/delay.h

    _delay_us und _delay_ms ?

    einsetzten

    kannst du mir hier mal ein beispiel machen ?

  8. #38
    Benutzer Stammmitglied
    Registriert seit
    25.07.2008
    Beiträge
    80
    zu dem hier


    Code:
    
    #include <avr/io.h>
    //#include <iom88.h>
    
    long i;
    
    
    #define STATSLED0_ON  (PORTC |= 1<<PC0)
    #define STATSLED0_OFF (PORTC &= ~(1<<PC0))
    #define STATSLED1_ON  (PORTC |= 1<<PC1)
    #define STATSLED1_OFF (PORTC &= ~(1<<PC1))
    
    #define STATSLED2_ON  (PORTC |= 1<<PC2)
    #define STATSLED2_OFF (PORTC &= ~(1<<PC2))
    #define STATSLED3_ON  (PORTC |= 1<<PC3)
    #define STATSLED3_OFF (PORTC &= ~(1<<PC3))
    
    #define SWITCH_LEFT (PINC & 1<<PC6)
    #define SWITCH_RIGHT (PINB & 1<<PB4)
    #define SWITCH_BACK_LEFT (PINB & 1<<PB6)
    #define SWITCH_BACK_RIGHT (PINB & 1<<PB0)
    
    
    
    
    void driveForward(){
    
    	// Motor 1 Forward
    	PORTD |= 1<<PD6;
    	PORTD &= ~(1<<PD7);
    	// Motor 2 Forward
    	PORTB |= 1<<PB2;
    	PORTB &= ~(1<<PB1);
    
    }
    
    void turnLEFTforward(){
    
    	// Motor 1 stop
    	PORTD |= 1<<PD6;
    	PORTD |= 1<<PD7;
    	// Motor 2 Forward
    	PORTB |= 1<<PB2;
    	PORTB &= ~(1<<PB1);
    
    }
    
    void turnRIGHTforward(){
    
    	// Motor 1 Forward
    	PORTD |= 1<<PD6;
    	PORTD &= ~(1<<PD7);
    	// Motor 2 stop
    	PORTB |= 1<<PB2;
    	PORTB |= 1<<PB1;
    
    }
    
    void stop(){
    
    	// Motor 1 stop
    	PORTD |= 1<<PD6;
    	PORTD |= 1<<PD7;
    	// Motor 2 stop
    	PORTB |= 1<<PB2;
    	PORTB |= 1<<PB1;
    
    }
    
    void driveBackward(){
    	
    	// Motor 1 backward
    	PORTD &= ~(1<<PD6);
    	PORTD |= 1<<PD7;
    	// Motor 2 backward
    	PORTB &= ~(1<<PD2);
    	PORTB |= 1<<PD1;
    }
    
    void turnLEFTbackward(){
    	// Motor 1 backward
    	PORTD &= ~(1<<PD6);
    	PORTD |= 1<<PD7;
    	// Motor 2 stop
    	PORTB |= 1<<PD2;
    	PORTB |= 1<<PD1;
    }
    
    void turnRIGHTbackward(){
    	// Motor 1 stop
    	PORTD |= 1<<PD6;
    	PORTD |= 1<<PD7;
    	// Motor 2 backward
    	PORTB &= ~(1<<PD2);
    	PORTB |= 1<<PD1;
    }
    
    
    int main(){
    
    	DDRD = 1<<PD6 | 1<<PD7;			// PD6 PD7 Output Motor1;
    	DDRB = 1<<PB1 | 1<<PB2;			// PB1 PB2 Output Motor2;
    	
    
    
    	DDRC = 1<<PC0 | 1<<PC1 | 1<<PC2 | 1<<PC3;	// PC0 PC1 Output StatusLED 0 & 1 & 2 & 3;
    
    	
    
    	//PORTD &= ~(1<<PD6);
    	//PORTD &= ~(1<<PD7);
    
    
    	// SWITCH_LEFT  	= STATSLED0
    	// SWITCH_RIGHT 	= STATSLED1
    	// SWITCH_BACK_RIGHT 	= STATSLED2
    	// SWITCH_BACK_LEFT  	= STATSLED3
    
    	while(1){
    
    
    		if( ! SWITCH_RIGHT  && ! SWITCH_LEFT ){
    			driveForward();
    			STATSLED0_OFF;
    			STATSLED1_OFF;
    			STATSLED2_OFF;
    			STATSLED3_OFF;
    		}
    
    	else if(! SWITCH_BACK_RIGHT && ! SWITCH_BACK_LEFT ){
    			driveForward();
    			STATSLED0_OFF;
    			STATSLED1_OFF;
    			STATSLED2_OFF;
    			STATSLED3_OFF;
    		}
    
    	else if( SWITCH_RIGHT  && SWITCH_LEFT ){
    			driveBackward();
    			STATSLED0_ON;
    			STATSLED1_ON;
    			STATSLED2_OFF;
    			STATSLED3_OFF;
    		}
    
    	else if( ! SWITCH_RIGHT  && SWITCH_LEFT ){
    			turnLEFTbackward();
    			STATSLED0_ON;
    			STATSLED1_OFF;
    			STATSLED2_OFF;
    			STATSLED3_OFF;
    		}
    
    	else if( SWITCH_RIGHT  && ! SWITCH_LEFT ){
    			turnRIGHTbackward();
    			STATSLED0_OFF;
    			STATSLED1_ON;
    			STATSLED2_OFF;
    			STATSLED3_OFF;
    		}
    
    
    	else if( ! SWITCH_BACK_RIGHT  && SWITCH_BACK_LEFT ){
    			turnRIGHTforward();
    			STATSLED0_OFF;
    			STATSLED1_OFF;
    			STATSLED2_ON;
    			STATSLED3_OFF;
    		}
    
    	else if( SWITCH_BACK_RIGHT  && ! SWITCH_BACK_LEFT ){
    			turnLEFTforward();
    			STATSLED0_OFF;
    			STATSLED1_OFF;
    			STATSLED2_OFF;
    			STATSLED3_ON;
    		}
    //PORTC = 1<<PC5;
    	
    //PORTC = 0<<PC5;	
    		
    
    	}
    }

  9. #39
    Benutzer Stammmitglied
    Registriert seit
    25.07.2008
    Beiträge
    80
    wie muss ich das da rein schreiben und wenn ich jetzt will das der robot erst nach rets rückwerts fährt und dan wider geradeaus

    mus ich dann das auch so schreiben

    ("befehl")
    delay(10000)
    ("befehl")

  10. #40
    Benutzer Stammmitglied
    Registriert seit
    25.07.2008
    Beiträge
    80
    also ich schreibe ja ganz oben

    #include <until\delay.h

    muss ich das jetzt einfach so scheiben


    else if( ! SWITCH_RIGHT && SWITCH_LEFT ){
    turnLEFTbackward();
    delay(3000)
    driveForward();
    STATSLED0_ON;
    STATSLED1_OFF;
    STATSLED2_OFF;
    STATSLED3_OFF;
    }

    oder wie ???

Seite 4 von 4 ErsteErste ... 234

Berechtigungen

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