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

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