- Labornetzteil AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 29

Thema: Zähler der immer gleich schnell zählt

  1. #11
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Anzeige

    LiFePo4 Akku selber bauen - Video
    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().

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    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
    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
    Hier ist mein Code

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    UPS Kann mal passieren

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    Habs jetzt mit utoa geschaft aber da habe ich noch ein Problem:

    Der 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;
    		
    		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;
    }
    Wenn ich utoa mit diesem Teil ersetzte

    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

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    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


    Code:
    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
    Mir wärs auch lieber wenns mit utoa funktioniert weil da ist viel weniger zum flashen

    Lg

  6. #16
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    Wow danke ihr seid die besten

    Ich werde jetzt mal das mit dem Timer testen ob er jetzt bin 65000 zählt

    Lg

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    Ganz zufrieden bin ich noch nicht

    Hier mein Programm
    Code:
    #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);}*/
    Er zählt irgendwie so eigenartig wenn ich irgend einen Taster drück

    Code:
    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
    Lg

  9. #19
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    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

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress