Anfängerschaltung

Gast #3254289
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
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
> 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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.