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
:
Bearbeitet durch User
Richard W. schrieb: > GPIOB -> ODR = 0x2; // LED 2 was macht das denn mit der vorher gesetzten 0x1 ?
Richard W. schrieb: > Ich hab an meinem µC mehrere LED's. Es ist unnötig den Mikrocontroller anzugeben denn es gibt ja nur einen Einheits-Controller auf der ganzen Welt. Richard W. schrieb: > mehrere LED's. -------------^--- Dazu gibt es eine hilf- und lehrreiche Seite. http://www.deppenapostroph.info
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
Johannes S. schrieb: > Richard W. schrieb: >> GPIOB -> ODR = 0x2; // LED 2 > > was macht das denn mit der vorher gesetzten 0x1 ? die leuchtet nicht. Ist das denn soweit richtig programmiert? oder mach ich irgendwo einen Fehler?
Richard W. schrieb: > Bitte nur darauf antworten, wenn es für mich hilfreich ist, alles andere > wird von mir ignoriert. Meine Zeit ist kostbar! Bitte nur Fragen stellen, die mit allen Informationen kommen, die man zur Beantwortung braucht. Unsere Zeit ist noch viel kostbarer. Oliver
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.
Mach dir den Unterschied zwischen Bit- und Byteweise Registerzugriff klar.
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.
Edit:
1 | while(1){ |
2 | GPIOB -> ODR = 0x3; // LED 1 und LED2 |
3 | delay(100); |
4 | GPIOB -> ODR &=~ 0x3; // invertieren LED aus |
5 | delay(100); |
6 | } |
Sollte beide LEDs leuchten lassen.
:
Bearbeitet durch User
Gustl B. schrieb: > GPIOB -> ODR = 0x3; Was? Selber rechnen? Dann schon lieber: GPIOB -> ODR = 0x1 | 0x2;
Gustl B. schrieb: > Edit: > >
1 | > while(1){ |
2 | > GPIOB -> ODR = 0x3; // LED 1 und LED2 |
3 | > delay(100); |
4 | > GPIOB -> ODR &=~ 0x3; // invertieren LED aus |
5 | > delay(100); |
6 | > } |
> > Sollte beide LEDs leuchten lassen. stimmt, das klappt auch. danke...
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.
jo mei schrieb: > Dazu gibt es eine hilf- und lehrreiche Seite. > http://www.deppenapostroph.info Danke dafür, hahahahahaa
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
:
Bearbeitet durch User
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?
> Meine Zeit ist kostbar!
Wer sich mit Mikrocontroller programmieren beschäftigt, braucht Zeit
ohne Ende.
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.
Manfred schrieb: > da sind immer ein paar Dussel, die eine Lösung vorkauen. Volle Zustimmung. Manfred schrieb: > sollte ein Grund sein, den Kasper auflaufen zu lassen. Volle Zustimmung.
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.