Anfängerschaltung

Gast #3254289
Lesenswert?

Hallo,
ich befasse mich jetzt hobbymäßig mit einem microcontroller(also 
absoluter anfänger).
ich hab hier zum testen eine lampe mit 2 led´s. ich lasse beide blinken, 
blitzen usw. nun wollte ich das die eine blinkt und die andere einfach 
nur leuchtet. das problem, jedenfalls für mich, ist das die beiden led´s 
auf einem port liegen und somit bekomme ich nur eine funktion zu stande.
hier ist mein quellcode zum blinken:
(das 8. bit ist die rote led und das 7. bit ist eine gelbe) ich will nun 
das die gelbe blinkt und die rote leuchtet.
1
#include<avr/io.h>
2
#include <util/delay.h>
3

4

5
int main (void)
6

7
{
8
  DDRD=0xff;
9

10

11
  while(1)
12
  {
13
  PORTD=0b11000000;
14

15
  _delay_ms(500);
16
  PORTD=0;
17
  _delay_ms(500);
18
  }
19

20

21
}
#3254350
Lesenswert?

shaby schrieb:
> danke für den link aber schlauer wurde ich dadurch auch nicht.
> heißt das

Das heißt, dass du in erster Linie mal von der Idee des 'ich weise dem 
Port als ganzen einen Wert (den ich vollinhaltlich kenne) zu' abrücken 
musst.

Wenn du den Pin 7 an einem Port verändern willst, dann darfst du auch 
nur diesen einen Pin verändern und nicht alle!

D.h. du brauchst etwas, was genau dieses berücksichtigt. Du musst 
praktisch gesehen dan aktuellen Zustand des Portes hernehmen (egal wie 
die Bits gerade stehen), das eine gewünschte Bit auf 0 bzw. 1 setzen und 
dann dieses Ergebnis wieder an den Port zurückschreiben. Ergebnis: nur 
dieses 1 Bit hat sich verändert. Alle anderen sind wieder so, wie sie 
vor der Operation waren, weil bei der abschliessenden Zuweisung an den 
Port diese Bits wieder mit genau denselben Werten 'überschrieben' 
werden, die sie auch vorher schon hatten. Und damit ändert sich für die 
nichts.

Womit wir bei den Bitoperationen wären. Den Link dazu hast du ja schon.
Gast #3254366
Lesenswert?

> wenn ich mein portd "oder" verknüpfe müsste es klappen?
Mit "oder" kannst du das Bit auf 1 setzen aber du kannst es mit "oder" 
nicht auf 0 setzen.
Mit "und" kannst du das Bit auf 0 setzen aber du kannst es mit "und" 
nicht auf 1 setzen.
Gast #3254367
Lesenswert?

Platziere
PORTD=0b11000000;
oben außerhalb der Schleife, und statt PORTD=0 mach
PORTD ^=(1<<PD6);

Mit letzterer Anweisung wird das Bit mittels XOR invertiert.
Das bedeutet aus 1 wird 0 und aus 0 wird 1.

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