-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Bitfolge drehen

  1. #1

    Bitfolge drehen

    Anzeige

    Morgen
    kann man irgendwie eine Bitfolge drehen?

    Bitfolge1: B1 B2 B3 B4 B5 B6 B7
    soll zu
    Bitfolge2: B7 B6 B5 B4 B3 B2 B1
    werden

    Das ganz sollte mathematisch doch irgendwie zu machen sein, ich komme nur nicht wirklich drauf.

    Beispiel:
    0111111 -> 1111110 | 126 -> 63
    1001000 -> 0001001 | 9 -> 72
    usw.


    Gruß
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Ich glaub nicht, dass da ein verwertbarer (sinnvoller) mathematischer Ansatz existiert. Es korreliert zwar jedes In-Bit mit seinem Out-Bit, aber jedes in anderer Weise.
    (ich lass mich aber gerne belehren)

    Ich würde mir da mit einem kurzen Inline-Assembler helfen (18 maschinen zyklen). Viel billiger is nix.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

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

    Re: Bitfolge drehen

    Zitat Zitat von BoondockDuck
    kann man irgendwie eine Bitfolge drehen?
    Hallo BoondockDuck!

    Das ist jetzt nicht sonderlich ausgeklügelt, aber ich glaube es macht genau das was du haben willst:
    Code:
    $regfile = "M8def.dat"
    $crystal = 8000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    $baud = 4800
    
    Declare Function Reversed(byval Source As Byte) As Byte
    
    
    Print Reversed(&B00000001)       '=128
    
    End
    
    
    Function Reversed(byval Source As Byte) As Byte
       Local Dest As Byte
       Dest.0 = Source.7
       Dest.1 = Source.6
       Dest.2 = Source.5
       Dest.3 = Source.4
       Dest.4 = Source.3
       Dest.5 = Source.2
       Dest.6 = Source.1
       Dest.7 = Source.0
       Reversed = Dest
    End Function
    mfg
    Gerold
    :-)

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Stimmt schon, der Code wäre ja korrekt.
    Nur: wenn man weiss, was für ein Massaker der Bascom mit dem Bit- fragen und -setzen veranstaltet, sollte man sich das überlegen.
    http://www.roboternetz.de/wissen/ind..._Set_.26_Clear
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Danke Gerold
    dein Code läuft ganz gut, auch wenn es schon etwas die sprichwörtliche Kanone auf Spatzen ist


    Jetzt zeigen meine Matrizen die Buchstaben auch endlich richtigrum an
    Davor waren Oben und Unten verdreht. Warum genau bin ich nicht so sicher... Oder es ist einfach so dass die Schaltung einen die Zeichen "andersrum" ausgibt. An der Verkabelung liegts auf jeden Fall mal nicht.


    Das ganze ist eine Laufschrift, die beiden Matrizen muss man sich nebeneinander angeordnet vorstellen.

    Ich werde mir allerdings überlegen ob ich nicht schlichtweg den Zeichensatz für jedes Schriftzeichen anpasse.
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    .. für jedes Schriftzeichen anpasse..
    IMHO das Beste, was du machen kannst. Bei manchen solchen Datasheets ist die ZeichensatzTabelle im Anhang dabei, ich werd mal nachsehen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.08.2007
    Ort
    Oberhofen im Inntal (Tirol)
    Alter
    43
    Beiträge
    377
    Zitat Zitat von BoondockDuck
    auch wenn es schon etwas die sprichwörtliche Kanone auf Spatzen ist
    Hallo BoondockDuck!

    Zuerst muss das Programm funktionieren. Und meinstens funktionieren die Programme schnell genug. Erst wenn man erkennt, dass das Programm nicht schnell genug ist, dann sucht man sich die ärgsten Engstellen raus und optimiert genau diese. So opfert man nicht unnötige Zeit für Optimierungen, die in den meisten Fällen nicht notwendig gewesen wären.

    mfg
    Gerold
    :-)

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,

    Ich werde mir allerdings überlegen ob ich nicht schlichtweg den Zeichensatz für jedes Schriftzeichen anpasse.
    Diese Arbeit würde ich mir nicht machen,
    was ist wenn Du den Zeichensatz doch auf dem Kopf brauchst ?
    Vor dem Problem habe ich mit meiner Propelleruhr gestanden, wo ich was im oberem und im unterem Teil darstellen wollte.
    Klar mußte ich die Zeichen drehen und sowas ist sehr schnell in Software erledigt.
    Hier mal etwas Inlineassembler:
    Code:
    asm volatile (
    	    
    	    "ldi %2,8"          "\n\t"
    	    "0:"                "\n\t"
    	    "lsr %0"            "\n\t"
                "rol __tmp_reg__"   "\n\t"
                "dec %2"            "\n\t"
                "brne  0b" "\n\t"
                "mov %0,__tmp_reg__" "\n\t"
    	    : "=a" (tmp)
    	    : "0" (tmp), "a" (count) 
    );
    Noch schneller(aber nicht Flashsparender) geht es mit 8 lsr und 8 rol hintereinander.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    10.10.2005
    Ort
    Nähe Biberach a.d. Riss
    Alter
    47
    Beiträge
    44
    Da fällt mit jetzt nur das Einerkomplement ein.
    Bascom kennt noch den "Toggle" - aber der geht glaub nur für die Ports.
    Im AVR-Studio gibt dafür eine Assemblerdirective die heisst
    ! Logical Not
    ~ Bitwise Not
    Müsstet also $Asm in Dein Proggi einbinden

    ....

  10. #10
    Zitat Zitat von PicNick
    .. für jedes Schriftzeichen anpasse..
    IMHO das Beste, was du machen kannst. Bei manchen solchen Datasheets ist die ZeichensatzTabelle im Anhang dabei, ich werd mal nachsehen.
    Konnte ich bis jetzt noch nicht rausfinden, aber wenn du mal schauen magst danke


    Zitat Zitat von python_rocks
    Zuerst muss das Programm funktionieren. Und meinstens funktionieren die Programme schnell genug. Erst wenn man erkennt, dass das Programm nicht schnell genug ist, dann sucht man sich die ärgsten Engstellen raus und optimiert genau diese. So opfert man nicht unnötige Zeit für Optimierungen, die in den meisten Fällen nicht notwendig gewesen wären.
    Ja du hast schon recht
    Und so dramatisch ist es auch nicht, denn dein Programmvorschlag wird nur "einmal" durchlaufen und dann läuft die Laufschrift ohne nochmals Bits zu drehen.
    D.h. ein String wird zerlegt. Pro zeichen werden 6 Datensätze aus der Tabelle gelesen und bei jedem dieser Sätze werden 7 von 8 Bit gedreht.
    Das ganze kommt in ein Array und gut ist.

    Bis jetzt ist es noch nicht notwendig den Code anzupassen. Sollte ich die Laufschrift aber ernsthaft mal größer aufbauen überlege ich mir das nochmal.
    Ist leider nicht gerade billig da es über den Max7221 läuft. 4 Stück zum Spielen habe ich von Maxim bekommen, aber es sollten ja schon ein paar mehr sein.

    Es war aber eh primär für mich damit ich das Laufschriftprojekt endlich mal durchziehe. (Ich spiel damit seit vielen vielen Monaten rum ohne mal richtig angefangen zu haben)
    nit resigniert nur reichlich desillusioniert
    e bessje jet hann ich kapiert

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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