- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 29 von 29

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

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

    Powerstation Test
    Bei utoa ist der String wie sonst bei C üblich mit einer "o" als Ende markiert. Die Routine SerWirte() scheint immer stur 5 zeichen zu schreiben. Da kommt dann eine Mischung mit dem alten Pufferinhalt raus. Die oben gezeigte 1740 sind wohl eine 1 , dann das Trennzeichen (ASCII code 0 -> wird nicht gezeigt) und dann 740 als Rest aus dem Puffer (von 32740).

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    Ok

    Das heißt er zählt richtig und wenn er von 4 auf 1 Stelle springt sind die letzten 3 einfach wegzudenken

    Oder

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    Habe jetzt nochmal zusammengefasst (Weil etwas funktioniert)

    Hier mein Code

    Code:
    #include <stdbool.h>
    #include <stdio.h>
    #include <asuro.h>
       int main(void)
    {
       Init();
       char zC[2];
       unsigned char umschaltpunkt;
       int t = 0,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;
    }

    Hier HT ausgabe
    Code:
    65528  zC
    65529  zC
    65530  zC
    65531  zC
    65532  zC
    65533  zC
    65534  zC
    65535  zC             //So stimmt es Da ich oben z mit int deklarieert habe
    0535  zC
    1535  zC
    2535  zC
    3535  zC
    4535  zC
    5535  zC
    6535  zC

    Wenn ich z mit unsigned int deklariere:

    Init();
    char zC[2];
    unsigned char umschaltpunkt;
    int t = 0;
    unsigned int z = 0;

    Code:
    10  zC
    11  zC
    12  zC
    13  zC
    14  zC
    15  zC                    //Taster gedrückt
    30000  zC                  // fangt er immer wieder bei null an 
    1000  zC
    2000  zC
    3000  zC
    4000  zC
    5000  zC
    6000  zC
    7000  zC
    8000  zC
    9000  zC
    1000  zC
    1100  zC

    Wieso?

  4. #24
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das Problem ist immer noch die Ausgabe aus dem Puffer. Genau wie vermutet kommt das Problem, wenn die Zahl der Ziffern abnimmt.
    Die komischen Kästchen sind ein schönes Beispiel dazu.

  5. #25
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    Das oben genannte Programm stimmt eigentlich nicht


    Weil:
    int t = 0,z = 0; (z müsste eigentlich bis 32768 zählen)

    es zählt aber bis 65535

    Wieso

    Keine Ahnung bitte helft mir wenn ihr eine Idee habt

    Lg

  6. #26
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für die Addition, Subtraktion und halt auch das z++ macht es keinen Unterschied ob die variable als int oder uint deklariert ist. Da wird einfach der selbe ASM-code erzeugt. Der Unterschied kommt nur dadurch wie die Zahlen ab 32768 interpretiert werden. Das selbe Bitmuster kann z.B. als 32768 (uint16) oder -32768 (int) interpretiert werden.

    Was ausgegeben wird wird entsprechend festgelegt durch den Formatstring beim printf oder halt die Wahl ob man utoa oder itoa nimmt. Eine strenge Prüfung ob das zur Variablendeklaration passt findet nicht statt. Eine Warnung wäre schön - kommt aber wohl nicht.

  7. #27
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    doch

    Diese 3

    test.c:35: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
    test.c:36: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
    test.c:8: warning: 'umschaltpunkt' may be used uninitialized in this function


    Lg

  8. #28
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Warnungen verstehe ich nicht ganz. Die haben auch nichts mit der Umwandlung zu tun, sondern erst mit der Ausgabe und der Funktion SerWrite(), wohl aus "Asuro.h".

    Die Hoffnung wäre eventuell eine solche Warnung zu bekommen wenn man utoa() mit einer Integer Variable aufruft.

    Da ist noch ein Problem: zC ist mit als 2 Zeichen langer Puffer definiert - der sollten wenigstens 7 Zeichen lang sein ( für "-12345" und eine 0 als Abschluss).

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    31
    Beiträge
    173
    Hallo

    Ich habe es jetzt auf 7 geändert und habe das gleiche Ergebniss

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Labornetzteil AliExpress