Forum: Mikrocontroller und Digitale Elektronik Schalter drücken und LED leuchten


von Xavier (Gast)


Lesenswert?

HI zusammen,

Ich habe ein programm geschrieben, das programme sollte beim Drücken 
eines
Schalters an PD2 ein Led am PA4 leuchten. Leider macht es das nicht ich 
habe den Schalter und das LED getestet und alles ist funktionsfähig.


Bitte helfen Sie mir den Fehler zu finden. Unten finden Sie mein code



1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
5
6
7
int main(void)
8
{   
9
  uint8_t bit_pd2;
10
  
11
  
12
  // das bit PD2 als Eingang definieren
13
  DDRD = 0;  
14
   
15
  // alle bit von PORTA als Ausgang 
16
  DDRA = 0xFF;  
17
  PORTD =0xFF;
18
        PORTA =0;
19
  
20
21
  
22
    while(1)
23
    {  
24
    bit_pd2= (PIND&0b00000100)>>2;  // Maskieren und um zwei schieben
25
    
26
    
27
    if (bit_pd2==0)         // prüfen ob Schalter gedrückt ist
28
    {
29
      
30
        PORTA |= (1<<PA4);
31
  
32
      
33
    }
34
  
35
        _delay_ms(1000);  
36
  }
37
}

von Felix P. (fixxl)


Lesenswert?

Das Problem liegt in der Art und Weise der Auswertung. Wenn alle Pins an 
Port D als Eingänge definiert und alle Pullup-Widerstände an Port D 
aktiviert sind, wird bei ungedrücktem Schalter der Wert von PIND 
0b11111111 betragen, bei gedrücktem Schalter 0b11111011. Wenn man das 
nun um zwei nach rechts schiebt, wird da nie 0 als Ergebnis 
herauskommen.

Wie man einzelne Bits korrekt abfragt, steht in Bitmanipulation.

von Peter II (Gast)


Lesenswert?

Felix Pflaum schrieb:
> wird bei ungedrücktem Schalter der Wert von PIND
> 0b11111111 betragen, bei gedrücktem Schalter 0b11111011. Wenn man das
> nun um zwei nach rechts schiebt, wird da nie 0 als Ergebnis
> herauskommen.

deswegen macht er ja ein PIND&0b00000100

das ist schon ok.

Aber die LED wird nie wieder ausgeschaltet, bzw. wenn sie gegen +VCC 
geschaltet ist geht sie nie an.

von Xavier (Gast)


Lesenswert?

Vielen dank ihr beide Peter und Felix,

Ja das Problem lag genau beim Ausschalten der LED


danke gut

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.