Mikrocontroller programmieren

OP #6336230
Hi,

ich hab mal eine kleine Frage. Ich bin gerade neu im Bereich des 
programmieren was Mikrocontroller betrifft.

Ich hab an meinem µC mehrere LED's. Ich hab jetzt mal eine LED zum 
leuchten gebracht mit dem Befehl:

while(1){
GPIOB -> ODR = 0x1; // LED 1
}

Die LED 1 leuchtet auch soweit. Nun will ich sich zum blinken bringen.

while(1){
GPIOB -> ODR = 0x1; // LED 1
delay(100);
GPIOB -> ODR &=~ 0x1;
delay(100);
}

void delay(int delay)
{
   int i;
   for (;delay > 0; delay--)
   {
      for (i = 0; i < 3195; i++);
   }
}

Das hat auch wunderbar geklappt.

Nun wollte ich das spiel mit zwei LED's machen, aber irgendwie 
funktioniert das ganze nicht wie ich es mir vorgestellt habe. Ich würde 
gerne wollen, dass beide LED's gleichzeitig blinken und nicht 
nacheinander. Ich dachte mit dem Code:

while(1){
GPIOB -> ODR = 0x1; // LED 1
GPIOB -> ODR = 0x2; // LED 2
delay(100);
GPIOB -> ODR &=~ 0x1; // invertieren LED aus
GPIOB -> ODR &=~ 0x2; // inverdieren LED aus
delay(100);
}

void delay(int delay)
{
   int i;
   for (;delay > 0; delay--)
   {
      for (i = 0; i < 3195; i++);
   }
}

sollte es klappen aber nur LED 2 blinkt und LED 1 nicht. Programmiert 
man das nicht so oder wo ist hier mein Fehler?

Bitte nur darauf antworten, wenn es für mich hilfreich ist, alles andere 
wird von mir ignoriert. Meine Zeit ist kostbar!

LG
RW
#6336246
jo mei schrieb:
> Es ist unnötig den Mikrocontroller anzugeben

Das stimmt hier tatsächlich, denn den Fehler kann man im Code schön 
sehen.

Zuerst werden die IOs auf 0x1 gesetzt, also wenn das z. B. 8 IOs sind, 
dann wird 00000001 ausgegeben. Die LED am letzten IO leuchtet.

Danach setzt er die IOs auf 0x2 und es wird 00000010 ausgegeben, also 
eine 2 (siehe Binärsystem). Die letzte LED ist dann wieder aus.
OP #6336250
Lars schrieb:
> jo mei schrieb:
>> Es ist unnötig den Mikrocontroller anzugeben denn es gibt
>> ja nur einen Einheits-Controller auf der ganzen Welt.
>
> Stimmt. Ist dir das noch nicht aufgefallen?
>
> Richard W. schrieb:
>> GPIOB -> ODR = 0x1; // LED 1
>> GPIOB -> ODR = 0x2; // LED 2
>
> versuchs mal mit:
>
>> GPIOB -> ODR |= 0x1; // LED 1
>> GPIOB -> ODR |= 0x2; // LED 2

danke lars, ich hab das genau so auch vorher recherchiert und mir in 
meinem block aufgeschrieben aber leider habe ich das vergessen im code 
zu übernehmen. danke es klappt jetzt.
Gast #6336263
Richard W. schrieb:
> Hi,
>

> Bitte nur darauf antworten, wenn es für mich hilfreich ist, alles andere
> wird von mir ignoriert. Meine Zeit ist kostbar!
>
> LG
> RW

Und warum stellst Du hier Fragen, wenn Du selbst erkennen kannst, was an 
möglichen Antworten richtig ist, bevor Du sie liest? Nix anderes ist 
ignorieren.
Arrogant und zu b*** Tutorials zu durchforsten.
#6338093
Richard W. schrieb:
> GPIOB -> ODR = 0x1; // LED 1
> GPIOB -> ODR = 0x2; // LED 2

Wird nicht beim Setzen der LED 2 die LED 1 abgedreht?

GPIOB->ODR = 0x03; // LED 1 & LED 2

oder

GPIOB -> ODR |= 0x1; //LED 1
GPIOB -> ODR |= 0x2; // LED 2

gleiches gilt :

Richard W. schrieb:
> GPIOB -> ODR &=~ 0x1; // invertieren LED aus
> GPIOB -> ODR &=~ 0x2; // inverdieren LED aus

GPIOB->ODR = ~0x03; // LED 1 & LED 2

oder

GPIOB -> ODR &= ~0x1; //LED 1
GPIOB -> ODR &= ~0x2; // LED 2
Gast #6338400
Richard W. schrieb:
>
> Bitte nur darauf antworten, wenn es für mich hilfreich ist, alles andere
> wird von mir ignoriert. Meine Zeit ist kostbar!
> LG RW

Welchen Mikrocontroller?
Gibt's zwei, drei am Markt!

Bist du Callboy, weil deine Zeit ach so kostbar ist?
Gast #6338596
Bommelmütze schrieb:
> Wer sich mit Mikrocontroller programmieren beschäftigt,
> braucht Zeit ohne Ende.

Wer sich wirklich beschäftigt , ja.

Aktuell stellt man sich eher faul und fragt jeden Kinderkram im Forum, 
da sind immer ein paar Dussel, die eine Lösung vorkauen.

Schon alleine dieser rotzfrech arrogante Satz
Richard W. schrieb:
> Bitte nur darauf antworten, wenn es für mich hilfreich ist,
> alles andere wird von mir ignoriert. Meine Zeit ist kostbar!

sollte ein Grund sein, den Kasper auflaufen zu lassen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 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.