Hallo,
ich versuche mich weiterhin am Microcontroller und scheitere bei einer Formelberechnung wenn das Ergebnis scheinbar größer 65535 ist.
Berechnet werden soll ein Wert für eine Verzögerung, dass ist für ein Lauflicht gedacht womit zum experimentieren die Geschwindigkeit eingestelt werden soll.
Jetzt habe ich mitbekommen das die Lauflichtgeschwindigkeit ab einem Wert von ca. 65500 spinnt, vermutlich ein Überlauf stattfindet und wieder bei 0 anfängt bis zum nächsten Überlauf. Geregelt mit einem Poti am A/D Eingang mit 10Bit.
Als Formel nutze ich:
maxlimit = 50*ad;
verwende ich statt 50 eine 100, dann spinnt das Ding schon rum. ad hat ein Bereich von 0 ... 1023
In der Unterfunktion \"vorwarts\" werden die LED angesteuert und immer zwischendurch zu \"delay\" gesprungen.
aus meiner Sicht der entscheidende Code sieht so aus:
long t; // long = 32Bit Zahl mit Vorzeichen
long maxlimit; // Zähler für Delay Schleife - Speed
long ADneu;
long limit;
long offset;
// Delay Schleife
void delay (void)
{
for (t=0; t<maxlimit; t++); // Delayschleife
return;
}
while (1) /* Loop */
{
maxlimit = 50*ad; // Delay Wertneuberechnung
vorwarts();
}
Was muß ich ändern um Werte größer 65535 nutzen zu können?
Ich meine, die Variablen sind doch schon auf \"long\" gesetzt.
Vermute was mit dem void delay Aufruf.