Forum: Mikrocontroller und Digitale Elektronik Bitreihenfolge drehen und in Ziffern aufteilen


von Oliver (Gast)


Lesenswert?

Moin

Ich weiß das das Thema schon oft behandelt wurde. Ich habe 
schätzungsweise mittlerweile die Hälfte der Themen durchgearbeitet und 
auch google bemüht. Aber ich verstehe nicht wie das funktioniert.
Ich habe eine 17-Bit binärzahl die ich spiegeln und in Ziffern aufteilen 
möchte(in c für einen ATMega 32). Um die Zahl zu drehen habe ich gelesen 
das man eine lookup-Tabelle nutzen kann oder das man das mit eine 
stackpointer schafft aber ich habe nirgends gefunden, wie man das 
wirklich realisiert.

Wär echt super wenn ihr mir da weiterhelfen könnt. Mir würde auch ein 
Link zu einem anderen thread reichen den ich vielleicht noch nicht 
gelesen habe auch wenn ich das nicht glaube ;-)


Danke schoneinmal im Voraus

Oli

von Peter (Gast)


Lesenswert?

bei einer Binärzahl sind die ziffern aber 0 und 1 als hat ein 
17.stellige Binärzahl auch 17 Ziffern was willst du da noch aufteilen?

von Oliver (Gast)


Lesenswert?

Die 17 ziffern möchte ich einzeln benutzen können und ihnen variablen 
zuteilen.

von Peter (Gast)


Lesenswert?

uint8_t Bits[17];

for( uint8_t b = 0; b < 17; ++b ) {
   Bits[ b ] = (Zahl % 2);
   b = b >> 1;
}

von Horst H. (horha)


Lesenswert?

Hallo,

das ist ein bisschen durcheinander geraten,

Peter schrieb:
> uint8_t Bits[17];
>
> for( uint8_t b = 0; b < 17; ++b ) {
>    Bits[ b ] = (Zahl % 2);
>    b = b >> 1;
> }
Falls es wirklich 17 Bit sind
1
uint8_t Bits[17];
2
uint32_t temp32
3
temp32 = 1
4
for( uint8_t b = 0; b <= 17; ++b ) {
5
  if ((temp32 & Zahl) == 0 )
6
    Bits[ b ]= 0;
7
  else
8
    Bits[ b ]= 1;
9
   temp32  += temp32;
10
 }

von Oliver (Gast)


Lesenswert?

Also er hat jetzt keine Fehlermeldung mehr also sollte es funktionieren 
aber ich verstehe nicht was das Programm genau macht. Könntest du 
vielleicht noch mal kurz die einzelnen Schritte beschreiben?!
Das wäre echt super

von Peter (Gast)


Lesenswert?

Was genau versteht du an dem Programm nicht?
schreibe doch mal hinter jede zeile wie du es verstehts.

von Peter (Gast)


Lesenswert?

Horst Hahn schrieb:
> das ist ein bisschen durcheinander geraten,
>
> Peter schrieb:
>> uint8_t Bits[17];
>>
>> for( uint8_t b = 0; b < 17; ++b ) {
>>    Bits[ b ] = (Zahl % 2);
>>    b = b >> 1;
>> }

stimmt, es war so gemeint
1
uint8_t Bits[17];
2
3
for( uint8_t b = 0; b < 17; ++b ) {
4
   Bits[ b ] = (Zahl % 2);
5
   Zahl  = Zahl  >> 1;
6
}

von Oliver (Gast)


Lesenswert?

So habe ich mir das gedacht:

uint8_t Bits[17]; // uint8_t ist die variable für den array? Ich vermute 
hier wird festgelegt, wie viel Bits einzulesen sind.

uint32_t temp32 // ?

temp32 = 1 // ?

for( uint8_t b = 0; b <= 17; ++b ) // was macht uint8_t hier? b bis 17 
hochzählen

{

 if ((temp32 & Zahl) == 0 ) // wenn temp32 und Ziffer1...17 gleich 0 
sind, dann ?

   Bits[ b ]= 0;        // ²

 else                   // ansonsten ?

   Bits[ b ]= 1;        // ²was passiert hier?

  temp32  += temp32;    // temp32 = temp32 + temp32 wofür?

von Peter (Gast)


Lesenswert?

Oliver schrieb:
> So habe ich mir das gedacht:
> ...

ich glaube du solltest dir ein C buch nehmen und es erstmal von Vorne 
anfangen zu lesen.
Du kommst ja noch nicht einmal soweit das Verfahren zu erkennen wie die 
Bits ermittelt werden, weil du den eigentlichen C code überhaupt  nicht 
verstehts.

von Peter D. (peda)


Lesenswert?

Wozu benötigt man überhaupt diese komische Funktion?

Beschreib besser mal die Aufgabe, die Du damit zu lösen versuchst.
Das geht bestimmt wesentlich einfacher.


Peter

von Oliver (Gast)


Lesenswert?

Ganz einfach gesehen möchte ich 17 Bit, die ich seriell reinbekomme auf 
einer Anzeige darstellen. Es geht im Prinzip nur darum, dass es 
funktioniert und nicht um das Verständnis C zu programmieren, dazu habe 
ich leider keine Zeit ;-)

von us73 (Gast)


Lesenswert?

Oliver schrieb:
> Es geht im Prinzip nur darum, dass es
> funktioniert und nicht um das Verständnis C zu programmieren, dazu habe
> ich leider keine Zeit ;-)

Oh, dann hast Du dich -in meinen Augen- für dieses Forum 
disqualifiziert.

Hier gibt es Hilfe zur Selbsthilfe, und zwar viel, oft und fast immer 
sehr gut.

Wenn Du aber jemanden suchst, der deine Aufgaben macht, musst Du anders 
fragen oder / und auch woanders suchen.

von Peter D. (peda)


Lesenswert?

Oliver schrieb:
> Ganz einfach gesehen möchte ich 17 Bit, die ich seriell reinbekomme auf
> einer Anzeige darstellen.
1
uint32_t val = 0x15555;
2
3
for( uint8_t i = 17; i; i-- ){
4
  putchar( (val & (1L<<16)) ? '1' : '0' );
5
  val <<= 1;
6
}


Peter

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.