Einfache Schalter>LED-Schaltung: Register brauchen mehrere Sekunden zum Reset

OP #4268022
Lesenswert?
• ▲
▼
Guten Mittag zusammen,
ich bin relativ blutiger Anfänger in der Mikrocontroller-Programmierung. 
Ich bin gerade dabei, eine einfache LED so lange anzuschalten, wie ein 
Schalter gedrückt ist. Das ganze funktioniert auch, allerdings bleibt 
die LED nach dem "Loslassen" des Buttons noch einige Sekunden (~5) 
angeschaltet, bis sie schließlich aus geht. Per Suchmaschine habe ich 
dazu keine wirklich passenden Lösungen gefunden - ich hatte "als erstes 
Projekt" in der Vergangenheit auch eine Siebensegmentanzeige 
angesteuert, damals wurde "sofort" umgeschalten, als ein Schalter nicht 
mehr gedrückt war.
1
#include <avr/io.h>
2
#include <stdlib.h>
3

4
int main(){
5
  DDRB = 0x00;
6

7
  PORTC = 0xFF;
8
  DDRC = 0xFF;
9

10
  while(1)
11
  {
12
    if(PINB & (1<<PINB0) ){
13
      PORTC = 0x00;
14
    }
15
    else{
16
      PORTC = 0xFF;
17

18
    }
19
  }
20

21
  return 1;
22
}

Atmega 328P, als Entwicklungsboard nutze ich einen Arduino Uno (ohne 
Arudino-Laster) mit USBasp-Programmer und Eclipse.
Gast #4268053
Lesenswert?
• ▲
▼
Michael N. schrieb:
> Der Eingang ist bei "Button nicht gedrückt" nicht geschaltet, bei
> "Button gedrückt" auf +5V

Also ist der Eingang bei "Button nicht gedrückt" in der Luft? Dann mach 
da mal noch an den Eingang einen 10k Widerstand nach Masse, oder schalte 
den Button so, dass er nach Masse schaltet und aktiviere die internen 
Pullups des AVRs (ins PORTx-Register für den Eingang eine 1 schreiben).
Gast #4268055
Lesenswert?
• ▲
▼
Da ist der Fehler.

Der Eingang des µC ist hochohmig. Nach dem Loslassen des Tasters ändert 
sich der Pegel am Eingang eher nicht oder eher zufällig.

Mach mal einen Widerstand von 10 kOhm oder 47 kOhm oder ... gegen GND . 
Dann erkennt der Portpin den offenen Taster und gut.
Gast #4268062
Lesenswert?
• ▲
▼
Hallo Michael,

füge mal nach
  DDRB = 0x00;

die Zeile
  PORTB = 0xFF;

ein und schliesse deinen Taster vom Port B0 nach Ground an.
Mitn der Zeile werden die Pullup Widerstände eingeschaltet und man 
erhält immer definierte Zustaände
Ach ja, das Ein-Ausschalten solltest du natürlich auch vertauschen, da 
jetzt die LED leuchten wenn der Schalter nicht gedrückt wird.

Viel Erfolg
gatsby

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