LED mit Taster aktivieren

OP #819514
Lesenswert?

Habe folgende Problem möchte mit dem Mega8 Controller mit einem Taster 
eine LED einschalten. LED Ist an PORTD.0 angeschloßen mit der Masse der 
Taster an PORTB.0 ebenfalls mit der Masse. Hier das Prog was mach ich 
falsch bzw. wo liegt der fehler?


#include <mega8.h>

void main (void)
{
DDRD = 0x01;     //PORTD.0 Ausgang
DDRB = 0xFE;    //PORTB.0 Eingang

while (1) {

if (!(PINB & (PINB.0=0)))   //Ist PORTB.0 auf low?
{
PORTD.0 = 0;              //Ja. LED an
}
else
{
PORTD.0 = 1;           //Nein. LED aus
};
};
}
Persönliche Seite #819526
Lesenswert?

> if (!(PINB & ("PINB.0=0")))

Ist das in "" gesetze nicht BASCOM-Dialekt? Ich mache es immer so:
if (!(PINB & (1<<PB0)))

Ich weiß nicht ob es so funktioniert wie du es geschrieben hast weil ich 
es noch nie so Probiert habe aber ich wollte drauf mal hinweisen :)

Oh aber was ich noch sehe: Selbst wenn es funktioniert. Fragst du damit 
ab ob PINB.0 = "1" ist und nicht "0". Weil du Fragst ob PINB.0 ungleich 
"0" ist.
OP #819532
Lesenswert?

Habe das Programm jetzt geändert. Ist der Pullup Widerstand am Taster 
jetzt aktiv? Wieso leuchtet die LED sofort wenn der Controller 
Betriebsspannung hat (LED ist gegen Masse geschltet) und da DDRD.0 = 1 
ist müsste sie doch aus sein oder? Und erst beim betätigen des Tasters 
aufleuchten oder verstehe ich da was falsch?

#include <mega8.h>

void main (void)
{
DDRD = 0x01;     //PORTD.0 Ausgang
DDRB = 0xFE;    //PORTB.0 Eingang
PORTB.0 = 0x01;  //Pullup Widerstand aktiviert
while (1) {

if (!(PINB & (1<<PINB.0)))   //Ist PORTB.0 auf low?
{
PORTD.0 = 0;              //Ja. LED an
}
else
{
PORTD.0 = 1;           //Nein. LED aus
};
};
}
Persönliche Seite #819534
Lesenswert?

1
 if (!(PINB & (1<<PB0)))   //Ist PORTB.0 auf low?
2
 {
3
   PORTD.0 = 1;              //Ja. LED an
4
 }
5
 else
6
 {
7
   PORTD.0 = 0;           //Nein. LED aus
8
 }
Versuchs mal damit.

Achso und "DDRB = 0xFE;" kannst du auch getrost weglassen wenn du bei 
PORTB nichts als Ausgang brauchst weil der AVR beim Starten alle Ports 
als Eingänge deklariert.

Und nochwas: Die Semikola nach den geschweiften Klammern kannst du auch 
weglassen.
OP #819536
Lesenswert?

Die LED leuchtet nicht mehr ... geht aber beim betätigen des Tasters 
auch nicht an....


WAS kann DAS Problem sein?


#include <mega8.h>

void main (void)
{
DDRD = 0x01;     //PORTD.0 Ausgang
DDRB = 0xFE;    //PORTB.0 Eingang
PORTB.0 = 0x01;  //Pullup Widerstand aktiviert
while (1) {


if (!(PINB & (1<<PINB.0)))   //Ist PORTB.0 auf low?
 {
   PORTD.0 = 1;              //Ja. LED an
 }
 else
 {
   PORTD.0 = 0;           //Nein. LED aus
 }

};
}
Persönliche Seite #819539
Lesenswert?

1
#include <io.h>
2

3
void main (void)
4
{
5
DDRD = 0x01;     //PORTD.0 Ausgang
6
DDRB = 0xFE;    //PORTB.0 Eingang
7
PORTB = 0x01;  //Pullup Widerstand aktiviert
8
while (1) 
9
{
10
  if (!(PINB & (1<<PB0)))   //Ist PORTB.0 auf low?
11
  {
12
    PORTD |= (1<<PD0);              //Ja. LED an
13
  }
14
  else
15
  {
16
    PORTD &= ~(1<<PD0);           //Nein. LED aus
17
  }
18
}
19
return(0);
20
}

Versuch es GENAU so dann muss es funktionieren. Wenn nicht dann...ja 
dann weiß ich auch nicht^^

STOP!!
Wurde gerade geändert. Du hast den PullUp falsch aktiviert.

AH noch mehr STOP! Das mir das alles net aufgefallen ist. Schande über 
mich!!
Hast mal BASCOM programmiert gibs zu^^

So jetzt muss es aber stimmen.
OP #819541
Lesenswert?

geht leider auch nicht .....hmm was kann das bloß sein der code ist 
richtig oder

#include <io.h>

void main (void)
{
DDRD = 0x01;     //PORTD.0 Ausgang
DDRB = 0xFE;    //PORTB.0 Eingang
PORTB.0 = 0x01;  //Pullup Widerstand aktiviert
while (1)
{
  if (!(PINB & (1<<PINB.0)))   //Ist PORTB.0 auf low?
  {
    PORTD.0 = 1;              //Ja. LED an
  }
  else
  {
    PORTD.0 = 0;           //Nein. LED aus
  }
}
}
OP #819545
Lesenswert?

hab den code soweit wie möglich übernommen nur paar sachen geändert da 
CodeVision die sonst als fehler nennt z.B PD0 = PIND.0 oder return= (0) 
ganz weg weil oben steht ja void main (void)

#include <io.h>

void main (void)
{
DDRD = 0x01;     //PORTD.0 Ausgang
DDRB = 0xFE;    //PORTB.0 Eingang
PORTB = 0x01;  //Pullup Widerstand aktiviert
while (1)
{
  if (!(PINB & (1<<PINB.0)))   //Ist PORTB.0 auf low?
  {
    PORTD |= (1<<PIND.0);              //Ja. LED an
  }
  else
  {
    PORTD &= ~(1<<PIND.0);           //Nein. LED aus
  }
}
}


GEHT IMMER NOCH NICHT Hilfe

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