Das Problem wird bei sprintf liegen das "%d" steht für integer Zahlen - da müsste ein "%u" hin. Die Routine sollte man schon aus Gründen der Rechenzeit und des Speichers wenn möglich vermeiden. Besser nimmt man hier utoa().
Druckbare Version
Das Problem wird bei sprintf liegen das "%d" steht für integer Zahlen - da müsste ein "%u" hin. Die Routine sollte man schon aus Gründen der Rechenzeit und des Speichers wenn möglich vermeiden. Besser nimmt man hier utoa().
Achso
Habs vorher mit itoa probiert aber das ist nie gegangen da war die Variable immer 0
Heißt das wenn ich es mit utoa mache das ich dann das Problem mit
int und unsigned int nicht mehr habe
Mein Beitrag
Hier ist mein CodeZitat:
Habe da ein Problem meine Variable ist mit unsigned int z=0; deklariert
Das heißt es müsste eigentlich von 0 - 65535 zählen.
Aber er zählt ab 32 000 wieder runter
UPS Kann mal passieren
Habs jetzt mit utoa geschaft aber da habe ich noch ein Problem:
Der Code
Wenn ich utoa mit diesem Teil ersetzteCode:#include "asuro.h"
#include "stdlib.h"
int main(void)
{
unsigned int LANG = 0;
char aC[2];
int t=0,a=0;
Init();
StatusLED (GREEN);
while (1)
{
a=a+2;
if (a > 20)
LANG++; //Verzögerung des Zählers
if (a > 20)
a=0;
utoa (LANG, aC, 5); //Umwandeln von int auf char
SerWrite (aC, 2); //Übertragen ins Hyper Terminal
SerWrite ("=VAR\n\r", 6);
for (t=0; t< 40; t++) //Kurze Pause beim Übertragen
{Sleep (72);}
if ((LANG > 0) && (LANG < 5))
{BackLED(OFF,OFF);
StatusLED(RED);}
if ((LANG > 5) && (LANG < 10))
{BackLED(ON,ON);
StatusLED(GREEN);}
if (LANG > 9)
LANG = 0;
}
return 0;
}
sprintf(aC, "%d", LANG);
SerWrite(aC, 2);
SerWrite (" aC\n\r", 5);
funktioniert alles.
Wenn ich utoa nehme nicht
Das sehe ich im Hyper Terminal
Code:3=VAR
3=VAR
4=VAR
4=VAR
4=VAR
4=VAR
4=VAR
4=VAR
4=VAR
4=VAR
4=VAR
4=VAR
4=VAR //Wieso?
10=VAR //Wieso von 4 auf 10
10=VAR
keine Ahnung wieso er von 4 auf 10 springt
Lg
Hier habe mal beides gemacht
Code
Code:#include "asuro.h"
#include "stdlib.h"
int main(void)
{
unsigned int LANG = 0;
char aC[2];
int t=0,a=0;
Init();
StatusLED (GREEN);
while (1)
{
a=a+2;
if (a > 20)
LANG++; //Verzögerung des Zählers
if (a > 20)
a=0;
sprintf(aC, "%d", LANG);
SerWrite(aC, 2);
SerWrite (" aC\n\r", 5);
utoa (LANG, aC, 5); //Umwandeln von int auf char
SerWrite (aC, 2); //Übertragen ins Hyper Terminal
SerWrite ("=VAR\n\r", 6);
for (t=0; t< 130; t++) //Kurze Pause beim Übertragen
{Sleep (72);}
if ((LANG > 0) && (LANG < 5))
{BackLED(OFF,OFF);
StatusLED(RED);}
if ((LANG > 5) && (LANG < 10))
{BackLED(ON,ON);
StatusLED(GREEN);}
if (LANG > 9)
LANG = 0;
}
return 0;
}
Hier Hyper Terminal
Mir wärs auch lieber wenns mit utoa funktioniert weil da ist viel weniger zum flashenCode:4 aC
4=VAR
4 aC
4=VAR
4 aC
4=VAR
5 aC
10=VAR
5 aC
10=VAR
5 aC
10=VAR
5 aC
10=VAR
5 aC
10=VAR
5 aC
10=VAR
Lg
Der letzte Parameter bei utoa() sollte in der Regel eine 10 sein. Wenn da eine 5 steht, wird das 5er System benutzt, und da bedeuten dann "10" halt fünf.
Wie es so schön heißt: Beim Binärsystem gibt es 10 Möglichkeiten, man versteht es, oder halt nicht.
Wow danke ihr seid die besten
Ich werde jetzt mal das mit dem Timer testen ob er jetzt bin 65000 zählt
Lg
Ganz zufrieden bin ich noch nicht
Hier mein Programm
Er zählt irgendwie so eigenartig wenn ich irgend einen Taster drückCode:#include <stdbool.h>
#include <stdio.h>
#include <asuro.h>
int main(void)
{
Init();
char zC[2];
unsigned char umschaltpunkt;
int t = 0;
unsigned int z = 0;
/*******************************************************************************************/
while( 1 )
{
if(Gettime() > umschaltpunkt) // Umschaltzeitpunkt überschritten?
{
umschaltpunkt += 1000; // neuen Umschaltzeitpunkt festlegen
z++;
}
if (PollSwitch() == 1)
z=80;
if (PollSwitch() == 2)
z=65500;
if (PollSwitch() == 4)
z=32740;
if (PollSwitch() == 16)
z=0;
/**********************************************************************/
//sprintf(zC, "%d", z); //Übertragen
utoa (z, zC, 10);
SerWrite(zC, 5); //Übertragen
SerWrite (" zC\n\r", 6); //Übertragen
for (t=0; t< 40; t++) //Übertragen
{ //Übertragen
Sleep (72); //Übertragen
} //Übertragen
/***********************************************************************/
if (z > 200)
z=0;
}
return 0;
}
/* sprintf(aC, "%d", LANG);
SerWrite(aC, 2);
SerWrite (" aC\n\r", 5);
utoa (LANG, aC, 10); sprintf(aC, "%d", LANG);
SerWrite (aC, 2);
SerWrite ("=VAR\n\r", 6);
for (t=0; t< 130; t++)
{Sleep (72);}*/
LgCode:32740 zC
32740 zC
32740 zC //if (PollSwitch() == 2) habe ich gedrückt
1740 zC // wieso zählt er nicht weiter bis auf 65635?
2740 zC
3740 zC
4740 zC
5740 zC
6740 zC
if (z > 200) z=0; könnte die Sache etwas durcheinander bringen.
Außerdem ist da wohl noch ein Problem mit dem Puffer oder serwrite(), da bleiben irgendwie noch die 740 drin stehen.
Hallo
Ok das mit den 200 ist klar danke (blöde frage von mir eigentlich)
Meinst du das
SerWrite(zC, 5); Aber da können 5 stellen übertragen werden
65000 sind genau 5
Werde das morgen testen muss noch lernen!!
Leider
Lg