mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Displayansteuerung 3line/9bit


Autor: Alexander Simon (Firma: keine) (schickmaster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bin neu hier und weiss nicht, ob ich richtig bin in diesem thread mit 
meinem thema, aber ich versuchs mal;)

Also muss ein byte array so manipulieren, dass ich ein scheinbares "1bit 
+8bit" datenformat bekomme. also rutscht nach jedem
byte die ganze geschichte um 1 mehr nach hinten, was in einem weitern 
array aufgefangen wird. das amcht die
ganze sache mit dem shiftcommand etwas undurchsichtig.

Beispiel, wie es sein sollte:
die 8 bit nutzdaten:

01111011bin = 123dez
00010000bin = 32dez
11110101bin = 245dez

mit einer 1(D/XC) vorab für jedes Byte verschiebt sich das ganze system 
so:

10111101bin = 189dez
11000100bin = 196dez
111110bin = 62dez
10100000bin =160dez(3 ersten bit sind die lezten 3 bit von 245dez, quasi 
neues array wegen den zusätlichen einsen)

real hab ich ca 200byte nutzdaten im array, was sich mit ner führenden
1 auf 200byte plus 25 byte führende 1 vergrößert.

ich stehe da grade etwas aufm schlauch. vll hat einer einen tipp, wie
ich da ran gehen kann? Dafür wäre ich sehr dankbar.

Eigentlich bezieht sich das mehr auf c#, aber vll hat hier
ja jemand damit erfahrung, wie ich mein array soweit manipulieren könnte

grussa alex

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Alexander Simon (Firma: keine) (schickmaster)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, habs gelöst. warscheinlich nicht grade auf die sauberste art und 
weiste, aber es läuft.
,,...abgesehen davon bin ich kein vollblut-inf;-).
muss zugeben, hat mich ne menge nerven gekosten, aber man auch auch ne 
menge gelernt und man hat sogar
spass dran, wenn es am ende geht!!
Leider war es mit den üblichen Bitoperationen nicht getan.
gruss alex



C#:
static class Program
    {

        static void Main()
        
        {//Testarray
            byte[] byteArray = new byte[] { 1, 255, 1, 255, 1, 255, 1, 255 };

           string binstring = ByteToString(byteArray);
           Console.WriteLine("binstring D/XC: " + binstring);
           bitstring(binstring);
                     
      
        }


        //Wandelt byte array in binären String 1 + 8bit
        private static string ByteToString(byte[] ByteArray)
        {
            System.Text.StringBuilder sb = new StringBuilder();
            int i = 0;
            foreach (byte b in ByteArray)
            {
                sb.Append(Convert.ToString(b, 2).PadLeft(9, '0'));
                string s = "1";//wird dann 1  
                sb[9 * i] = s[0];
                i++;
            }
            return sb.ToString();
        }

        //zerlegt 9bit string(1+8bit) in 8 bitblöcke
        private static int bitstring(string str)
        {
           int i = 0;
           int s = 0;
           int count = 0;
           string bitstring = "0";
            //Array größe anpassen:!!
           byte[] newbyteArray = new byte[9];

           for (i = 0; i < str.Length; i = i + 8)
           {
               
               bitstring = "" + str[0 + i] + str[1 + i] + str[2 + i] + str[3 + i] + str[4 + i] + str[5 + i] + str[6 + i] + str[7 + i];
               s = bintodec(bitstring);
               byte b = (byte)s;
               Console.Write(b + "\n");
               newbyteArray [count] = b;
               count++;
           }                                               
           
           Console.WriteLine(newbyteArray.Length);
           foreach (byte val in newbyteArray) { Console.WriteLine("aus array" + val); }
           return s;
        }

        // Umerechung von 8bit bin in dec
        private static int bintodec(string str)
        {
            int a = 0; int b = 0; int c = 0; int d = 0; 
            int e = 0; int f = 0; int g = 0; int h = 0;
            string bin0 = "0";
           
            if (str[0] == bin0[0]) { a = 0; } else { a = 128; }
            if (str[1] == bin0[0]) { b = 0; } else { b = 64; } 
            if (str[2] == bin0[0]) { c = 0; } else { c = 32; } 
            if (str[3] == bin0[0]) { d = 0; } else { d = 16; }
            if (str[4] == bin0[0]) { e = 0; } else { e = 8; }
            if (str[5] == bin0[0]) { f = 0; } else { f = 4; } 
            if (str[6] == bin0[0]) { g = 0; } else { g = 2; }
            if (str[7] == bin0[0]) { h = 0;}  else { h = 1; }

            int val = (a + b + c + d + e + f + g + h);            
            return val;
       }
      
    }

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.