Schalter drücken und LED leuchten

Gast #3759678
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
}
#3759693
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.
Gast #3759696
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.

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.