www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem beim einlesen der Taster. Bitte um Rat :)


Autor: Sepp Ackermann (seppi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define POS_IGNITION          0

#define POS_SHIFT_UP          1
#define POS_NEUTRAL           2
#define POS_SHIFT_DOWN        3


#define IGNITION       bit_is_set(PINB, POS_IGNITION)    // Zündung 
(active HIGH)

#define SHIFT_UP      ~bit_is_set(PINB, POS_SHIFT_UP)    // reedkontakt 
zum hochschalten (active LOW)
#define NEUTRAL       ~bit_is_set(PINB, POS_NEUTRAL)     // wenn gesetzt 
dann ist neutral gang aktiv (active LOW)
#define SHIFT_DOWN    ~bit_is_set(PINB, POS_SHIFT_DOWN)  // 
runterschalten (active LOW)



 if(NEUTRAL && !SHIFT_UP && !SHIFT_DOWN) kopieren...
   {
      counter = 1;
   }
  End



Hallo, habe Probleme die Taster abzufragen. Die einzelnen Pins außer bin 
0 werden nicht registriert. An was könnte das liegen. ?
Danke im Voraus.

MFG :)

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

Bewertung
0 lesenswert
nicht lesenswert
Sepp Ackermann schrieb:

Verwende hier die logische Negation, denn genau das willst du hier ja 
machen.
#define SHIFT_UP      !bit_is_set(PINB, POS_SHIFT_UP)    // reedkontakt zum hochschalten (active LOW)
#define NEUTRAL       !bit_is_set(PINB, POS_NEUTRAL)     // wenn gesetzt dann ist neutral gang aktiv (active LOW)
#define SHIFT_DOWN    !bit_is_set(PINB, POS_SHIFT_DOWN)  // runterschalten (active LOW)

je nach den Details von bit_is_set kann das einen Unterschied ausmachen.
Eine dezidierte bit_is_clear wäre noch besser.

Autor: Sepp Ackermann (seppi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sepp Ackermann schrieb:

Verwende hier die logische Negation, denn genau das willst du hier ja
machen.

#define SHIFT_UP      !bit_is_set(PINB, POS_SHIFT_UP)    // reedkontakt 
zum hochschalten (active LOW)
#define NEUTRAL       !bit_is_set(PINB, POS_NEUTRAL)     // wenn gesetzt 
dann ist neutral gang aktiv (active LOW)
#define SHIFT_DOWN    !bit_is_set(PINB, POS_SHIFT_DOWN)  // 
runterschalten (active LOW)

je nach den Details von bit_is_set kann das einen Unterschied ausmachen.
Eine dezidierte bit_is_clear wäre noch besser.



danke erst mal für deine antwort.

....hab sie leider vorher schon ausprobiert, hat aber auch nicht 
geklappt.
habs auch schon mit bitweisem undieren versucht.
das programm läuft im debugger problemlos durch.
wie meinst du das mit dem "dezidierten bit_is_clear". ?

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

Bewertung
0 lesenswert
nicht lesenswert
Sepp Ackermann schrieb:

> ....hab sie leider vorher schon ausprobiert, hat aber auch nicht
> geklappt.

Das ! ist schon richtig.
Dann gibts eben noch ein Problem.

> wie meinst du das mit dem "dezidierten bit_is_clear". ?

so wie du ein bit_is_set (Makro oder Funktion?) hast, solltest du auch 
ein bit_is_clear haben.

ALso: wie genau ist bit_is_set implementiert?
Was ist sein Ergebniswert?

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

Bewertung
0 lesenswert
nicht lesenswert
Schnellschuss
#define SHIFT_UP      !(bit_is_set(PINB, POS_SHIFT_UP))    // reedkontakt zum hochschalten (active LOW)
#define NEUTRAL       !(bit_is_set(PINB, POS_NEUTRAL))     // wenn gesetzt dann ist neutral gang aktiv (active LOW)
#define SHIFT_DOWN    !(bit_is_set(PINB, POS_SHIFT_DOWN))  // runterschalten (active LOW)

Autor: Sepp Ackermann (seppi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab das schon ausprobiert. Ergebniswert ist null bzw. größer null.
!(PINB&0x1)....also, im debugger läufts durch.

Greeez.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> ALso: wie genau ist bit_is_set implementiert?
> Was ist sein Ergebniswert?

das ist eine berechtigte Frage,
und es ist nicht besonders höflich keine Antwort zu geben,#
vor allem wenn man von dem anderen Hilfe erwartet

Autor: Sepp Ackermann (seppi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, sorry. bin grad ein wenig verplant. :(

funktion ist im header definiert im avrstudio. Rückgabewert ist 0 bzw. 
größer 0.

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

Bewertung
0 lesenswert
nicht lesenswert
Sepp Ackermann schrieb:
> ok, sorry. bin grad ein wenig verplant. :(
>
> funktion ist im header definiert im avrstudio. Rückgabewert ist 0 bzw.
> größer 0.

Genau.
Und darum ist ~ auf jeden Fall falsch.

Denn ~ von 0x02 ergibt etwas, was ebenfalls nicht 0 ist.

Im gleichen Header gibt es übrigens ein bit_is_clear.


Bleibt noch die Abfragelogik selber. Umgangssprachlich werfen wir die 
Begriffe UND und ODER gerne völlig falsch durcheinander.

* Prüf mal an ganz einfachen Beispielen ab, ob du nicht ein 
Hardwareproblem mit den bewussten Tastern bzw. Kontakten hast
* Wenn sich da nichts findet, dann hast du irgendwo im Programm einen 
anderen Fehler.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei der Fehlersuche zielt man oft daneben,
d.h. du vermutest den Fehler an einer bestimmten Stelle,
er liegt aber ganz woanders

Wenn Du ihn selber suchen willst, dann versuche den Fehler isolieren, 
alles also drum rum weg

wenn du willst das einer hier aus dem Forum den Fehler sucht,
dann darfst du nicht nur einzelne Brocken hinwerfen, sondern bitte das 
ganze Programm, am besten natürlich von allem unnötigen Ballast befreit 
und verbunden mit einer genauen Fehlerbeschreibung.

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.