- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Zustand der Ports nach verlassen von Schleife festlegen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86

    Zustand der Ports nach verlassen von Schleife festlegen

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    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.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    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 !

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86
    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

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    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.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    30.09.2005
    Ort
    Harzrand
    Alter
    41
    Beiträge
    44
    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

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86
    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

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    30.09.2005
    Ort
    Harzrand
    Alter
    41
    Beiträge
    44
    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

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    18.08.2005
    Beiträge
    86
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test