-
        

Ergebnis 1 bis 5 von 5

Thema: Ausro.c Motoransteuerung verstanden?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214

    Ausro.c Motoransteuerung verstanden?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo ich kämpfe immer noch mit C. In der ASURO.c habe ich folgende Zeile gefunden:

    PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;

    nehmen wir einmal an left_dir wäre 1 (FWD => vorwärts)
    und PORTD 00100000

    Dann ergibt: ((1 << PD4) | (1 << PD5)) 00110000

    Dies mit PORTD &~ verknüpft ergibt
    PortD 00100000
    und nicht (&~) 00110000
    ergibt 11011111

    nun noch oder 1 => erbibt das: 11111111

    Das kann ja nicht das gewünschte Ergebnis sein!?
    Kann mir jemand erklären wo mein Denkfehler ist?

    Zum ASURO eine Zusatzfrage: Die Motorbrücke funktioniert doch so wie die vom RN-Control. Das würde bedeuten, dass -will man vorwärts fahren - P4 1 sein muss und D5 0 sein soll. Richtig?

    Gruß
    Stefan

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




    Dann ergibt: ((1 << PD4) | (1 << PD5)) 00110000
    OK

    Dies mit PORTD &~ verknüpft ergibt
    PortD 00100000
    Falsch. Es wird PORTD in eine temp. Variable gespeichert, mit dem negierten 0011 0000 UND verknüpft ergibt --> 0000 0000 .

    Also temp = PORTD , TEMP = TEMP AND 11001111 --- > temp = 0

    Jetzt wird temp mit left_dir ODER Verknüpft und dann wieder auf PORTD ausgegeben.

    Also werden die Bits PD4 & PD5 immer gelöscht und entsprechend von Wert left_dir oder right_dir gesetzt.

    Normalerweise sollte der Wert von left_dir = 0010 0000 sein und von right_dir = 0001 0000 sein oder umgekehrt.



    MFG
    Dieter

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214
    Vielen Dank.
    Also erst negieren dann UND anwenden. ok
    Aber hier kommt dann immer (je nach Richtung) bei FWD (1) 0011 0000 und RWD (0)
    0000 0000 raus?
    Dh die Brückenschaltung beim ASURO unterscheidet sich von RN-Control?

    Und das " | left_dir; " wird nur auf die beiden veränderten Bits angewendet?
    Warum? Das OR bezieht sich doch auf PORTD oder nicht?
    Gruß
    Stefan

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


    Code:
    Und das " | left_dir; " wird nur auf die beiden veränderten Bits angewendet?
    Warum? Das OR bezieht sich doch auf PORTD oder nicht?
    Kann man so nicht sagen, kommt halt auf die Werte von left_dir an.

    TEMP = TEMP AND 11001111

    sorgt ja dafür, das nur die Bits 4 und 5 gelöscht werden und die anderen Bits unverändert bleiben.

    Von daher macht es ja nur Sinn, für Werte von left_dir und right_dir, die gerade diese Bits ändern.

    Kenne den ASURO nicht, von daher weiß ich nicht, wie die Brücke angesteurt wird.

    MFG
    Dieter

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    22.11.2003
    Beiträge
    214
    Vielen Dank!
    Um das ASURO spezifische zu verstehen Poste ich mal im anderen Forum...
    Gruß Stefan

Berechtigungen

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