....... schrieb:
> Da hat mich interessiert. Wenn ich von Low auf High schalte, dann
> braucht es eine gewisse Zeit bis es in den Zustand kommt.
Ähm, du solltest dir mal klarmachen, über welche Zeiten du hier redest.
Natürlich braucht jeder einzelne Befehl ein bischen Zeit. Aber das liegt
im µs Bereich bzw. Bruchteilen davon (je nach Taktfrequenz)! In dieser
Zeit dreht dein Schrittmotor noch nicht mal ein paar Bogensekunden
weiter.
> Wenn der Zustand High ist und ich setze ihn wieder High - braucht es
> wieder eine gewisse Zeit bis es in den Zustand kommt weil es wieder
> gesetzt wurde oder bleibt es einfach auf High.
Ähm. Denk mal logisch darüber nach:
Dein Pin ist High.
Du setzt ihn auf High.
Warum, um alles in der Welt, soll der kurfristig auf Low gehen? Kein
Mensch hat irgendwas von Low gesagt.
> braucht es
> wieder eine gewisse Zeit bis es in den Zustand kommt
In welchen Zustand denn? Der Pin ist doch schon High. Higher als High
kann der nicht werden.
Wenn du in deinem Zimmer am Lichtschalter auf "Ein" drückst, obwohl das
Licht schon brennt, dann brennt das Licht eben einfach weiter. Und wenn
du 50 mal draufdrückst, interessiert das die Glühbirne nicht. Ein ist
ein.
>
>
1 | do
|
2 | > {
|
3 | > if (~PINB & (1<<PB6))
|
4 | > {
|
5 | > TCCR1A &= ~(1<<COM1A0);
|
6 | > PORTB |= (1<<PB5);
|
7 | > }
|
8 | > else
|
9 | > {
|
10 | > TCCR1A |= (1<<COM1A0);
|
11 | > }
|
12 | >
|
13 | >
|
14 | > if (~PINB & (1<<PB4))
|
15 | > {
|
16 | > TCCR1A &= ~(1<<COM1C0);
|
17 | > PORTB |= (1<<PB7);
|
18 | > }
|
19 | > else
|
20 | > {
|
21 | > TCCR1A |= (1<<COM1C0);
|
22 | > }
|
23 | >
|
24 |
|
25 | Hier an dieser Stelle sein PB4 schon längst 0 und just in diesem
|
26 | Moment wechselt PB6 von 1 auf 0
|
27 |
|
28 | >
|
29 | > }while((PINB & (1<<PB6)) || (PINB & (1<<PB4)));
|
Immer noch das gleiche Problem.
Es ist nicht garantiert, dass du die Abschaltung erhältst. Überleg dir
einfach mal was passiert, wenn PB6 seinen Zustand wechselt kurz bevor
das Programm zur abschliessenden while-Abfrage kommt. Die Schleife wird
verlassen, ohne dass du innerhalb der Schleife die Chance hattest, den
Motor abzuschalten.