Forum: Mikrocontroller und Digitale Elektronik Anfängerschaltung


von shaby (Gast)


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
}

von 4toTakoe (Gast)


Lesenswert?


von M.N. (Gast)


Lesenswert?


von spess53 (Gast)


Lesenswert?


von shaby (Gast)


Lesenswert?

danke für den link aber schlauer wurde ich dadurch auch nicht.
heißt das wenn ich mein portd "oder" verknüpfe müsste es klappen?

von Werner P. (Gast)


Lesenswert?


von Karl H. (kbuchegg)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

spess53 schrieb:
> 11:26
> http://www.mikrocontroller.net/articles/Bitmanipulation
shaby schrieb:
> 11:40
> danke für den link aber schlauer wurde ich dadurch auch nicht.
Lass dir mal ein paar Stunden Zeit.
Man muss nicht alles in einer Viertelstunde kapieren...

von Uwe (Gast)


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.

von Jemand (Gast)


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.

von shaby (Gast)


Lesenswert?

super danke für eure hilfe...aber wie lothar schrieb werd ich mir da ein 
wenig mehr zeit geben...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

shaby schrieb:
> werd ich mir da ein wenig mehr zeit geben...
Tu das.
Und mach weiter, bis du das tatsächlich kapiert und verinnerlicht hast. 
Es wird dir laufend vor die Füße kommen...

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.