Hi Leutz, möchte mit dem AVR-Testboard (MK2 mit Atmega8) schon mal testweise ein Programm erstellen, welches dann später leicht abgewandelt auf einem Attiny13 lauffähig ist. Daher benutze ich auf dem AVR-Testboard natürlich ausschließlich den Port B. Dieser wird belegt mit zwei digitalen Eingängen, einem digitalen Ausgang und einem PWM-Ausgang. Nun möchte ich logischerweise Bitmuster abfragen, um diese als Einschaltbedingungen für den digitalen Ausgang zu nutzen. Kann es sein, daß mir der externe Quarz (dieser hängt ja an PB6 und PB7) da hineinfunkt und ich nicht direkt Bitmuster abfragen kann? Hier mal als Beispiel: DDRB=0b00000011; //Bit 1 und 2 sind Ausgänge PORTB=0b11111100; //Pull UP Bit 3-8 auf EIN . . . if ((Variable1==1) & (!(PINB==0b11111111))) PORTB=0xFF; Hier soll abgefragt werden, ob Variable 1 gesetzt ist und gleichzeitig kein Taster gedrückt ist. Dies würde, wenn ich dies als PIND deklariere, tadellos funktionieren. Bei PINB jedoch klappt das nicht, wie ich mir das wünsche. Weiß da jemand Rat? Danke schon mal :-). Daniel
Hi >Kann es sein, daß mir der externe Quarz (dieser hängt ja an PB6 und PB7) >da hineinfunkt und ich nicht direkt Bitmuster abfragen kann? Nicht der Takt. Bit 6 und 7 gibt es nicht. Datenblatt: If PB7 is used as a clock pin, DDB7, PORTB7 and PINB7 will all read 0. MfG Spess
Das heißt, wenn PB6 und PB7 wegfallen, würde meine Bitmaske z.B. so aussehen? if (!(PINB & 0b100000)) ... Wobei die "1" in diesem Ausdruck dann PB5 beschreibt, sehe ich das richtig?
@ Daniel Lo (dannynrw) >Das heißt, wenn PB6 und PB7 wegfallen, würde meine Bitmaske z.B. so >aussehen? >if (!(PINB & 0b100000)) >... >Wobei die "1" in diesem Ausdruck dann PB5 beschreibt, sehe ich das >richtig? ja. Aber das schreibt man eher so, da ist es deutlich besser lesbar. if (!(PINB & (1<<PB5))) Siehe Bitmanipulation
Daniel Lo schrieb: > Daher benutze ich auf dem AVR-Testboard natürlich ausschließlich den > Port B. Dieser wird belegt mit zwei digitalen Eingängen, einem digitalen > Ausgang und einem PWM-Ausgang. Dann fragt man eben nur die beiden Eingänge ab. Das Isolieren bestimmter Bits nennt sich Maskieren (& - Operator). Danach sind alle unnützen Bits egal. Z.B. Pin 0 und 7:
1 | uint8_t inval = PINB & (1<<PB0 | 1<<PB7); |
Peter
Danke für die Tipps, habe die Tage mal ein wenig damit rumexperimentiert und bin jetzt ein bißchen weiter. Beste Grüße :-). Daniel
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.