-         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Atmega8-Programmierung zur Steuerung eines Autos - HILFE!!!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.10.2005
    Beiträge
    19

    Atmega8-Programmierung zur Steuerung eines Autos - HILFE!!!

    Anzeige

    Ich möchte mit Hilfe eines Sensors ein Auto auf Gegenstände reagieren lassen. Es soll, sobald etwas im Weg ist, rückwärts wenden und dann vorwärts weiterfahren..., bis zum nächsten Gegenstand usw...

    Hierfür habe ich folgende Schleife mit C programmiert:

    while (1)
    {
    i=0;

    while (PIND.6==0) { //PIND.6 ist Ausgang des Sensors
    PORTD.0=1; //vorwärts wenn PORTD.0 und .1 =1
    PORTD.1=1;
    delay_ms(5);
    PORTD.0=0;
    PORTD.1=0;
    delay_ms(4); }

    PORTD.4=1; //Lenkung geht nach rechts

    while (i<=200) {
    PORTD.2=1; //rückwärts wenn PORTD.2 und .3 =1
    PORTD.3=1;
    delay_ms(5);
    PORTD.2=0;
    PORTD.3=0;
    delay_ms(4);
    i++; }

    PORTD=0b000000; //alle Ausgänge des Chips aus

    };
    }


    Dies ist ein einfacher Code, aber ich finde den Fehler nicht. Der Wagen reagiert auf den Gegenstand und fährt rückwärts wie geplant. Dann fährt er vorwärts weiter. Soweit ist alles in Ordnung, bloß danach reagiert er auf keinen weiteren Gegenstand mehr, als ob er aus der "Vorwärts-Schleife" nicht mehr rauskäme und ich weiß nicht warum!
    Wenn ich die Lenkung rausnehme und ihn also nur vorwärts oder rückwärts fahren lasse, funktioniert alles und er reagiert auch immer wieder auf einen Gegenstand.

    Ich finde den Fehler also nicht, kann mir jemand helfen?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Falls du an PORTD.6 einen Pullup aktiv kast, wird der mit PORTD=0b00000000 deaktiviert.
    Disclaimer: none. Sue me.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.10.2005
    Beiträge
    19
    Deswegen habe ich ja nur PORD=0b00000 gesetzt. Also nur 6 statt 8 Nullen.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    30
    Beiträge
    826
    also ich kenn mich damit nciht ganz genau, aber mit einem = wird eigentlcih immer das komplette Register überschrieben, oder?

    Dann versuch es doch lieber mit der Schreibweise:

    PORTD|=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|( 1<<6);
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    PORTD=0b000000; //alle Ausgänge des Chips aus

    0b... gibt es in winavr-c nicht , nur hexa oder deci.
    mfg pebisoft

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    28.04.2004
    Ort
    Nähe Köln
    Alter
    51
    Beiträge
    247
    Jo stimmt.

    Kommt erst in der nächsten Version, die bald kommen soll

    MFG
    Dieter

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2005
    Ort
    Köln
    Beiträge
    14
    mit dem neuen AVR-Studio mit C-editor und GCC Compiler geht PORTD=0b000000 ohne Probleme. Unter WINAVR müsste es somit eigentlich auch funktionieren. Meines Wissens ist diese Konstruktion nur unter Linux GCC nicht möglich. Ich werde das aber interessehalber nochmal prüfen.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    13.10.2005
    Beiträge
    19
    Ich benutze eh kein WinAVR. Mit einer anderen Schreibweise geht es auch nicht.
    Wenn ich z.B. statt PORTD=0b000000 PORTD=0b11000000 oder PORTD.4=0 schreibe, dann bleibt er in der Rückwärts-Schleife und beginnt nicht mehr danach vorwärts zu fahren.
    Was ist da los?

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2005
    Ort
    Köln
    Beiträge
    14
    also while (PIND.6==0) geht auch nicht. Versuchs mal
    mit while ( !(PIND & (1 << 6)) ) ;, das ist C-konform.

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zitat Zitat von pebisoft
    PORTD=0b000000; //alle Ausgänge des Chips aus

    0b... gibt es in winavr-c nicht , nur hexa oder deci.
    mfg pebisoft
    Doch, vor GCC 3.4 ging das. Falls man es haben will und nicht auf ne neue GCC Version warten will, oder nicht ständig neue Versionen aufspielen mag, dann geht's so: https://www.roboternetz.de/phpBB2/ze...=125217#125217
    Disclaimer: none. Sue me.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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