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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.