-
-
Zustand der Ports nach verlassen von Schleife festlegen
Hallo zusammen,
wenn ich eine Schleife verlasse, bleiben die Ports in dem Zustand, wie sie vor Verlassen waren.
Dazu mess gesagt werden, das in der Schleife eine LED via PWM ständig hoch und runtergedimmt wird.
Durch welchen Befehl kann man denn nun erzwingen, das die LED nicht ihren letzten Helligkeitszustand beim verlassen der Schleife behält sondern ganz aus ist???
Contr. mega64
Danke und Grüße
popi
-
Erfahrener Benutzer
Robotik Einstein
Hallo,
wenn eine Schleife verlassen wird, egal ob normal beendet, weil die Bedingung erfüllt wurde, oder durch Abbruch, wird direkt mit dem ersten Befehl nach der Schleife weitergemacht, hier könntest Du einfach die Ports so setzen wie Du es haben willst.
-
ich habe das mit dem Zurücksetzen ja probiert, oder mache ich was falsch???
if (aktion == "nix") {PORTB = (1 >> PB4) | (1 >> PB5) | (1 >> PB6) | (1 >> PB7);}
Danke und Gruß
popi
-
Erfahrener Benutzer
Robotik Einstein
Was verwendest Du genau für eine Programmiersprache ?
Wo steht denn das If im bezug zur Schleife ?
Ein Fehler ist auf jeden Fall mal, das man die eins (1) nicht nach rechts >> [-X
sondern nach links schiebt <<, um das Bit zu erreichen, das man haben will !
-
okay, was habe ich denn missverstanden ?????
ein Bit nach links schieben heisst doch "setzen"
Aber ich will doch das Bit löschen?
Also eins nach links nachschieben?
Habs auf jeden Fall probiert und geht leider nicht.
Der Bezug: liegt im restlichen Code versteckt.
Ich dachte, ich poste nur mal die Hauptfrage, anstatt ein haufen Code, wo man sich erst einarbeiten muss... (wollts Euch nur leicht machen)
Liebe Grüße
popi
-
Erfahrener Benutzer
Robotik Einstein
hui !
"nach links schieben" heisst einfach nur "nach links schieben",
und ein Bit setzen, bedeutet, es auf eins (1) zu machen,
beim Bit löschen, wird es auf 0 gemacht.
Ergibt die Begriffe Set und Clear (oder auch Reset).
Du hast Doch schon mal in einem Thread gefragt:
https://www.roboternetz.de/phpBB2/ze...=189490#189490
und u.a. PicNick hat das erklärt, wie das mit der schieberei hinhaut.
Und zur Sicherheit nochmal die logischen AND und OR betrachten, damit Du weisst, warum das so ist mit den nullen und einsen.
Warum ich nach dem Bezug zur Schleife gefragt habe ?
Du wolltest eine Schleife abbrechen oder sowas i.d. Richtung, deshalb muss man halt wissen wo die Abfrage ist, und was das mit der Schliefe zu tun hat.
-
hi ho...
mal ganz abgesehen von der schleife...
bit setzen: PORTX |= (1 << PIN);
bit löschen: PORTX &= ~(1 << PIN);
oder hab ich jetz irgendwas überlesen...?
mfg
-
Ihr seid die Profid, was soll ich sagen...
Aber verstehen tue ich das noch immer nicht.
Bisher habe ich immer Bits in Registern mit PORTx = (1 << Pxn) und gelöscht mit PORTx = (1 >> Pxn) und es hat geklappt.
Was ist der Unterschied zwischen meiner Schreibweise und
bit setzen: PORTX |= (1 << PIN);
bit löschen: PORTX &= ~(1 << PIN);
Also man sieht ja im Syntax den Unterschied, aber warum bewirkt es das gleiche.
Habe ich nur Glück gehabt, bleiben bei mir Zustände undeffiniert und hängt sich der Controller mal auf?
Würde mich mal über eine Erklärung freuen.
Grüße
popi
-
hi ho...
ich bin ja auch noch recht frisch, was die programmierung von atmegas betrifft. vom 89cxx51 bin ich eine ganz andere schreibweise gewohnt.
z.b.
SBIT Led 0xB0;
...
...
...
Led = 1;
Led = 0;
also viel simpler wie ich finde. auf jeden fall muss ich mich da auch noch etwas reinfuchsen. aus diesem grunde habe ich gestern einfach mal´n bissl rumprobiert und mir folgendes aufgeschrieben:
PORTB &= 1 << 2; // Alle Bits bis auf 2 löschen
PORTB &= (1 << 2); // Alle Bits bis auf 2 löschen
PORTB &= ~1 << 2; // Alle Bits von 0 bis einschließlig 2 löschen
PORTB &= ~(1 << 2); // Bit 2 löschen
PORTB |= (1 << 2); // Bit 2 setzen
PORTB |= 1 << 2; // Bit 2 setzen
PORTB |= ~1 << 2; // Bit 7 bis 3 setzen
PORTB |= ~(1 << 2); // Alle Bits außer Bit 2 setzen
PORTB ^= (1 << 2); // Bit 2 toggeln
PORTB ^= 1 << 2; // Bit 2 toggeln
PORTB ^= ~1 << 2; // Bit 7 bis 3 toggeln
PORTB ^= ~(1 << 2); // Alle Bits außer 2 toggeln
vielleicht hilft es ja etwas...vor allem hoffe ich, daß das alles soweit richtig ist.
mfg
-
Vielen Dank...
Das ist doch mal eine Antwort ;o)
Danke für Deine Mühe, habe mir das sofort in meine Formelsammlung übertragen.
Aber auch Du benutzt das =-Zeichen niht alleine, nur mir <, | und ^ sogar.
Komisch, das ich das so verwende, ich würde gerne wissen, wo ich das herhab, bestimmt auch aus einem Forum ;o)
Vielen Dank nochmal...
Hat mir sehr geholfen. Muss mir mal Zeit nehmen und auch einiges ausprobieren..
Liebe Grüße
popi
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen