Forum: Mikrocontroller und Digitale Elektronik Pin als Eingang


von Thomas H. (datatom)


Lesenswert?

Hallo zusammen,

ich habe bei meinem ATMega2561 den Pin PC0 als Eingang definiert und 
Pull-up eingeschaltet. Dann habe ich an dem Pin ein Kabel mit 5V 
angeschlossen. An dem Kabel ist ein Schalter, der beim drücken den Strom 
unterbricht. Wird mit dem Schalter der Strom unterbrochen, soll ein LED 
leuchten.

Das Problem ist, dass der Pin PC0 dauerhaft eine Spannung von 5V hat, 
ohne das das Kabel angeschlossen ist.

Ich dachte, dass bei einem Pin der als Eingang definiert ist, 
grundsätzlich keine Spannung drauf ist.

Was läuft falsch? Habe ich was falsch verstanden?

Hier mein Programm:

#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
  // PB6 = Ausgang
  DDRB |= (1<<PB6);
  // PC0 = Eingang
  DDRC &= ~(1<<PC0);
  // Pull-up ein
  PORTC |= (1<<PC0);
  // Endlosschleife
  while(1)
  {
    // Taster an PINC0 abfragen
    if((PINC & (1<<PC0)) == 0)
    {
      // Prellzeit
      _delay_ms(50);
      // Taster nochmal abfragen
      if((PINC & (1<<PC0)) == 0)
      {
        // LED einschalten
        PORTB ^= (1<<PB6);
        // warten, bis Taste wieder losgelassen wurde
        while(!(PINC & (1<<PC0)));
      }
    }
  }
}

von Peter D. (peda)


Lesenswert?

Thomas H. schrieb:
> Das Problem ist, dass der Pin PC0 dauerhaft eine Spannung von 5V hat,
> ohne das das Kabel angeschlossen ist.

Genau das ist die Aufgabe eines Pullup, sagt doch schon der Name.

von asdf (Gast)


Lesenswert?

Thomas H. schrieb:
> Was läuft falsch? Habe ich was falsch verstanden?

Wenn du den internen Pullup einschaltest, solltest du den Schalter gegen 
GND legen. Der Pullup legt doch an den Eingang schon die internen 5V an. 
Wenn du jetzt von außen nochmal 5V anlegst, ändert sich nichts. Wenn du 
aber, wie ich oben sagte, GND über den Schalter anlegst, dann ziehst du 
bei geschlossenem Schalter den Eingang auf GND und bei offenem Schalter 
zieht der Pullup den Eingang auf 5V. Voila, und schon hast du einen 
auswertbaren Schaltvorgang...

von Alexander S. (alex998)


Lesenswert?

Mit dem Schalter musst du den "Pulldown" machen, also gegen Masse 
schliessen.

von Thomas H. (datatom)


Lesenswert?

asdf schrieb:
> Thomas H. schrieb:
>> Was läuft falsch? Habe ich was falsch verstanden?
>
> Wenn du den internen Pullup einschaltest, solltest du den Schalter gegen
> GND legen. Der Pullup legt doch an den Eingang schon die internen 5V an.
> Wenn du jetzt von außen nochmal 5V anlegst, ändert sich nichts. Wenn du
> aber, wie ich oben sagte, GND über den Schalter anlegst, dann ziehst du
> bei geschlossenem Schalter den Eingang auf GND und bei offenem Schalter
> zieht der Pullup den Eingang auf 5V. Voila, und schon hast du einen
> auswertbaren Schaltvorgang...

Vielen Dank, hat funktioniert.

Ich dachte, bei einem Pin der als Eingang definiert, wartet der Pin auf 
Stromsignale von außen.

Wie ist es denn, wenn ich z.B. ein Thermometer an den Mikrocontroller 
anschließe, wird dann der Pin auch als Eingang definiert? Wie 
übermittelt das Thermometer die Temperatur?

von asdf (Gast)


Lesenswert?

Thomas H. schrieb:
> Ich dachte, bei einem Pin der als Eingang definiert, wartet der Pin auf
> Stromsignale von außen.

Nein, der wertet die anliegende Spannung aus, nicht den Strom.

Thomas H. schrieb:
> Wie ist es denn, wenn ich z.B. ein Thermometer an den Mikrocontroller
> anschließe, wird dann der Pin auch als Eingang definiert? Wie
> übermittelt das Thermometer die Temperatur?

Das kommt auf das Thermometer an. Was für eins meinst du? Es gibt 
temperaturabhängige Widerstände, z.B. den PT100. Es gibt auch 
Temperatursensoren, die eine Spannung proportional zur Temperatur 
ausgeben, wie den LM35. Oder es gibt Sensoren, die ein digitales Signal 
ausgeben, welches du mit dem µC auswerten mußt. Es gibt nicht DAS 
Thermometer...

von Falk B. (falk)


Lesenswert?

@ Thomas Holländer (datatom)

>Ich dachte, bei einem Pin der als Eingang definiert, wartet der Pin auf
>Stromsignale von außen.

Nö. Meistens sind es Spannungssignale.

https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

>Wie ist es denn, wenn ich z.B. ein Thermometer an den Mikrocontroller
>anschließe, wird dann der Pin auch als Eingang definiert? Wie
>übermittelt das Thermometer die Temperatur?

Das kommt auf den Temperatursensor an. Analoge Sensoren werden meist mit 
einem AD-Wandler Eingang ausgewertet, digitlate logischerweise mit 
normalen, digitalen Eingängen.

Temperatursensor

von Thomas H. (datatom)


Lesenswert?

Ok. Danke für die Antworten.

von Rolf M. (rmagnus)


Lesenswert?

Thomas H. schrieb:
> Vielen Dank, hat funktioniert.
>
> Ich dachte, bei einem Pin der als Eingang definiert, wartet der Pin auf
> Stromsignale von außen.

Zu Strom <-> Spannung wurde ja schon geantwortet.
Fangen wir mal anders rum an: Warum hast du den Pull-Up aktiviert? Was 
hätte der deiner Meinung nach tun sollen?

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.