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


von Alexander S. (Firma: keine) (schickmaster)


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

von Falk B. (falk)


Lesenswert?


von Alexander S. (Firma: keine) (schickmaster)


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#:
1
static class Program
2
    {
3
4
        static void Main()
5
        
6
        {//Testarray
7
            byte[] byteArray = new byte[] { 1, 255, 1, 255, 1, 255, 1, 255 };
8
9
           string binstring = ByteToString(byteArray);
10
           Console.WriteLine("binstring D/XC: " + binstring);
11
           bitstring(binstring);
12
                     
13
      
14
        }
15
16
17
        //Wandelt byte array in binären String 1 + 8bit
18
        private static string ByteToString(byte[] ByteArray)
19
        {
20
            System.Text.StringBuilder sb = new StringBuilder();
21
            int i = 0;
22
            foreach (byte b in ByteArray)
23
            {
24
                sb.Append(Convert.ToString(b, 2).PadLeft(9, '0'));
25
                string s = "1";//wird dann 1  
26
                sb[9 * i] = s[0];
27
                i++;
28
            }
29
            return sb.ToString();
30
        }
31
32
        //zerlegt 9bit string(1+8bit) in 8 bitblöcke
33
        private static int bitstring(string str)
34
        {
35
           int i = 0;
36
           int s = 0;
37
           int count = 0;
38
           string bitstring = "0";
39
            //Array größe anpassen:!!
40
           byte[] newbyteArray = new byte[9];
41
42
           for (i = 0; i < str.Length; i = i + 8)
43
           {
44
               
45
               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];
46
               s = bintodec(bitstring);
47
               byte b = (byte)s;
48
               Console.Write(b + "\n");
49
               newbyteArray [count] = b;
50
               count++;
51
           }                                               
52
           
53
           Console.WriteLine(newbyteArray.Length);
54
           foreach (byte val in newbyteArray) { Console.WriteLine("aus array" + val); }
55
           return s;
56
        }
57
58
        // Umerechung von 8bit bin in dec
59
        private static int bintodec(string str)
60
        {
61
            int a = 0; int b = 0; int c = 0; int d = 0; 
62
            int e = 0; int f = 0; int g = 0; int h = 0;
63
            string bin0 = "0";
64
           
65
            if (str[0] == bin0[0]) { a = 0; } else { a = 128; }
66
            if (str[1] == bin0[0]) { b = 0; } else { b = 64; } 
67
            if (str[2] == bin0[0]) { c = 0; } else { c = 32; } 
68
            if (str[3] == bin0[0]) { d = 0; } else { d = 16; }
69
            if (str[4] == bin0[0]) { e = 0; } else { e = 8; }
70
            if (str[5] == bin0[0]) { f = 0; } else { f = 4; } 
71
            if (str[6] == bin0[0]) { g = 0; } else { g = 2; }
72
            if (str[7] == bin0[0]) { h = 0;}  else { h = 1; }
73
74
            int val = (a + b + c + d + e + f + g + h);            
75
            return val;
76
       }
77
      
78
    }

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.