-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: Morsecode und Bitverschiebung

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330

    Morsecode und Bitverschiebung

    Anzeige

    Hallo,

    Bräuchte wieder mal etwas Hilfe:

    Um Floats zu umgehen rechne ich meinen ADC*30805

    z.B. bei spannung=1023*30805 -> 31513515


    Mit spannung=spannung<<4;
    müsste es dann doch 3151 heißen, oder??
    Also das Komma wird verschoben und die Stellen gehen verloren?

    Also habe ich 3151 mV gemessen. Soweit richtig?


    Dann würde ich nochmal sp.=sp.<<1
    Dann kommt mir 315 raus, das würde ich gern mit Leds morsen....

    Kann man irgendwie die Hunderter, Zehner, Einser auslesen, ohne mit floats zu arbeiten??



    Vielen Dank im Vorraus!!

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Ich bin ja kein C Spezialist, eher C-Dummi aber "<<4" sollte
    4x links schieben bedeuten. Damit ist NICHT das "," gemeint!

    Jedes links schieben verdoppelt den Wert , jedes >> rechts schieben halbiert den Wert.

    00000001
    <<1
    00000010
    <<1
    000000100...u.s.w.

    Gruß Richard

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Das komme kann man immernoch mit x * 10 um eine Stelle nach rechts und mit x / 10 um eine Stelle nach links schieben.

    Kann man irgendwie die Hunderter, Zehner, Einser auslesen, ohne mit floats zu arbeiten??
    Ja, mit Bitmasken: x & 0x1 liefert dir das erste Bit, x & 10 das 2. usw.
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Das Komma kann man immernoch mit x * 10 um eine Stelle nach rechts und mit x / 10 um eine Stelle nach links schieben.
    Naja, bei mir funktioniert ja das float nicht, daher kann ich wohl kaum /10 rechnen... Bin zwar dabei das AVR-Studio zu erlernen, aber bis dahin hätte ich es gerne mal so gemacht...

    Zu den Bitmasken:
    0x1 sieht mir nach Hexadezimal aus, muss das noch prüfen... Denn verstehen tu ichs leider noch nicht, was da passiert...

    Achso, das ist binär.. 0x11 ist dann 3?

    also i=x&(00000001) ?? wobei i=einerstelle, x=Zahl

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Oh sry, das muss 0b1, 0b10, usw. heißen, nicht 0x. 0x Ist Hexadezimal 0b binär, was du hier auch brauchst. Du kannst bei Integern genauso durch 10 teilen, dann wird alles nach rechts verschoben und die letzte Stelle fällt eben weg.
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von _R2D2
    Das komme kann man immernoch mit x * 10 um eine Stelle nach rechts und mit x / 10 um eine Stelle nach links schieben.

    Kann man irgendwie die Hunderter, Zehner, Einser auslesen, ohne mit floats zu arbeiten??
    Ja, mit Bitmasken: x & 0x1 liefert dir das erste Bit, x & 10 das 2. usw.
    Mit Multiplizieren oder dividieren Kann man beinahe jede gewünschte Zahl "einstellen". Mit Bit schieben kann man nur verdoppeln oder Halbieren = x2 oder/2 Pro <<1.2.3.....
    also 1,4,8,16,32......3,5,6,7 kann man mit <<(x) nicht erreichen.

    5x10 = 50 ist Dezimal damit kannst Du natürlich jede belibige Integerzahl darstellen.

    Gruß Richard

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Du kannst bei Integern genauso durch 10 teilen, dann wird alles nach rechts verschoben und die letzte Stelle fällt eben weg.
    Ah, danke. Das ist schon mal sehr gut...

    Und als Quellcode?

    Kann ich da dann:

    Code:
    intger zahl = 1234;
    
    einerstelle=zahl&0b1
    Hoffe das stimmt soweit???

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das & und der << operator sind für die Binärdarstellung. Man bekommt in dem Porgramm oben schon die einerstelle, aber die aus der Binärdarstellung, also eine 1 oder 0. Für die Dezimaldarstellung müßte man schon mit Modulo (%) und Division arbeiten. Alternativ gibt es die Funktion atoi() aus Stdlib, um von Integer in einen String zu wandeln.

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Alternativ gibt es die Funktion atoi() aus Stdlib, um von Integer in einen String zu wandeln.
    Aber einen String brauche ich doch nicht, sonern eine verwertbare Zahl.

    Dann gibt es eine schleife, die eine Led blinken lässt und die läuft ''einerstelle'' - mal. (1,2,3,...9)


    Man bekommt in dem Porgramm oben schon die einerstelle, aber die aus der Binärdarstellung, also eine 1 oder 0. Für die Dezimaldarstellung müßte man schon mit Modulo (%) und Division arbeiten.
    Wie das?

    12345 dann kann ich zb. 45 wegoperieren, aber 12 kann ich nicht mittels Bitverschiebung streichen...

    einerstelle=(%spannung)&(%0b1) kann es so hinhauen? Hab da sonst absolut keine Idee, wie man das bewerkstelligen könnte...

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    23
    Beiträge
    656
    Ein komplett neuer Lösungsansatz:
    Code:
    int x = 12345;
    int y = x % 10; //= 5
    x /= 10; //x = 1234
    y = x % 10; //= 4
    x /= 10; //x = 123
    y = x % 10; //= 3
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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