Pin als Eingang

OP #4451533
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)));
      }
    }
  }
}
Gast #4451541
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...
OP #4451564
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?
Gast #4451576
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...
#4451584
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren