Möglicherweise optimiert der Kompiler die Zeile
for (unsigned int i = Takt/4000ul; i > 0; i--) ;
einfach weg, weil seiner Meinung nach nichts passiert. Versuch mal:
for (unsigned volatile nt i = Takt/4000ul; i > 0; i--) ;
Werbung
Möglicherweise optimiert der Kompiler die Zeile
for (unsigned int i = Takt/4000ul; i > 0; i--) ;
einfach weg, weil seiner Meinung nach nichts passiert. Versuch mal:
for (unsigned volatile nt i = Takt/4000ul; i > 0; i--) ;
Jetzt wird in die Funktion gesprungen, aber ich sehe nicht, dass die Variable i in irgendeiner Weise heruntergezählt wird. Der gelbe Balken verlässt die Funktion wieder nach nur einem Schritt. Beim nächsten Mal steht dann in i wieder der Startwert.<br>Ich würde schon gerne sehen, dass die Variable i heruntergezählt wird bevor die For-Scleife wieder verlassen wird.
Gibt es überhaupt einen Inhalt zu void warte 1ms?
Schreib mal so:
for (unsigned int i = Takt/4000ul; i > 0; i--)
{
asm("nop");
}
Dann wird es funktionieren. Ausserdem solltest du das Takt/4000ul vorher machen, sonst wird es bei jedem Durchlauf neu berechnet. Das sind dann etliche Takte mehr.
mach deinen Zähler volatile!
Code:void Warte1ms(void) { volatile unsigned int i; for (i = Takt/4000ul; i > 0; i--) ; }
edit:
das ist übrigens genau das, was ich meine, wenn ich sage:
nacktes C ist für Anfänger absolut nicht geeignet!
Daher gibt es für Anfänger C per Arduino IDE.
da gibt es Timer mit Millisekunden
millis()
oder Microsekunden
micros()
und
delay(msec)
und
delayMicroseconds(usec)
Ansonsten musst du dir die Timer callbacks selber programmieren.
( * schauder * )
Code:int outPin = 8; // digital pin 8 void setup() { pinMode(outPin, OUTPUT); // sets the digital pin as output } void loop() { digitalWrite(outPin, HIGH); // sets the pin on delayMicroseconds(50); // pauses for 50 microseconds digitalWrite(outPin, LOW); // sets the pin off delayMicroseconds(50); // pauses for 50 microseconds }
Geändert von HaWe (15.11.2015 um 21:06 Uhr)
Auch in C gibt es delay(ms). Ist auf jeden Fall einfacher als void. Wenn ich void warte ... nichts reinschreibe wird es einfach gelesen ohne Funktion.
Lesezeichen