Forum: Mikrocontroller und Digitale Elektronik Warten bis Tasterdruck erfolgt


von Martin F. (martin_f70)


Lesenswert?

Hallo!

Ich wollte mein Programm warten lassen bis Tasterdruck erfolgt:
1
while(1){
2
    if(PINB&(1<<PB1)){
3
        break;
4
    }
5
}

Aber das programm reagiert nicht auf den Tasterdruck dass es dann aus 
der Schleife raus geht, warum?

von Jetzt (Gast)


Lesenswert?

Was soll dann denn geschehen ? Led leuchten lassen? Zeig mal.

Zu Testen kann man ja so machen, in der Praxis ist das aber quatsch.

von Thomas E. (thomase)


Lesenswert?

1
while(PINB & (1 << PB1));

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Ist der Pin auf Eingang geschaltet?
WIe ist der Taster verschaltet?
Hast du einen Pullup/Pulldown Widerstand.

Auf Deutsch:
Zeig alles!

Das Problem ist nicht in den 3 Zeilen Code. Dass die nicht die Ursache 
sind, siehst du selber. Wir sehen da auch nichts anderes. Also liegt das 
Problem im Umfeld. Das aber zeigst du nicht.

von Martin F. (martin_f70)


Lesenswert?

1
    lcd_string("PH-7    Start");
2
    while(1){
3
        if(digRead(pin, port)){
4
            break;
5
        }
6
    }
7
    lcd_setcursor(0, 3);
8
    lcd_string("PH-7    Messe...");

Und digRead:
1
uint8_t digRead(uint8_t reg, uint8_t pin){
2
    uint8_t data;
3
    data = reg&(1<<pin);
4
    return data>>pin;
5
}

-> gibt 1 oder 0 zurück...

von Peter (Gast)


Lesenswert?

Der Martin wieder...

von Karl H. (kbuchegg)


Lesenswert?

Martin Fischer schrieb:

> [zur Problemlösung nutzloser Code]

Welchen Teil von 'Zeig alles!' verstehst du nicht?

: Bearbeitet durch User
von Martin F. (martin_f70)


Angehängte Dateien:

Lesenswert?

Ist in der main.c unter Kalibrierung :)

von Martin F. (martin_f70)


Lesenswert?

Was ist denn nun? Erst rummeckern und jetzt nicht helfen?

von Karl H. (kbuchegg)


Lesenswert?

Martin Fischer schrieb:
> Was ist denn nun? Erst rummeckern und jetzt nicht helfen?

Ich hab auch noch anderes zu tun, als mich nur um deinen Code zu kümmern
1
            kalibrierung(PINB, PB5, &s, &o);
2
            
3
....
4
5
void kalibrierung(uint8_t pin, uint8_t port, float *steilheit, float *offset){
6
...
7
8
    while(1){
9
        if(digRead(pin, port)){
10
            break;
11
        }
12
    }

erstens sind die Argumnente schon mal falsch rum.
Zweitens kann das so nicht funktionieren. Denn beim Aufruf der Funktion 
kalibrierung wird hier
1
            kalibrierung(PINB, PB5, &s, &o);
der aktuelle Zustand des PINB ermittelt und an die Funktion übergeben. 
Innerhalb der Funktion ändert sich der aber nicht mehr, weil ja das 
PIN-Register überhaupt nicht mehr abgefragt wird, sondern hier
1
        if(digRead(pin, port)){
immer wieder lediglich auf den in pin gespeicherten Zustand zum 
Zeitpunkt des Funktionsaufrufs zurückgegriffen wird. Und der ist 
logischerweise immer derselbe.

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Martin Fischer schrieb:
> Was ist denn nun? Erst rummeckern und jetzt nicht helfen?

Und... Tschüss

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> erstens sind die Argumnente schon mal falsch rum.

Nehm ich zurück. Deine Variablenbezeichnungen sind zwar verwirrend, aber 
die Verwendung ist korrekt. Bis eben darauf, dass das so grundsätzlich 
nicht funktioniert.

von Cyblord -. (cyblord)


Lesenswert?

Teo Derix schrieb:
> Martin Fischer schrieb:
>> Was ist denn nun? Erst rummeckern und jetzt nicht helfen?
>
> Und... Tschüss

Ganz normal. Quer durch das Forum glänzt Martin durch eine interessante 
Mischung aus absolutem Unwissen, keinerlei Ansatz irgendwelches 
Verständniss der Materie aufzubringen und penetranter Dreistigkeit 
("malt mir einen Schaltplan und sagt mir genau was ich wo anschließen 
muss und schnell gefälligst").

Von mir gibts da inzwischen nix mehr.

von Jetzt (Gast)


Lesenswert?

Eine Tastenabfrage wird NIE !!!!! so gemacht.

Siehe auch "entprellen"

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.