taster-problem

Gast #2349262
Lesenswert?
• ▲
▼
hallo

ich habe 2 taster an meine board und möchte gerne eine LED einschalten.
Die LED soll nur an sein wenn ich einen taster gedrückt halte.
Bei meinem Programm funktioniert es aber genau umgekehrt, die LED ist
permanent an und wenn ich den taster drücke geht sie aus, sogar wenn ich
den 2.taster drücke geht sie aus.

#include <avr/io.h>



int main ()

{



DDRB = (1 << PB5)



 if( (PIND & ( 1 << PD0 )) == 0 ){


PORTB |= (1 << PB5);


}
return 0;

}
Gast #2349462
Lesenswert?
• ▲
▼
mittlerweile habe ich schon alles durch er machts immer noch genauso wie 
beschrieben. Wie überprüfe ich überhaupt ob der taster gegen masse 
geschalten ist ???








#include <avr/io.h>



int main ()

{

DDRD|= (1<<PD0)  ; // inneren Pull-up Widerstand aktivieren
DDRB|= (1<<PB7) | (1<<PB4); //  PB7 auf Ausgang
PORTB|= (1<<PB4);


if(PIND & ~(1<<PD0)==0){  // PIND= 0b00000001 & 0b00000000 == 0???



PORTB|=(1<<PB7); // LED an

}



return 0;

}
#2349527
Lesenswert?
• ▲
▼
So, aber den service gibbets nich immer:

#define F_CPU 1000000UL  // 1 MHz
#include <avr/io.h>

#define LED PORTB1       // Port musst du wissen
#define TASTER1 PORTB2   // dito
#define TASTER2 PORTB3   // dito

int main(void) {
  DDRB &= ~(1<<TASTER1) | ~(1<<TASTER2);  // Port B: Eingang für Taster
  DDRB |= (1<<LED);                       // Port B: Ausgang für LED
  PORTB |= (1<<TASTER1) | (1<<TASTER2);   // Interne Pullups anknipsen
  char taster1_pressed=0;     // Eine Flag wird gesetzt, ob taster 
gedrueckt
  char taster2_pressed=0;
  char led_is_on=0;

  PORTB &= ~(1<<(LED))     // LED ausschalten

  while(1) {
   // da darfste selber knabbern

  }
  return 0;
}
Gast #2350396
Lesenswert?
• ▲
▼
danke

ich habs jetzt^^

#include <avr/io.h>

int main()

{


DDRD &=~(1<<PD0); // internen pull-up
DDRB |=  (1<<PB7); //LED

PORTD|= (1<<PD0); // internen pullup
PORTB&= ~(1<<PB7);


while(1) {


if(!(PIND&(1<<PIND0))){

PORTB|= (1<<PB7);

} }

return 0;

}
#2350421
Lesenswert?
• ▲
▼
marvin schrieb:
> danke
>
> ich habs jetzt^^

aber die äussere Form!

Gewöhn dir von Anfang an an: nach einer { wird um 2 Zeichen eingerückt. 
Die zugehörige } wird wieder um 2 Zeichen ausgerückt. So sieht man auf 
einen Blick, wo Schleifen sind, wo if sind, und welche Anweisungen von 
ihnen kontrolliert werden. Dein Miniprogramm kannst du so noch 
überblicken, keine Frage. Aber das wird sich sehr schnell ändern und 
dann sind die Einrückungen (und ein paar strategische Leerzeichen die 
den Lesefluss verbessern) deine erste Front im Kampf gegen die 
Komplexität.

1
#include <avr/io.h>
2

3
int main()
4
{
5
  DDRD &=~(1<<PD0); // internen pull-up
6
  DDRB |=  (1<<PB7); //LED
7
 
8
  PORTD |= (1<<PD0); // internen pullup
9
  PORTB &= ~(1<<PB7);
10
  
11
  
12
  while( 1 ) {
13

14
    if( !(PIND & (1<<PIND0)) ) {
15
      PORTB |= (1<<PB7);
16
    }
17
    else {
18
      PORTB &= ~(1<<PB7);
19
    }
20
  }
21

22
  return 0;
23
}

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.