Forum: Mikrocontroller und Digitale Elektronik Bitmanipulation


von Hajo (Gast)


Lesenswert?

Hallo,

ich arbeite mit WINAVR und möchte die Schrift auf dem Display
doppelt so groß darstellen. Die Font sind 8x12.
Dabei soll aus einem Byte zwei Byte werden, in dem dann jedes Bit 
doppelt
erscheint.
Z.B.  Byte ist: 10010110
   soll 2 Byte: 11000011 00111100 werden.
Das ist meine Idee um die Schriftgröße zu verdoppeln.
Bisher ist mir noch keine Lösung eingefallen.
Über jede Hilfe zur Lösung in "C" würde ich mich sehr freuen.

Gruß Jochen

von gelegenheitsdieb (Gast)


Lesenswert?

>Bisher ist mir noch keine Lösung eingefallen.

Just try harder

von Karl M. (Gast)


Lesenswert?

Hallo Hajo,

ein Byte hat 8 Bit, also kommt man mit 8 if-Abfragen in C an's Ziel. 
Oder?

In AVR Assembler ist das dann noch etwas kürzer.

von Falk B. (falk)


Lesenswert?

>   soll 2 Byte: 11000011 00111100 werden.
>Das ist meine Idee um die Schriftgröße zu verdoppeln.
1
unt8_t data_small;
2
uint16_t data_big;
3
4
data_big = 0;
5
if (data_small & 0x80) data_big |= 0xC000;
6
if (data_small & 0x40) data_big |= 0x3000;
7
8
 . . .

von Karl M. (Gast)


Lesenswert?

Hier ist eine klare Bauanleitung
1
uint8_t src, dest1, dest2;
2
dest1 = dest2 = 0;
3
4
// first check: Bit7
5
if (src & 0x80) {
6
 dest1 |= 0xc0;
7
}
8
9
// more code !
10
11
// last check: Bit0
12
if (src & 0x01) {
13
 dest2 |= 0x03;
14
}

von Hajo (Gast)


Lesenswert?

Hallo,

vielen Dank für die schnellen Antworten. Das werde ich gleich 
ausprobieren. Wie ich das so sehe ist das die Lösung.

Danke
Jochen

von Karl M. (Gast)


Lesenswert?

Und es ist so logisch, mit der Logik kann man die Richtigkeit beweisen 
und benötigt keine Tests oder einen Simulator !

von horscht (Gast)


Lesenswert?

Karl M. schrieb:
> Und es ist so logisch, mit der Logik kann man die Richtigkeit beweisen
> und benötigt keine Tests oder einen Simulator !

Und man braucht es eigentlich auch gar nicht umsetzen.

von Germanist (Gast)


Lesenswert?

horscht schrieb:
> Und man braucht es eigentlich auch gar nicht umsetzen.

... umzusetzen ...

von Hajo (Gast)


Lesenswert?

Hallo,

es funktioniert!

Nochmals danke für die schnelle Hilfe.

Jochen

von Yalu X. (yalu) (Moderator)


Lesenswert?

Hier gab es einen ähnlichen Thread mit weiteren Vorschlägen, die du dir
zu Gemüte führen kannst:

  Beitrag "Bitmanipulation beschleunigen"

von Achim M. (minifloat)


Lesenswert?

Karl M. schrieb:
> // more code !

less is more ;)
1
uint16_t bigger(uint8_t i)
2
{
3
  uint16_t o = 0x0000;
4
  uint16_t u16;
5
  uint8_t  u8;
6
7
  for(u16 = 0x0003u, u8 = 0x01u; u8 != 0x00u; u16 <<= 2, u8 <<= 1)
8
  {
9
    if(i & u8)
10
    {
11
      o |= u16;
12
    }
13
  }
14
15
  return(o);
16
}

mfg mf

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.