Bin mir nicht sicher, ob ich es richtig verstanden habe, drum frag ich
zur Sicherheit mal nach:
Atmega88, PortC.
1 | DDRC |= (1<<PINC0) // PinC0 = Eingang
|
2 | PORTC |= (1<<PINC0) // interner PullUp an
|
Verbinde ich nun PinC0 mit Masse (Taster), dann ist die if-Abfrage True
und der Code in der Klammer wird ausgeführt:
1 | if (PINC & (1<<PINC0)) {
|
2 | // Tu was
|
3 | }
|
Also das Bit0 in PinC ist gesetzt, wenn Schalter mit Masse verbunden
ist.
Will ich aber meinen Schalter nicht mit Masse verbinden sondern mit Vcc,
dann muss ich umgedreht denken:
1 | DDRC |= (1<<PINC0) // PinC0 = Eingang
|
2 | PORTC &= ~(1<<PINC0) // interner PullUp aus
|
Da ich keinen internen PullDown-Widerstand habe, muss ich einen
PullDown-Widerstand zwischen PinC und Masse setzen.
Wird nun PinC mit Vcc verbunden, dann muss die if-Bedingung zur
Auswertung so aussehen:
1 | if (PINC & ~(1<<PINC0)) {
|
2 | // Tu was...
|
3 | }
|
bzw.
1 | if (! (PINC & (1<<PINC0)) ) {
|
2 | // Tu was...
|
3 | }
|
Ich würd mich sehr freuen, wenn mir jemand kurz helfen kann und mir
sagt, ob ich es richtig verstanden hab oder ob wo was falsch ist. Viele
Dank im Voraus.