Forum: Mikrocontroller und Digitale Elektronik Eingänge abfragen


von Ingo L. (grobian)


Lesenswert?

Wenn ich einen Port so programmiere, dass ich die untersten 4 Bits als 
Eingang und die obersten 4 Bit als Ausgang benutze, wie frage ich in dem 
Falle den Zustand der Eingänge ab. Die Ausgänge ändern sich stetig im 
Programmablauf.

Gruß aus Berlin

von Guru (Gast)


Lesenswert?

Nimm an, Du würdest einen Port mit 8 Eingängen abfragen und ignoriere 
die Bits die auf Ausgang geschaltet sind.

von MitLeser (Gast)


Lesenswert?

im Prinzip wie Guru schon schrieb, benutze Bit-Masken
für jeden einzelnen Eingang

von Guru (Gast)


Lesenswert?

"Ignorieren" heisst hier soviel wie, die Ausgangsbits nach dem Einlesen 
des Ports auf einen konstanten Wert zu setzen, so das Du bei dem 
Vergleich der eigentlichen Eingangsbits von festen Werten der 
Ausgangsbits ausgehen kannst.

Wie sieht es mit Deinen Kenntnissen bezüglich den Bitweisen boolschen 
Operatoren bzw. Operationen aus? Weisst Du wie man Bits maskiert? Welche 
Sprache willst Du benutzen?

von Ingo L. (grobian)


Lesenswert?

bin in C++

sieht hier so aus :

while(1)
  {
  taste = PINA;
  _delay_ms(200);

  if (taste == 0b11110111)
    {
      PORTC = 128; // LED ON
      _delay_ms(200);
      PORTC = 0; // LED OFF

       }
 }

d.h ich mache eine oder Verknüfung mir dem Wert 0b11111111 mit taste und 
habe damit die oberen  für die Abfrage ignoriert.

von Ralf (Gast)


Lesenswert?

Ingo Laabs schrieb:
> if (taste == 0b11110111)

und was ist, wenn sich die Ausgänge ändern?!

Guru schrieb:
> Wie sieht es mit Deinen Kenntnissen bezüglich den Bitweisen boolschen
> Operatoren bzw. Operationen aus? Weisst Du wie man Bits maskiert?

von Ingo L. (grobian)


Lesenswert?

Ralf schrieb:
> und was ist, wenn sich die Ausgänge ändern?!

genau dahin zielte meine Frage !

von Guru (Gast)


Lesenswert?

>ich mache eine oder Verknüfung mir...

Wozu soll das gut sein? Wer hat was von einer Oder-Verknüpfung 
geschrieben?

von Guru (Gast)


Lesenswert?

>genau dahin zielte meine Frage !

Liest Du eigentlich was hier geantwortet wird?

>"Ignorieren" heisst hier soviel wie, die Ausgangsbits nach dem Einlesen
>des Ports auf einen konstanten Wert zu setzen, so das Du bei dem
>Vergleich der eigentlichen Eingangsbits von festen Werten der
>Ausgangsbits ausgehen kannst.

>Wie sieht es mit Deinen Kenntnissen bezüglich den Bitweisen boolschen
>Operatoren bzw. Operationen aus? Weisst Du wie man Bits maskiert? Welche
>Sprache willst Du benutzen?

von Guru (Gast)


Lesenswert?

Schreib Dir mal die Wahrheitstabellen für die logischen Verknüpfungen 
"Oder" und "Und" auf. Dann fällt es Dir wie Schuppen von den Augen. 
Ansonsten ist das wohl wieder mal ein Fall für Karl Heinz Buchegger.

von Ingo L. (grobian)


Lesenswert?

Guru schrieb:
> Schreib Dir mal die Wahrheitstabellen für die logischen Verknüpfungen
> "Oder" und "Und" auf. Dann fällt es Dir wie Schuppen von den Augen.
> Ansonsten ist das wohl wieder mal ein Fall für Karl Heinz Buchegger.

Bin gerade dabei :-)... soviele Schuppen auf einmal ohje

von Guru (Gast)


Lesenswert?

Hm. Ich muss mich wohl entschuldigen bei Dir Ingo. Schlechte Laune 
heute.

Obwohl es unüblich ist, ist es auch möglich, das mit einer 
Oder-Verknüpfung zu tun.

Wie Du wahrscheinlich schon festgestellt hast, wird mit einer 
Und-Verknüpfung mit 0 ein Bit immer auf 0 gesetzt. Bei einer 
Und-Verknüpfung mit 1 aber kommt immer wieder das variable Eingangsbit 
hervor.
Bei einer Oder-Verknüpfung mit 1 wird ein Bit immer auf 1 gesetzt, bei 
einer Verknüpfung mit 0 kommt auch wieder das variable Eingangsbit 
hervor.

