Problem beim einlesen der Taster. Bitte um Rat :)

OP #1933843
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 :)
#1933853
Lesenswert?
• ▲
▼
Sepp Ackermann schrieb:

Verwende hier die logische Negation, denn genau das willst du hier ja 
machen.
1
#define SHIFT_UP      !bit_is_set(PINB, POS_SHIFT_UP)    // reedkontakt zum hochschalten (active LOW)
2
#define NEUTRAL       !bit_is_set(PINB, POS_NEUTRAL)     // wenn gesetzt dann ist neutral gang aktiv (active LOW)
3
#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.
OP #1933872
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". ?
#1933887
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?
#1933895
Lesenswert?
• ▲
▼
Schnellschuss
1
#define SHIFT_UP      !(bit_is_set(PINB, POS_SHIFT_UP))    // reedkontakt zum hochschalten (active LOW)
2
#define NEUTRAL       !(bit_is_set(PINB, POS_NEUTRAL))     // wenn gesetzt dann ist neutral gang aktiv (active LOW)
3
#define SHIFT_DOWN    !(bit_is_set(PINB, POS_SHIFT_DOWN))  // runterschalten (active LOW)
#1934003
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.
Gast #1934010
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.