Falls du an PORTD.6 einen Pullup aktiv kast, wird der mit PORTD=0b00000000 deaktiviert.
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?
Falls du an PORTD.6 einen Pullup aktiv kast, wird der mit PORTD=0b00000000 deaktiviert.
Disclaimer: none. Sue me.
Deswegen habe ich ja nur PORD=0b00000 gesetzt. Also nur 6 statt 8 Nullen.
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
PORTD=0b000000; //alle Ausgänge des Chips aus
0b... gibt es in winavr-c nicht , nur hexa oder deci.
mfg pebisoft
Jo stimmt.
Kommt erst in der nächsten Version, die bald kommen soll
MFG
Dieter
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?
also while (PIND.6==0) geht auch nicht. Versuchs mal
mit while ( !(PIND & (1 << 6)) ) ;, das ist C-konform.
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#125217Zitat von pebisoft
Disclaimer: none. Sue me.
Lesezeichen