- 3D-Druck Einstieg und Tipps         
Seite 5 von 5 ErsteErste ... 345
Ergebnis 41 bis 45 von 45

Thema: Asuro soll die Werte von Variab über Hyper terminal ausgeben

  1. #41
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Anzeige

    Powerstation Test
    Den Sprung von 201 auf 11 kann ich (noch) nicht erklären aber es gibt einiger Programmier-Fehler in dein Programm umsonst.

    Code:
    ...
    unsigned char umschaltpunkt;
    ...
    if(Gettime() > umschaltpunkt)
    {
        umschaltpunkt += 1000;
    ...
    Du vergleichst ein Gettime Wert (unsigned long) mit umschaltpunkt (ein unsigned char) das bis jetzt noch kein Anfangswert bekommen hat! Ein unsigned long, das von 0 bis 4294967295 zahlen kann, ist oft größer als ein Wert das von 0 bis 255 sein kann. Das letzte ist aber im Prinzip kein Problem. Nur den Anfangswert ist, weil niemand ahnen kann wann das passieren soll.

    Den Erhöhung von umschaltpunkt mit 1000 ist aber ein Problem. 1000 ist großer als den maximale wert das es enthalten kan (255). Genau welcher wert es bekommt nach dieses befehl weiss ich nicht genau. Aber es wurde ungefähr gleich sein als ein Reduktion mit 24. (vielleicht einiger werten mehr oder weniger wegen 2-Komplement Rechnung (Wiki) ).Das soll sicher Kompilier Fehler oder Warnungen gegeben haben müssen!

  2. #42
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Zitat Zitat von Valen
    Den Sprung von 201 auf 11 kann ich (noch) nicht erklären aber es gibt einiger Programmier-Fehler in dein Programm umsonst.

    Kann es sein das es nur den 1nser anzeigt der eigentlich nicht hingehört, weil wenn ich den 1nser wegdenke stimmt es


    Habe jetzt das Programm so


    Code:
    #include <stdbool.h>
    #include <stdio.h>
    #include <asuro.h>
       int main(void)
    {
       Init();
       char zC[2];
       unsigned char umschaltpunkt = 0;
       unsigned int z = 0;
       int t = 0;
    /*******************************************************************************************/
    while( 1 )
    {
       if(Gettime() > umschaltpunkt)       // Umschaltzeitpunkt überschritten?
       {
       umschaltpunkt += 200;              // neuen Umschaltzeitpunkt festlegen
       z++;
       }
    
    if (PollSwitch() == 1)
       z=0;
    
    
    if (PollSwitch() == 2)
       z = 65500;
    
    if (PollSwitch() == 4)
       z = 190;
    
    
    
    /**********************************************************************/
          sprintf(zC, "%d", z);      //Übertragen
          SerWrite(zC, 6);         //Übertragen
          SerWrite ("  zC\n\r", 6);   //Übertragen
       for
          (t=0; t< 40; t++)         //Übertragen
            {                     //Übertragen
            Sleep (72);               //Übertragen
            }                     //Übertragen
    /***********************************************************************/
    
    
    
    }
       return 0;
    }

    EDIT

    unsigned int z = 0;
    Eigentlich müsste er ja da bis 65 000 zählen oder ?

    Aber
    Code:
    32762  zC
    32763  zC
    32764  zC
    32765  zC
    32766  zC
    32767  zC
    -32768  zC
    -32767  zC
    -32766  zC
    -32765  zC
    -32764  zC
    -32763  zC
    -32762  zC
    Keine Ahnung wieso das so ist

  3. #43
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Was ich möchte ist eigentlich nur
    dass:

    1. Einen Timer stellen
    Dann soll ein int Wert hochgezählt werden(x):

    if (timer irgendwo)
    x++;


    if timer irgendwo
    timer = 0 // brauch ich ja oder weil er kann nicht größer wie 255 sein


    Da möchte ich dann das Programm reinschreiben

    if (x < 20)
    FrontLED(ON);
    .............
    ...........
    ...........
    ............

    Programm ende

  4. #44
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Zitat Zitat von Problem
    ...
    EDIT

    unsigned int z = 0;
    Eigentlich müsste er ja da bis 65 000 zählen oder ?

    Aber
    Code:
    32762  zC
    32763  zC
    32764  zC
    32765  zC
    32766  zC
    32767  zC
    -32768  zC
    -32767  zC
    -32766  zC
    -32765  zC
    -32764  zC
    -32763  zC
    -32762  zC
    Keine Ahnung wieso das so ist
    Ja das soll es auch meines Wissen. Wieso das nicht passiert verstehe ich auch nicht.

    (Meiner) EDIT:
    Laut diese link ist "unsigned int" nicht als standard definiert. Versuch mal mit "unsigned short".

    http://www.rn-wissen.de/index.php/C-...anze_Zahlen.29

  5. #45
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    30
    Beiträge
    173
    Wenn ich das ändere und neu rüberspielen möchte schreibt er gleich OK

    Also es kennt da keien Unterschied

Seite 5 von 5 ErsteErste ... 345

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad