- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: Eingänge in Zahl umwandeln

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329

    Eingänge in Zahl umwandeln

    Anzeige

    E-Bike
    Hallo,

    3 Eingänge stehen auf 0 oder 1. Diese sollen zusammen eine Zahl zwischen 0 und 7 ergeben.
    Pin 1 = einser Stelle
    Pin 2 = zweier Stelle
    Pin 3 = vierer Stelle

    wie frage ich die 3 Pins jetzt am schönsten ab, um die Zahl zu erhalten ?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.12.2007
    Beiträge
    280
    naja ich würde sagen:

    Code:
    zahl = 0
    if pin*.1 = 0 then
       zahl = zahl + 1
    end if
    if pin*.2 = 0 then
       zahl = zahl + 2
    end if
    if pin*.3 = 0
       zahl = zahl +4
    end if
    Kann gut sein, dass es auch einfacher geht, aber das wäre für mich die einfachste lösung!

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Kann gut sein, dass es auch einfacher geht
    ...korrekt:

    Code:
    Dim Zahl as byte
    Zahl = PinA                            'oder PinB, C oder D, je nach verwendetem Port
    Zahl = Zahl AND &B00001110         'Löscht die Bits 7,6,5,4 und 0 des Bytes durch UND-Verknüpfung mit 0
    Shift Zahl, Right, 1
    ...fertich


    Und wenn Du nicht die Pins 1, 2 und 3 verwendest sondern 0, 1 und 2, kannst Du Dir den Shift-Befehl sogar auch noch sparen!

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    50
    Beiträge
    377

    Re: Eingänge in Zahl umwandeln

    Zitat Zitat von guenter1604
    wie frage ich die 3 Pins jetzt am schönsten ab, um die Zahl zu erhalten ?
    Hallo guenter1604!

    z.B. so:
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    
    
    Dim My_bytevar As Byte
    
    
    My_bytevar.0 = Pind.5
    My_bytevar.1 = Pinb.7
    My_bytevar.2 = Pinb.2
    
    
    Print My_bytevar
    
    
    End
    mfg
    Gerold
    :-)

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Gerold,

    das sieht ja richtig hübsch aus.

    Wo kann ich den Punkt noch einsetzten, gibts eine gute Dokumentation ?

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    50
    Beiträge
    377
    Zitat Zitat von guenter1604
    Wo kann ich den Punkt noch einsetzten
    Hallo guenter1604!

    Das funktioniert so gut wie immer, wenn du auf ein einzelnes Bit zugreifen musst.

    Z.B. beim Zugriff auf einen IO-Register (PORT/PIN), wenn du nur den Status eines einzelnen Pins brauchst oder setzen möchtest.

    Oder wenn du ein einzelnes Bit eines Registers setzen oder auslesen möchtest. Du kannst dieses Bit sogar dynamisch, also über eine Variable ansprechen.

    Sinnloses Beispiel, aber es demonstriert was ich damit meine:
    Code:
    FOR I = 0 to 7
       PORTD.I = 1
    NEXT I
    Du kannst auch Konstanten verwenden um darauf zuzugreifen:
    Code:
    ACSR.ACBG = 1      'Bandgap-Referenzspannung einschalten
    SFIOR.ACME = 1     'Multiplexer einschalten
    Led1 = ACSR.ACO     'Wert des Analog-Comparators abfragen
    Wie ich es in diesen Beispielen zeige: http://halvar.at/elektronik/kleiner_...og_comparator/

    Welche Konstanten es gibt, steht im jeweiligen AVR-Datenblatt. Und die Konstanten stehen in den zum µC gehörenden DAT-Dateien definiert. Die Konstanten für den ATmega8 stehen in der Datei *m8def.dat* im Bascom-Verzeichnis.

    mfg
    Gerold
    :-)

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Der Punkt zeigt AFAIK nur an, dass man ein bestimmtes Byte haben will.
    Also var.n gibt bei Variable var das Bit n an.

    var = var AND &b00100000 ist das gleiche wie var.5 = 1

    EDIT: Druckfehler ausgebessert; thx für den Hinweis python_rocks.
    #ifndef MfG
    #define MfG

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    59
    Beiträge
    1.080
    Zitat Zitat von Jaecko
    var = var AND &b00100000 ist das gleiche wie var.5 = 1
    äh ... ist das Folgende nicht "etwas richtiger"? :
    var = var OR &b00100000 ist das gleiche wie var.5 = 1

    var = var AND &b00100000 läßt nur bit 5 unverändert, während alle anderen bits gelöscht werden.

    möchte man hingegen nur bit 5 löschen, so geht das mit
    var = var AND &b11011111.

    Bitte um ein "dudu", wenn ich mich irre ... es ist warm draussen und meine kopfinterne Lüftersteuerung haut nicht so ganz hin ...

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    ärgs...mist...2 Fehler in 1 Beitrag... stimmt, is wirklich warm draussen.
    Klar muss es OR sein...
    #ifndef MfG
    #define MfG

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Danke für eure Hilfe!

Berechtigungen

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

12V Akku bauen