Forum: Mikrocontroller und Digitale Elektronik Bitmanipulation Tastereingang


von mderw (Gast)


Lesenswert?

Hallo zusammen. In meinem Projekt scheitert es an einer Kleinigkeit.

#include <avr/io.h>

int main (void){

        DDRB |= 0b00000010;

  while(1){
    if (1<<PB0){      //wenn eingang bei PB0
      PORTB |= (1<<PB1);  //dann ausgang bei PB1
    }
  }
}

Die Eingangsspannung bei PB0 kommt von einem Transistor(Emmiter), 
bedeutet bei mir 4,3V (5-0,7). Liegt es daran, dass der Mikrocontroller 
den Ausgang nicht schaltet.? Was kann man machen.?

MfG: mderw

von troll (Gast)


Lesenswert?

> if (1<<PB0){

if(PINB&(1<<PB0))

von troll (Gast)


Lesenswert?

mderw schrieb:
>//wenn eingang bei PB0
>//dann ausgang bei PB1
Diese Kommentare sind mindestens nichtssagend wenn nicht falsch. Und der 
Ausgang wird niemals abgeschaltet. Vielleicht wolltest du sowas

if(PINB&(1<<PB0)) //Wenn Eingang auf logisch 1
  PORTB|=(1<<PB1); //Ausgang auf 1 setzen
else
  PORTB&=~(1<<PB1); Ausgang auf 0 setzen

von mderw (Gast)


Lesenswert?

Ja. Das habe ich übersehen. Es geht aber immer noch nicht. Liegt es doch 
an der Spannung von 4,3V.?

von troll (Gast)


Lesenswert?

mderw schrieb:
> Ja. Das habe ich übersehen. Es geht aber immer noch nicht. Liegt es doch
> an der Spannung von 4,3V.?

Ach so, dein Eingang wird per Transistor gesteuert. Jetzt verstehe ich. 
Wenn du den genauen Typ des µC verrätst könnte man im Datenblatt gucken 
ob 4,3V schon als logisch 1 erkannt werden (ich vermute mal ja).

von mderw (Gast)


Lesenswert?

Atmega8 und BC547

von Christian (Gast)


Lesenswert?

Poste den ganzen Code und am besten einen Schaltplan!
Der Fehler steckt oftmals nicht da, wo man ihn zuerst vermutet!

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.