www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zustand Port-Pins in Dezimalzahl wandeln


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe da mal eine Frage. Angenommen ich habe eine Reihe von 
Dip-Schaltern an meinem Atmega angeschlossen und will nun in C diese 
Pins benutzten um eine Zahl zu bestimmen, mit der ich dann rechnen kann. 
Binär oder Dezimal ist ja jetzt erstmal egal. Dann würde ich 
normalerweise hingehen und den Zustand meines Ports mit sowas wie

i = PinX & Maske;
irgendwas = irgendwasanderes * i;

auslesen. Ich nehme die Pins, die ich brauche, die anderen maskiere ich 
weg und kann dann mit meinen Dip-Schaltern eine binäre Zahl codieren, um 
damit zu rechnen. Wie mache ich das aber, wenn die Dipschalter über 
mehere Ports verteilt sind und ich eine zusammenhängenden Binärzahl 
will? Ich brauche also irgendwas in der Form von.

if (!(PINB &(1<<2)))
  {
  LSB von i;
  }
if (!(PINC &(1<<5)))
  {
  1. Bit von i;
  }
if (!(PIND &(1<<0)))
  {
  2. Bit von i;
  }

usw. Wie aber macht man sowas konkret und in elegant?

Gruß Tom

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
C is nicht, aber vielleicht ein Lösungsansatz:
Register 1 mit Portwert A belegen.
unwichtige Bits mit Und-Verknüpfung ausblenden (Masierung)
Bit in Position schieben
und register in Variable schreben
Nächsten Portwert laden
unwichtige Bits ausblenden
Auf Position schieben
Mit abgelegtem Wert verodern
usw.....
Gruß oldmax

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas geht nicht mit Bitoperationen in C? Was für eine Enttäuschung. Na 
dann halt alle Ports einlesen, wichtige Bits rausmaskieren und alle 
zusammen verunden. Müsste ja auch gehen.

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/Bitmanipulation

da steht alles.

Musst dir halt Wertigkeiten ausdenken.

z.B.

Wertigkeiten immer 2^n.

Bsp.

Pin7 Wertigkeit 2^0 = 1
Pin 12 Wertigkeit 2^1 = 2
Pin 329 Wertigkeit 2^2 = 4
Pin 2 Wertigkeit 2^3 = 8

deine Dezimalzahle ist die Summe der Wertigkeiten (wenn der Pin log. 
high ist dann gilt die Wertigkeit ansonsten 0)

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,
>
> usw. Wie aber macht man sowas konkret und in elegant?
>

Sich vorher darueber Gedanken machen und nicht einfach drauflos 
loeten.

> Was für eine Enttäuschung.

was kann den C dafuer, dass du deine Schalter so konfus anklemmst, 
obwohl sie offensichtlich eine logische Einheit bilden sollen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom schrieb:
> Sowas geht nicht mit Bitoperationen in C?

Sicher gehts.
Aber es gibt nicht für jeden Fall von
"Hole dir aus 25 Variablen die Bits mit den Nummern x, y, z und schiebe 
alle gemeinsam in eine neue Variable" ein Spezialzeichen. Da würde die 
Tastatur schnell zu klein werden.

C stellt dir den Baukasten zur Verfügung. Der Bauskasten ist vollständig 
genug, dass man jede Operation daraus zusammenstellen kann.
So wie das bei Lego früher auch mal war: Ein überschaubarer Satz von 
Bausteinen mit denen man gebaut hat. Heute besteht Lego ja nur noch aus 
Spezialteilen für jeden möglichen Furz.

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.