www.mikrocontroller.net

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


Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Oliver (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint8_t Bits[17];

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

Autor: Horst Hahn (horha)
Datum:

Bewertung
0 lesenswert
nicht 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
uint8_t Bits[17];
uint32_t temp32
temp32 = 1
for( uint8_t b = 0; b <= 17; ++b ) {
  if ((temp32 & Zahl) == 0 )
    Bits[ b ]= 0;
  else
    Bits[ b ]= 1;
   temp32  += temp32;
 }

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
uint8_t Bits[17];

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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: us73 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
> Ganz einfach gesehen möchte ich 17 Bit, die ich seriell reinbekomme auf
> einer Anzeige darstellen.
uint32_t val = 0x15555;

for( uint8_t i = 17; i; i-- ){
  putchar( (val & (1L<<16)) ? '1' : '0' );
  val <<= 1;
}


Peter

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.