Forum: Mikrocontroller und Digitale Elektronik If-Schleife macht das Gegenteil von dem was für mich logisch erscheint


von Schorsch (Gast)


Lesenswert?

Hallo,

ich hab vor ein paar Tagen angefangen in das 
Mikrocontrollerprogrammieren einzusteigen. Als Mikrocontroller habe ich 
den ATMEL Atmega32 16pu und benutze "Programmers Notepad". Wie man Leds 
an-/ausschaltet verstehe ich - auch wie man Pins als Eingänge 
deklariert. Habe mich jetzt an die If-Schleifen gesetzt und habe 
folgenes Programm programmieren wollen: Wenn ich nichts mache blinken 3 
Leds immer wieder nacheinander. Wenn ich jedoch den Button an PB1 drücke 
sollen die Leds gleichzeitig blinken!
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
5
int main(void)
6
{
7
DDRB &= ~(1<<PB1);
8
DDRB |= (1<<PB3);
9
DDRB |= (1<<PB4);
10
DDRB |= (1<<PB5);
11
PORTB |= (1<<PB1);
12
13
while(1)
14
{
15
16
if(bit_is_clear(PINB, 1))
17
{
18
19
PORTB |= (1<<PB3);
20
PORTB |= (1<<PB4);
21
PORTB |= (1<<PB5);
22
_delay_ms(100);
23
PORTB &= ~(1<<PB3);
24
PORTB &= ~(1<<PB4);
25
PORTB &= ~(1<<PB5);
26
_delay_ms(100);
27
28
}
29
30
else 
31
{
32
PORTB &= ~(1<<PB5);
33
PORTB |= (1<<PB3);
34
_delay_ms(15);
35
PORTB &= ~(1<<PB3);
36
PORTB |= (1<<PB4);
37
_delay_ms(15);
38
PORTB &= ~(1<<PB4);
39
PORTB |= (1<<PB5);
40
_delay_ms(15);
41
}

So funktioniert es zwar, ich verstehe aber nicht warum ich in die 
Klammer (was ich durch ausprobieren herausgefunden habe) bit_is_clear 
setzen muss, wenn doch vom Mikrocontroller ein Bit gesetzt werden 
müsste, falls ich den Button drücke. Oder wird die If-Schleife 
ausgeführt wenn der Wert = 0 ist ?

Würde mich über Antworten freuen, die mir helfen.

Schorsch

PS: Habe mir auch ein paar Bücher über das Thema bestellt. Diese kommen 
aber erst in ein paar Tagen und ich möchte gerne weiter kommen :)

von Peter II (Gast)


Lesenswert?

!!!es gibt keine if-schleifen!!!!

Die Hardware kann auch so sein, das ein gedrückter Taster eine 0 
liefert.

von Ich (Gast)


Lesenswert?

Üblicherweise werden Taster so angeschlossen, dass sie gedrückt den Wert 
0 liefern und im Ruhezustand der Pullup-Widerstand für den Wert 1 sorgt.
Zeig doch mal deinen Schaltplan!

von cppler (Gast)


Lesenswert?


von If-Schleife (Gast)


Lesenswert?


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.