www.mikrocontroller.net

Forum: Compiler & IDEs Bitfelder


Autor: Die Verzweifelten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

wir haben eine Frage zu Bitfeldern.
Aber zuerst mal zur Ausgangssituation:
Wir möchten 64 digitale Eingänge über Multiplexer einlesen. Das klappt
mit unserem Testprogramm ganz gut. Mittels einer Schleife lesen wir die
Bits in ein (unsigned char) Array ein, das über eine Laufvariable
weitergeschaltet wird.
Das Unschöne daran: Es werden 64 Byte für 64 Bit verschwendet :-(

Im Tutorial ist ja die Erstellung von Bitfeldern ausführlich
beschrieben. Doch der Zugriff darauf ist eben leider nicht so einfach
wie bei Arrays... Oder gibt es da auch ne Möglichkeit mittels Index
zuzugreifen?

Als eine Lösungsmöglichkeit ist uns eingefallen: Man könnte 8 Bit
einlesen (in 8 verschiedene Variable), und dann diese durch
Schiebeoperationen in einer 8-Bit-Variable unterbringen. Ist das
gängige Praxis?

Wäre nett, wenn uns jemand helfen könnte!
Grüße
Michael und Björn

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute mal, Du liest die Bits nacheinander über einen Pin ein, dann
kannst Du sie auch dabei gleich einschieben:

unsigned long long mybits; // 64 Bit

...
mybits <<= 1; // um 1 schieben, 0 reinschieben
if( PINA & 1<<PA7 ) // Eingang ist Pin7 von Port A
  mybits |= 1; // Pin übernehmen.
...


Nochn Tip:
Das Einlesen geht über Schieberegister (74HC165) viel einfacher, als
über Multiplexer.


Peter

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann das, aber wie immer: man handelt Speicherplatz gegen
Rechenzeit.  Der AVR kann nur um ein Bit pro Befehl schieben,
also hat man schlimmstenfalls 7 Schleifendurchläufe pro Byte,
bis man die passende Bitposition erst einmal hat.

Da du für nicht genutzten RAM von Atmel kein Geld zurück bekommst,
würde ich das erst dann machen, wenn klar ist, dass der RAM zu
knapp wird.

Autor: Die Verzweifelten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, danke Peter.
Jetzt klappts. ;-)

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.