Forum: Mikrocontroller und Digitale Elektronik 1 LED mit einem Taster steuern


von Stief (Gast)


Lesenswert?

Hallo :)

es geht um folgendes, ich will mit einem Taster eine LED aus schalten!
Sie lässt nur einschalten und dann nicht mehr aus! Zur Info: Ich 
beschäftige mich noch nicht lange mit C und mit dem ATMEGA 8515! Hab ein 
Stk 500!
1
#include <avr/io.h>
2
#include <stdlib.h>
3
#include <util/delay.h>
4
5
unsigned char i;
6
7
int main (void)
8
{
9
10
//EINGÄNGE
11
DDRA = 0x00;      //Die PINA's sind Eingänge
12
PORTA = 0xff;      //PULLUP AKTIV --> zum schalten wird ein 
13
            //Low_signal benötigt
14
15
16
//AUSGÄNGE         
17
DDRB = 0xff;      //DATENRICHTUNGSREGISTER AUF AUSGANG    
18
PORTB = 0xff;      //SCHALTE AUSGÄNGE LOW; STANDARTFALL: HIGHPEGEL
19
20
21
22
while(1) 
23
{
24
  
25
  if(PINA == 0b11111110)     //Wenn PINA0 low signal hat -->schalten
26
  {
27
    
28
    _delay_ms(400);      //einfache Tastenentprellung
29
  
30
    
31
    if(i == 1)      //falls
32
    {  
33
    i = 0;        //ausschalten
34
    }
35
    
36
    
37
    else        //ansonsten
38
    {
39
    i = 1;        //einschalten
40
    }
41
         
42
  } 
43
44
  
45
  
46
  if(i == 1)          //wenn i high
47
  {
48
  (PORTB &= ~(1<<PINB0));    //lösche leztes bit dh. schalten, da lowsignal
49
  }
50
51
  
52
}
53
return(0);
54
}

LG Stief

Danke für eure Hilfe

von Floh (Gast)


Lesenswert?

Stief schrieb:
> if(i == 1)          //wenn i high
>   {
>   (PORTB &= ~(1<<PINB0));    //lösche leztes bit dh. schalten, da lowsignal
>   }

else
   {
    PORTB |= 1<<PINB0); //Ausschalten ergänzen
   }

:-)

von Torsten K. (ago)


Lesenswert?

Die delayfunktion würde ich auch ans Ende setzen, damit man auf 
Tastendruck sofort das Ergebnis sieht :)

von Chris L. (kingkernel)


Lesenswert?

Und statt auf die Signalpegel des ganzen Ports zu schauen, würde ich nur 
einen Pin abfragen. Und am besten auch noch Shiften

Statt
1
PINA == 0b11111110
also
1
!(PINA & 0b00000001)
oder besser noch
1
!(PINA & (1 << PA0))

von Stief (Gast)


Lesenswert?

heyhey,

ok jezt funktionierts :)

VIELEN DANK!

LG

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.