Insofern war Deine Antwort mit dem Oder in Ordnung.

Was Du noch wissen musst, ist, wo Du bei einer Oder-Verknüpfung die 1 
Bits und die 0 Bits verteilst. Die analoge Überlegung solltest Du auch 
für die Und-Verknüpfung machen, weil die üblicher ist.

von Guru (Gast)


Lesenswert?

Nimm mal an, Du hättest das Eingangsbit (ob es eines oder mehrere sind 
spielt erstmal keine Rolle) bei Bit Nr. 0.

Dann würdest Du den gesamten Port-Wert mit 0xFE ver-odern bzw. mit 0x01 
Und-verknüpfen. Bei dem Oder erhälst Du dann entweder 0xFF oder 0xFE, je 
nachdem ob der Eingangspin auf 0 oder 1 steht. Beim Oder erhälst Du 
entweder 0x00 oder 0x01. Klar?

Man nimmt eigentlich lieber das Und, weil der Vergleichswert für einen 
Menschen, inbesondere bei mehreren Eingangspin einen Tick leichter zu 
lesen und zu schreiben ist.

von Guru (Gast)


Lesenswert?

Es muss heissen:

Dann würdest Du den gesamten Port-Wert mit 0xFE ver-odern bzw. mit 0x01
Und-verknüpfen. Bei dem Oder erhälst Du dann entweder 0xFF oder 0xFE, je
nachdem ob der Eingangspin auf 0 oder 1 steht. Beim Und erhälst Du
entweder 0x00 oder 0x01. Klar?

Wär ich bloss heute im Bett geblieben.

von Ralf (Gast)


Lesenswert?

Guru schrieb:
> Man nimmt eigentlich lieber das Und, weil der Vergleichswert für einen
> Menschen, inbesondere bei mehreren Eingangspin einen Tick leichter zu
> lesen und zu schreiben ist.

Auf jeden Fall! Dann hat man gleich das richtige Ergebnis. Solche 
Maskierungen macht man ja überall mal.

von Ingo L. (grobian)


Lesenswert?

Guru schrieb:
> Es muss heissen:
>
> Dann würdest Du den gesamten Port-Wert mit 0xFE ver-odern bzw. mit 0x01
> Und-verknüpfen. Bei dem Oder erhälst Du dann entweder 0xFF oder 0xFE, je
> nachdem ob der Eingangspin auf 0 oder 1 steht. Beim Und erhälst Du
> entweder 0x00 oder 0x01. Klar?
>
> Wär ich bloss heute im Bett geblieben.


Frage ist ja erledigt..kannst dich wieder hinlegen.
Ich stell dir nach dem aufstehen ein bissel Gebäck mit Kaffee hin..ok
..Gutes Nächtle :-)

von Guru (Gast)


Lesenswert?

>Auf jeden Fall!

Na sicher nimmt man das "Und". Ich nehm's seit 30 Jahren.

Aber es ist jedenfalls für einen Anfänger  gut, wenn man ihm bestätigt 
das sein Grundgedanke richtig war, auch wenn er auf eine unübliche 
Lösung gekommen ist, die deswegen unüblich ist weil sie auch Nachteile 
hat.

von Guru (Gast)


Lesenswert?

>..Gutes Nächtle :-)

Hach. Noch so ein Zwerg aus dem Schwarzwald! Grüsse aus dem Landkreis 
Rottweil.

von Ingo L. (grobian)


Lesenswert?

Guru schrieb:
>>..Gutes Nächtle :-)
>
> Hach. Noch so ein Zwerg aus dem Schwarzwald! Grüsse aus dem Landkreis
> Rottweil.

nein Berlin..geboren in Niedersachsen..

von citb (Gast)


Lesenswert?

>bin in C++

Doch eher C.
C++ fuer uCs?

citb

von Ingo L. (grobian)


Lesenswert?

Würde mich aber trotzdem noch über Karl-Heinz seine Auslegungen freuen.
Das hat immer sowas verständliches ansich...

von Lehrmann M. (ubimbo)


Lesenswert?

citb schrieb:
> C++ fuer uCs?

Gibt es nicht und wird es auch nicht geben.

citb schrieb:
>>bin in C++

Also wer C++ kann, der kann auch C. Baut ja schließlich aufeinander auf.


Thema Bitmanipulation 
http://www.mikrocontroller.net/articles/Bitmanipulation.

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.